From e0c04c8ba25cdc9b48552cdc9546e86c77266395 Mon Sep 17 00:00:00 2001 From: sabicalija <> Date: Sun, 1 Dec 2024 02:01:55 +0000 Subject: [PATCH] docs: release --- 404.html | 8 ++++---- .../css/{0.styles.b74cd268.css => 0.styles.cd1d0d0c.css} | 2 +- assets/js/{100.9e38f532.js => 100.0ab5f2bf.js} | 2 +- assets/js/{101.698f5272.js => 101.55bff9b1.js} | 2 +- assets/js/{102.cc9a7f84.js => 102.66546639.js} | 2 +- assets/js/{103.60605569.js => 103.a7976e54.js} | 2 +- assets/js/{104.06644d41.js => 104.c11d7b2c.js} | 2 +- assets/js/{105.8231b26f.js => 105.3f810fba.js} | 2 +- assets/js/{106.e77ed4f8.js => 106.51cde090.js} | 2 +- assets/js/{107.662e2da3.js => 107.cfe217ec.js} | 2 +- assets/js/{108.5bb7d9aa.js => 108.919fa994.js} | 2 +- assets/js/{109.38119d7c.js => 109.e98b355b.js} | 2 +- assets/js/{110.b63d17e4.js => 110.e4229db5.js} | 2 +- assets/js/{111.aa000995.js => 111.80188e5b.js} | 2 +- assets/js/{112.6cb9c5a9.js => 112.4dce625e.js} | 2 +- assets/js/{113.821c8369.js => 113.2687132e.js} | 2 +- assets/js/{114.a5910d07.js => 114.ba45231f.js} | 2 +- assets/js/{115.04cbdea2.js => 115.4ef81a79.js} | 2 +- assets/js/{116.5b94955f.js => 116.d63730ba.js} | 2 +- assets/js/{117.18a42da2.js => 117.0c5d5cd8.js} | 2 +- assets/js/{118.89d40ea6.js => 118.6fd278db.js} | 2 +- assets/js/{119.c33392fe.js => 119.34307f1b.js} | 2 +- assets/js/{12.9cf2fe85.js => 12.7015b996.js} | 2 +- assets/js/{121.408b06cb.js => 121.99b0f34f.js} | 2 +- assets/js/{122.6d31a7d1.js => 122.8665890b.js} | 2 +- assets/js/{123.3d9bc0ec.js => 123.3bae29ec.js} | 2 +- assets/js/{124.67ce29f7.js => 124.0c6b4a3a.js} | 2 +- assets/js/{125.8d4856f2.js => 125.3a160a1d.js} | 2 +- assets/js/{126.e21e1ad7.js => 126.87cb7f78.js} | 2 +- assets/js/{127.5e261f38.js => 127.1bce1fe4.js} | 2 +- assets/js/{128.e1c6745b.js => 128.85d645bf.js} | 2 +- assets/js/{129.6f3d16ce.js => 129.fdb39d91.js} | 2 +- assets/js/{13.61edaffd.js => 13.a324eca3.js} | 2 +- assets/js/{130.68300466.js => 130.de6e36f4.js} | 2 +- assets/js/{131.71d55b25.js => 131.b6d692c2.js} | 2 +- assets/js/{132.fee5c5d5.js => 132.da5d1bd5.js} | 2 +- assets/js/{133.b3ad2ffe.js => 133.0348c000.js} | 2 +- assets/js/{134.fbe4e6f5.js => 134.b8b66a89.js} | 2 +- assets/js/{135.3d2b77b3.js => 135.58e12e9b.js} | 2 +- assets/js/{136.f94ff2c2.js => 136.85cc6adb.js} | 2 +- assets/js/{137.d104f9e4.js => 137.7f77ae6c.js} | 2 +- assets/js/{138.41364369.js => 138.ec124362.js} | 2 +- assets/js/{139.4ebc29fc.js => 139.3da6703e.js} | 2 +- assets/js/{14.2c42dcb5.js => 14.d6148202.js} | 2 +- assets/js/{140.88de24a8.js => 140.705f006a.js} | 2 +- assets/js/{141.1270d493.js => 141.0cd32b21.js} | 2 +- assets/js/{142.adebdb9d.js => 142.ec23fa9a.js} | 2 +- assets/js/{143.04aeb5ee.js => 143.1abe170c.js} | 2 +- assets/js/{144.da97f755.js => 144.3e93f388.js} | 2 +- assets/js/{145.213392fc.js => 145.5c59694a.js} | 2 +- assets/js/{146.2f86ac05.js => 146.f5a30dfa.js} | 2 +- assets/js/{147.2f02e55d.js => 147.d721d9d7.js} | 2 +- assets/js/{148.70170c40.js => 148.9a6335e8.js} | 2 +- assets/js/{149.3d20ffc2.js => 149.4e9a989f.js} | 2 +- assets/js/{150.0a3594c7.js => 150.8a938188.js} | 2 +- assets/js/{151.be13a346.js => 151.f826ced2.js} | 2 +- assets/js/{152.f7690c1f.js => 152.52e9ca2d.js} | 2 +- assets/js/{153.b2a56dd3.js => 153.414a698e.js} | 2 +- assets/js/{154.5be43710.js => 154.f9548897.js} | 2 +- assets/js/{155.cf1f7c31.js => 155.bb6e1ba6.js} | 2 +- assets/js/{156.4b65b291.js => 156.82b436e4.js} | 2 +- assets/js/{157.0a2af865.js => 157.608e39b0.js} | 2 +- assets/js/{158.54077b19.js => 158.cecdc754.js} | 2 +- assets/js/{159.e6ef3b94.js => 159.7bdcbd33.js} | 2 +- assets/js/{16.df2bbddd.js => 16.13723687.js} | 2 +- assets/js/{160.fb9f1818.js => 160.c56bfeed.js} | 2 +- assets/js/{161.90f1a436.js => 161.595fa06b.js} | 2 +- assets/js/{162.5aceeeb6.js => 162.5f17702d.js} | 2 +- assets/js/{163.30322116.js => 163.b8f9482f.js} | 2 +- assets/js/{164.50f9608f.js => 164.6a0d4d64.js} | 2 +- assets/js/{165.1c1cb742.js => 165.e291f50e.js} | 2 +- assets/js/{166.f1dd8334.js => 166.7f1f68e1.js} | 2 +- assets/js/{167.d4f9cf3d.js => 167.0dc441c7.js} | 2 +- assets/js/{168.8cbdc88c.js => 168.78a97289.js} | 2 +- assets/js/{169.e1b3a564.js => 169.e852db6e.js} | 2 +- assets/js/{170.1cb36eb9.js => 170.80eb7392.js} | 2 +- assets/js/{171.e1185e60.js => 171.43893a7d.js} | 2 +- assets/js/{172.7e4325b7.js => 172.d9d792a0.js} | 2 +- assets/js/{173.ec39eaca.js => 173.d1c41401.js} | 2 +- assets/js/{174.d611b832.js => 174.754e790c.js} | 2 +- assets/js/{175.3996a703.js => 175.8d2f1b33.js} | 2 +- assets/js/{176.1d05d592.js => 176.adc830b0.js} | 2 +- assets/js/{177.908d964b.js => 177.7a5ed2e7.js} | 2 +- assets/js/{178.87887f38.js => 178.adb13763.js} | 2 +- assets/js/{179.49901c4d.js => 179.0cc0889e.js} | 2 +- assets/js/{18.dec6a7c9.js => 18.1afd62ba.js} | 2 +- assets/js/{180.7e542b45.js => 180.3b4a13f6.js} | 2 +- assets/js/{181.7ea61dc6.js => 181.52184a9b.js} | 2 +- assets/js/{182.1d59391c.js => 182.cc67506c.js} | 2 +- assets/js/{183.31d14bad.js => 183.07a712b9.js} | 2 +- assets/js/{184.fdebdc91.js => 184.927e106b.js} | 2 +- assets/js/{185.e3ca0e07.js => 185.b590396e.js} | 2 +- assets/js/{186.7bc84a7b.js => 186.52dea392.js} | 2 +- assets/js/{187.abef5dfc.js => 187.cd7fc2a9.js} | 2 +- assets/js/{188.ed107055.js => 188.be91157e.js} | 2 +- assets/js/{189.41207779.js => 189.750a8531.js} | 2 +- assets/js/{19.d900a5a7.js => 19.993ddc49.js} | 2 +- assets/js/{190.43fd2af8.js => 190.1305662c.js} | 2 +- assets/js/{191.3ee5c506.js => 191.645545b1.js} | 2 +- assets/js/{192.3ab5f6e6.js => 192.1cff1d91.js} | 2 +- assets/js/{193.5759071f.js => 193.99d4b013.js} | 2 +- assets/js/{194.0e3e6669.js => 194.e6b2db6c.js} | 2 +- assets/js/{195.ff5e6a58.js => 195.1dda4f5a.js} | 2 +- assets/js/{196.69e8f6d9.js => 196.358a3231.js} | 2 +- assets/js/{197.656f66e0.js => 197.9a6dfbc9.js} | 2 +- assets/js/{198.287970e2.js => 198.ff7e37d1.js} | 2 +- assets/js/{199.aeaefb56.js => 199.1f02fbb0.js} | 2 +- assets/js/20.3b70a273.js | 1 - assets/js/20.85754a20.js | 1 + assets/js/{200.8d85a009.js => 200.97795e0a.js} | 2 +- assets/js/{201.02f25e09.js => 201.7c3001fd.js} | 2 +- assets/js/{202.4ab3cb1f.js => 202.fa02c017.js} | 2 +- assets/js/{203.4422e380.js => 203.6ed3ddcc.js} | 2 +- assets/js/{204.05359b66.js => 204.03ad897e.js} | 2 +- assets/js/{205.d54ea064.js => 205.7882f9cd.js} | 2 +- assets/js/{206.1d09c36d.js => 206.1b860eed.js} | 2 +- assets/js/{207.4a71e790.js => 207.31dcba08.js} | 2 +- assets/js/{208.b52ae166.js => 208.81817169.js} | 2 +- assets/js/{209.64b3a0a3.js => 209.62118cc6.js} | 2 +- assets/js/{21.c9029408.js => 21.5b240941.js} | 2 +- assets/js/{211.99a2d336.js => 211.2c4ec3ea.js} | 2 +- assets/js/{213.a02ae857.js => 213.042b5734.js} | 2 +- assets/js/{214.69ed2088.js => 214.c90e5ec0.js} | 2 +- assets/js/{215.c021b553.js => 215.5d38f82f.js} | 2 +- assets/js/{216.81eeb2ac.js => 216.168fdb29.js} | 2 +- assets/js/{217.96a966e9.js => 217.61e110e7.js} | 2 +- assets/js/{218.64d9c21d.js => 218.410d84f0.js} | 2 +- assets/js/{219.4f5fc95d.js => 219.08dc456b.js} | 2 +- assets/js/{22.6c53eda0.js => 22.9c6170dd.js} | 2 +- assets/js/{220.0fb6f473.js => 220.8907cb8f.js} | 2 +- assets/js/{221.d0835a1c.js => 221.405e50dc.js} | 2 +- assets/js/{222.e1c8e948.js => 222.8ec4a0e6.js} | 2 +- assets/js/{223.dd3744c7.js => 223.55ba3364.js} | 2 +- assets/js/{224.6e13107c.js => 224.87181fe2.js} | 2 +- assets/js/{225.8b3109c6.js => 225.efaddc56.js} | 2 +- assets/js/{226.881faffc.js => 226.0fbef67c.js} | 2 +- assets/js/{227.c18ac690.js => 227.f2f8a103.js} | 2 +- assets/js/{228.0ced96e1.js => 228.5a935437.js} | 2 +- assets/js/{229.a64faa7f.js => 229.e7926b4f.js} | 2 +- assets/js/{23.bc682a1b.js => 23.2fdaca85.js} | 2 +- assets/js/{230.c9490c1e.js => 230.e3d1e4e5.js} | 2 +- assets/js/{231.56a02a53.js => 231.7fff5a57.js} | 2 +- assets/js/{232.38813191.js => 232.7195259a.js} | 2 +- assets/js/{234.62628e62.js => 234.5fde931b.js} | 2 +- assets/js/{236.7cd1ccc9.js => 236.bdff31f2.js} | 2 +- assets/js/{237.da7a51b8.js => 237.5e3d3381.js} | 2 +- assets/js/{238.8c1e90b5.js => 238.580e0546.js} | 2 +- assets/js/{239.8d0a5254.js => 239.5fbd1ec2.js} | 2 +- assets/js/{24.cfb5a2f6.js => 24.1cfbba75.js} | 2 +- assets/js/{240.369897d5.js => 240.58bb5d95.js} | 2 +- assets/js/{241.f0bba66d.js => 241.75245bbb.js} | 2 +- assets/js/{242.d2fa9bcd.js => 242.43754f9b.js} | 2 +- assets/js/{243.2b0420d1.js => 243.111b3ae4.js} | 2 +- assets/js/{244.05ea02ae.js => 244.2a48b233.js} | 2 +- assets/js/{245.42d41f4c.js => 245.2cd92ba6.js} | 2 +- assets/js/{246.ee60da55.js => 246.dfbbed5d.js} | 2 +- assets/js/{247.0424e9d4.js => 247.c1a24c8e.js} | 2 +- assets/js/{248.aa3377dd.js => 248.6e96bd51.js} | 2 +- assets/js/{249.265f0c16.js => 249.38ead3a2.js} | 2 +- assets/js/{25.c86449f8.js => 25.952f5aa9.js} | 2 +- assets/js/{250.842cf373.js => 250.e4aca7ca.js} | 2 +- assets/js/{251.53475791.js => 251.1be574ea.js} | 2 +- assets/js/{252.6fa0c25c.js => 252.91d21ffe.js} | 2 +- assets/js/{253.4124dd14.js => 253.04620e2a.js} | 2 +- assets/js/{254.b02c8dfa.js => 254.bdef4bcc.js} | 2 +- assets/js/{255.446ce26d.js => 255.19ed73db.js} | 2 +- assets/js/{256.b0bd1795.js => 256.1715b98d.js} | 2 +- assets/js/{257.8c9ce1d0.js => 257.1ed59be9.js} | 2 +- assets/js/{258.92321666.js => 258.2d1025aa.js} | 2 +- assets/js/{259.e5dba3c5.js => 259.d92ca943.js} | 2 +- assets/js/{26.7a748c90.js => 26.63399639.js} | 2 +- assets/js/{260.85089714.js => 260.8cc984dd.js} | 2 +- assets/js/{261.3daa9f49.js => 261.de69b0f8.js} | 2 +- assets/js/{262.5d2767ec.js => 262.96562ab5.js} | 2 +- assets/js/{263.7bf898d1.js => 263.c8dd13d1.js} | 2 +- assets/js/{264.49cfa089.js => 264.20773c9f.js} | 2 +- assets/js/{265.4b157215.js => 265.62cad889.js} | 2 +- assets/js/{266.234b9c2e.js => 266.afe8cf81.js} | 2 +- assets/js/{267.64a8ede7.js => 267.a74c44ed.js} | 2 +- assets/js/{268.dc466a9c.js => 268.3e340c0d.js} | 2 +- assets/js/{269.e42dda26.js => 269.7a100324.js} | 2 +- assets/js/{27.f2c190b1.js => 27.730f0b1c.js} | 2 +- assets/js/{270.8d270c18.js => 270.82525729.js} | 2 +- assets/js/{271.da400853.js => 271.d0c6e513.js} | 2 +- assets/js/{272.024b082b.js => 272.59279dbe.js} | 2 +- assets/js/{273.1f543121.js => 273.6891dd84.js} | 2 +- assets/js/{274.2270b991.js => 274.f6c7c4e9.js} | 2 +- assets/js/{275.71353893.js => 275.ce2fe009.js} | 2 +- assets/js/{276.8c380b15.js => 276.2f59e433.js} | 2 +- assets/js/{277.7bd0b69e.js => 277.ba1f5b1a.js} | 2 +- assets/js/{278.770a4467.js => 278.5d09ebce.js} | 2 +- assets/js/{279.cabaa4bf.js => 279.3d06e9ea.js} | 2 +- assets/js/{28.a5924173.js => 28.fb4e1471.js} | 2 +- assets/js/{280.37cc5fde.js => 280.e71f8812.js} | 2 +- assets/js/{281.e2235cc3.js => 281.0bf1e306.js} | 2 +- assets/js/{282.0b267136.js => 282.ee7aef78.js} | 2 +- assets/js/{283.a3c9b40d.js => 283.3fb8cd32.js} | 2 +- assets/js/{290.05de3171.js => 290.c2d65d31.js} | 2 +- assets/js/{291.f164a1e0.js => 291.95b4e438.js} | 2 +- assets/js/{292.cd0f9fd5.js => 292.ff6d5030.js} | 2 +- assets/js/{295.a2466f46.js => 295.769ec7d8.js} | 2 +- assets/js/{296.e15007b1.js => 296.f0aee286.js} | 2 +- assets/js/{297.28666c1a.js => 297.14d845d3.js} | 2 +- assets/js/{30.c184393c.js => 30.182d9f74.js} | 2 +- assets/js/{300.ce2f0795.js => 300.cfd04eb4.js} | 2 +- assets/js/{301.467c731a.js => 301.37ff11e2.js} | 2 +- assets/js/{302.764dd69c.js => 302.84284d9c.js} | 2 +- assets/js/{303.a1b0be60.js => 303.b5a5a0ee.js} | 2 +- assets/js/{305.ac58fd5f.js => 305.d4c73fcc.js} | 2 +- assets/js/{306.1b1eaee1.js => 306.f5de698c.js} | 2 +- assets/js/{307.1bec56a1.js => 307.8370f9c2.js} | 2 +- assets/js/{308.b1a53b12.js => 308.73da3210.js} | 2 +- assets/js/{309.4a0d4d1d.js => 309.a41e3133.js} | 2 +- assets/js/{31.4b6a9279.js => 31.82877776.js} | 2 +- assets/js/{310.78421141.js => 310.40a47636.js} | 2 +- assets/js/{311.4e9336ae.js => 311.2c94ed87.js} | 2 +- assets/js/{312.3f9ae104.js => 312.c17ebc44.js} | 2 +- assets/js/{313.2c8882a9.js => 313.1ba60539.js} | 2 +- assets/js/{314.89b09ecf.js => 314.51b100bf.js} | 2 +- assets/js/{315.9be4dac4.js => 315.2f5dd7bf.js} | 2 +- assets/js/{316.c191dd3d.js => 316.f6d92900.js} | 2 +- assets/js/{317.7103d31f.js => 317.9b024e31.js} | 2 +- assets/js/{319.b25611ce.js => 319.992ae26b.js} | 2 +- assets/js/{320.c0917668.js => 320.e92ad8e6.js} | 2 +- assets/js/{321.5b7fe6bb.js => 321.9bade160.js} | 2 +- assets/js/{322.cbbb8ac3.js => 322.c10ad4c9.js} | 2 +- assets/js/{323.b0865784.js => 323.0ffde70f.js} | 2 +- assets/js/{324.675c5d48.js => 324.a8eae962.js} | 2 +- assets/js/{325.5a20ee36.js => 325.df6b0a9b.js} | 2 +- assets/js/{326.d7776080.js => 326.f69db026.js} | 2 +- assets/js/{328.ded2ecc7.js => 328.aecfb245.js} | 2 +- assets/js/{329.2722b573.js => 329.51225426.js} | 2 +- assets/js/331.2da221cb.js | 1 - assets/js/331.fc158b14.js | 1 + assets/js/{332.6b518c11.js => 332.c67dcfae.js} | 2 +- assets/js/{333.aa4b646c.js => 333.aa4c3ef3.js} | 2 +- assets/js/{334.d6ae34cc.js => 334.099e5326.js} | 2 +- assets/js/{335.fd12f257.js => 335.ba94e8fe.js} | 2 +- assets/js/{336.7899adb1.js => 336.3384f283.js} | 2 +- assets/js/{338.963c706c.js => 338.59b19c36.js} | 2 +- assets/js/{339.1dae1b25.js => 339.ced18b02.js} | 2 +- assets/js/{34.7452418f.js => 34.2bb4ec07.js} | 2 +- assets/js/{340.e9933f79.js => 340.96781440.js} | 2 +- assets/js/{341.49ebeebb.js => 341.6aad8d53.js} | 2 +- assets/js/{342.1b2d53dd.js => 342.4cc73c89.js} | 2 +- assets/js/{343.f081837b.js => 343.d5841410.js} | 2 +- assets/js/344.1c3a19ac.js | 1 + assets/js/344.e85675b3.js | 1 - assets/js/{347.65063b21.js => 347.27af6308.js} | 2 +- assets/js/{348.ae495803.js => 348.b527edc6.js} | 2 +- assets/js/{349.698cea75.js => 349.c7030437.js} | 2 +- assets/js/{35.b8dbb531.js => 35.fffcd70b.js} | 2 +- assets/js/{350.d6a4b97c.js => 350.ae70ab89.js} | 2 +- assets/js/{351.d0200ef6.js => 351.5e83a23c.js} | 2 +- assets/js/{352.40f4c641.js => 352.fce7d0a3.js} | 2 +- assets/js/{353.426fdb50.js => 353.63cc9723.js} | 2 +- assets/js/{354.a1638431.js => 354.c7b1ddba.js} | 2 +- assets/js/{356.b1a64248.js => 356.30b87552.js} | 2 +- assets/js/{358.7051e1a7.js => 358.fb5e5c7c.js} | 2 +- assets/js/{359.24cae214.js => 359.785309a7.js} | 2 +- assets/js/{36.f3e922f5.js => 36.77352b16.js} | 2 +- assets/js/{360.d3a47740.js => 360.669aed2f.js} | 2 +- assets/js/{362.ab711c2e.js => 362.d59285e3.js} | 2 +- assets/js/{363.e53ff1c7.js => 363.d17bda57.js} | 2 +- assets/js/{364.fad30d1a.js => 364.b32856ab.js} | 2 +- assets/js/{365.715286b4.js => 365.43b3e039.js} | 2 +- assets/js/{366.cefef854.js => 366.cd02a06f.js} | 2 +- assets/js/{367.6af66db5.js => 367.00bcfb52.js} | 2 +- assets/js/{368.d962d388.js => 368.3461f99c.js} | 2 +- assets/js/{37.88604a47.js => 37.4219d3d3.js} | 2 +- assets/js/{370.2962bf81.js => 370.89f3274c.js} | 2 +- assets/js/{372.e4c9ad69.js => 372.a902e350.js} | 2 +- assets/js/{375.ce6a6815.js => 375.26d8d23c.js} | 2 +- assets/js/{376.b33d6a34.js => 376.4abdb2a5.js} | 2 +- assets/js/{377.eb276427.js => 377.5eceb79d.js} | 2 +- assets/js/{378.5884cbf0.js => 378.4b649713.js} | 2 +- assets/js/{38.25f82ecc.js => 38.b72746da.js} | 2 +- assets/js/{380.6dce0ec3.js => 380.51a4b984.js} | 2 +- assets/js/{381.9096190c.js => 381.8b1d41d9.js} | 2 +- assets/js/{382.e5bc4924.js => 382.7442fbc2.js} | 2 +- assets/js/{384.d06bc123.js => 384.7d8104bb.js} | 2 +- assets/js/{386.c481ebf1.js => 386.fef3cdb0.js} | 2 +- assets/js/{387.5540fe39.js => 387.d88e7da7.js} | 2 +- assets/js/{39.87fc4957.js => 39.095ade4b.js} | 2 +- assets/js/{4.a5e9913a.js => 4.e07ca2c9.js} | 2 +- assets/js/{40.e4a566f4.js => 40.cd6cd316.js} | 2 +- assets/js/{41.67442f26.js => 41.ecb78c49.js} | 2 +- assets/js/{42.55ad14cd.js => 42.fe7bb89d.js} | 2 +- assets/js/{43.318192a2.js => 43.5092921a.js} | 2 +- assets/js/{44.225eb7c8.js => 44.8df58e2c.js} | 2 +- assets/js/{45.0ea6ff23.js => 45.c06050ea.js} | 2 +- assets/js/{46.1c3e3142.js => 46.6cc9027d.js} | 2 +- assets/js/{47.9e28ab05.js => 47.38e88c29.js} | 2 +- assets/js/{5.43c8b579.js => 5.f4048ccf.js} | 2 +- assets/js/{55.5d5deff3.js => 55.8fe374c1.js} | 2 +- assets/js/{56.f868852a.js => 56.2dcee92a.js} | 2 +- assets/js/{57.cf13c630.js => 57.21aa791f.js} | 2 +- assets/js/{58.b589cf37.js => 58.b787c6c0.js} | 2 +- assets/js/{59.d4f4d8d3.js => 59.84fbde40.js} | 2 +- assets/js/{6.3e7ebab7.js => 6.f215dd70.js} | 2 +- assets/js/{60.dcaad5fc.js => 60.04dda403.js} | 2 +- assets/js/{61.90bce2cb.js => 61.2d7b29c4.js} | 2 +- assets/js/{62.18df649d.js => 62.f687d51b.js} | 2 +- assets/js/{63.a8a24c1e.js => 63.536f9ede.js} | 2 +- assets/js/{64.9d737588.js => 64.4a61fc21.js} | 2 +- assets/js/{65.2dc40b00.js => 65.121ec1dc.js} | 2 +- assets/js/{66.0f82d189.js => 66.a1a00220.js} | 2 +- assets/js/{67.54c08f24.js => 67.71673926.js} | 2 +- assets/js/{68.c70eeb8b.js => 68.ab5fed4c.js} | 2 +- assets/js/{69.3fbb7cfb.js => 69.9ffd1025.js} | 2 +- assets/js/{70.3b8aac09.js => 70.81b8029d.js} | 2 +- assets/js/{71.7a4cf88d.js => 71.abb671ee.js} | 2 +- assets/js/{72.a88af099.js => 72.3aaaddbe.js} | 2 +- assets/js/{73.335eeef4.js => 73.f6b86a63.js} | 2 +- assets/js/{74.bd00a339.js => 74.e4091831.js} | 2 +- assets/js/{75.0424e5c9.js => 75.f54e234c.js} | 2 +- assets/js/{76.b158aecf.js => 76.05493fb2.js} | 2 +- assets/js/{77.f55be022.js => 77.05db69f7.js} | 2 +- assets/js/{78.8bdc5bd4.js => 78.49e38071.js} | 2 +- assets/js/{79.0df67efb.js => 79.94214922.js} | 2 +- assets/js/{81.08669fa6.js => 81.3c93324e.js} | 2 +- assets/js/{82.66e8761c.js => 82.b60309ac.js} | 2 +- assets/js/{83.afbcd7f1.js => 83.70899422.js} | 2 +- assets/js/{84.ccc4cef1.js => 84.b32bb5dd.js} | 2 +- assets/js/{85.6d2e2f3f.js => 85.31659d53.js} | 2 +- assets/js/{86.b7cb09ed.js => 86.f1d21c2e.js} | 2 +- assets/js/{87.19b35635.js => 87.b961e89c.js} | 2 +- assets/js/{88.3dee584e.js => 88.aaa508da.js} | 2 +- assets/js/{89.b8755cfd.js => 89.f43efbae.js} | 2 +- assets/js/{90.cf914999.js => 90.e3799b9d.js} | 2 +- assets/js/{91.eb24f1fe.js => 91.dc771483.js} | 2 +- assets/js/{92.5e6c4717.js => 92.26df8168.js} | 2 +- assets/js/{93.b66561e9.js => 93.2b428727.js} | 2 +- assets/js/{94.85bd2eb8.js => 94.2bd4c8cf.js} | 2 +- assets/js/{95.4775b468.js => 95.fdb756c0.js} | 2 +- assets/js/{96.67962702.js => 96.ba1d6b87.js} | 2 +- assets/js/{97.6882e675.js => 97.cf6781be.js} | 2 +- assets/js/{98.cca344b5.js => 98.3b44205a.js} | 2 +- assets/js/{99.8b15cfc7.js => 99.915948b5.js} | 2 +- assets/js/{app.81c8018a.js => app.af0f0355.js} | 4 ++-- customize/bioelectrical-input/index.html | 6 +++--- customize/environmental-control/index.html | 6 +++--- customize/gaming-toys-music/index.html | 6 +++--- customize/grid/Grid-Creation.html | 6 +++--- customize/grid/Grid-Customization.html | 6 +++--- customize/grid/index.html | 6 +++--- customize/index.html | 6 +++--- customize/model/Model-Creation.html | 6 +++--- customize/model/Model-Customization.html | 6 +++--- customize/model/index.html | 6 +++--- customize/other/index.html | 6 +++--- develop/APE.html | 6 +++--- develop/ARE API.html | 6 +++--- develop/ARE-HW-Interfacing-CIM.html | 6 +++--- develop/ARE-Keyboard-Mouse-Services.html | 6 +++--- develop/ARE-Webserver.html | 6 +++--- develop/ARE.html | 6 +++--- develop/ARE/ARE-Development-Manual.html | 6 +++--- develop/ARE/index.html | 6 +++--- develop/AT-solution-demos.html | 6 +++--- develop/AT_solution_development.html | 6 +++--- develop/Coding-Guidelines.html | 6 +++--- develop/Development-Environment.html | 6 +++--- develop/Plugin-Advanced.html | 6 +++--- develop/Plugin-Introduction.html | 6 +++--- develop/Plugin-Tutorial.html | 6 +++--- develop/REST-API-java-client.html | 6 +++--- develop/REST-API-js-areCommunicator.html | 6 +++--- develop/REST-API-js-wrapper-ext.html | 6 +++--- develop/REST-API.html | 6 +++--- develop/REST-demos.html | 6 +++--- develop/Unit-Testing.html | 6 +++--- develop/are-remote-apis/REST-API.html | 6 +++--- develop/are-remote-apis/REST-demos.html | 6 +++--- develop/are-remote-apis/Webserver.html | 6 +++--- develop/are-remote-apis/Websocket.html | 6 +++--- develop/are-remote-apis/index.html | 6 +++--- develop/asterics-grid/01_structure.html | 6 +++--- develop/asterics-grid/02_tools.html | 6 +++--- develop/asterics-grid/03_grid.html | 6 +++--- develop/asterics-grid/04_vuejs.html | 6 +++--- develop/asterics-grid/05_datamodel.html | 6 +++--- develop/asterics-grid/06_data_storage.html | 6 +++--- develop/asterics-grid/07_i18n.html | 6 +++--- develop/asterics-grid/collaboration.html | 6 +++--- develop/asterics-grid/index.html | 6 +++--- develop/asterics-wiki/api/AsTeRICS Websocket.html | 6 +++--- develop/asterics-wiki/api/REST-API.html | 6 +++--- develop/asterics-wiki/api/Resource Handling.html | 6 +++--- .../coding_instructions/AsTeRICS Solutions.html | 6 +++--- .../AsTeRICS Webserver Document Root.html | 6 +++--- develop/asterics-wiki/coding_instructions/JavaCV.html | 6 +++--- develop/asterics-wiki/coding_instructions/Unit Tests.html | 6 +++--- develop/asterics-wiki/components/AsTeRICS Plugins.html | 6 +++--- develop/at-solution/APE.html | 6 +++--- develop/at-solution/AT-solution-tutorial.html | 6 +++--- develop/at-solution/index.html | 6 +++--- develop/get-started/Coding-Guidelines.html | 6 +++--- develop/get-started/Development-Environment.html | 6 +++--- develop/get-started/index.html | 6 +++--- develop/index.html | 6 +++--- develop/plugin/Computer-Vision.html | 6 +++--- develop/plugin/Plugin-Advanced.html | 6 +++--- develop/plugin/Plugin-Averager.html | 6 +++--- develop/plugin/Resource-Handling.html | 6 +++--- develop/plugin/index.html | 6 +++--- get-involved/About-us.html | 6 +++--- get-involved/Contact.html | 6 +++--- get-involved/Contribute.html | 6 +++--- get-involved/Legal-Notice.html | 6 +++--- get-involved/index.html | 6 +++--- get-started/Demos.html | 6 +++--- get-started/Installation.html | 6 +++--- get-started/Overview.html | 6 +++--- get-started/index.html | 6 +++--- guide/docs.html | 6 +++--- guide/editor.html | 6 +++--- guide/markdown.html | 6 +++--- index.html | 6 +++--- manuals/ACS/Actuators.html | 6 +++--- manuals/ACS/Channels.html | 6 +++--- manuals/ACS/Colours_settings.html | 6 +++--- manuals/ACS/Component_Collection_Manager.html | 6 +++--- manuals/ACS/Component_Context_Menu.html | 6 +++--- manuals/ACS/Connected.html | 6 +++--- manuals/ACS/Control_the_ARE.html | 6 +++--- manuals/ACS/Create_and_Edit_a_Model.html | 6 +++--- manuals/ACS/Dialogs_settings.html | 6 +++--- manuals/ACS/Disconnected.html | 6 +++--- manuals/ACS/Events.html | 6 +++--- manuals/ACS/External_Tools.html | 6 +++--- manuals/ACS/External_Tools_Options.html | 6 +++--- manuals/ACS/GUI_Designer.html | 6 +++--- manuals/ACS/General_settings.html | 6 +++--- manuals/ACS/Keyboard_control.html | 6 +++--- manuals/ACS/Load_and_Save_Models.html | 6 +++--- manuals/ACS/Miscellaneous.html | 6 +++--- manuals/ACS/Modes.html | 6 +++--- manuals/ACS/Options.html | 6 +++--- manuals/ACS/Pause.html | 6 +++--- manuals/ACS/Print.html | 6 +++--- manuals/ACS/Processors.html | 6 +++--- manuals/ACS/Running.html | 6 +++--- manuals/ACS/Sensors.html | 6 +++--- manuals/ACS/Setting_the_Properties.html | 6 +++--- manuals/ACS/Status_Reporting_and_Error_Logging.html | 6 +++--- manuals/ACS/Synchronized.html | 6 +++--- manuals/ACS/The_Edit_Tab.html | 6 +++--- manuals/ACS/Tooltips.html | 6 +++--- manuals/ACS/index.html | 6 +++--- manuals/ARE/index.html | 6 +++--- manuals/WebACS/AREStatus.html | 6 +++--- manuals/WebACS/Channels.html | 6 +++--- manuals/WebACS/Control_the_ARE.html | 6 +++--- manuals/WebACS/Create_and_Edit_a_Model.html | 6 +++--- manuals/WebACS/Events.html | 6 +++--- manuals/WebACS/GUI_Designer.html | 6 +++--- manuals/WebACS/Keyboard_control.html | 6 +++--- manuals/WebACS/List_View.html | 6 +++--- manuals/WebACS/Miscellaneous.html | 6 +++--- manuals/WebACS/Open_and_Save_Models.html | 6 +++--- manuals/WebACS/Setting_the_Properties.html | 6 +++--- manuals/WebACS/The_Edit_Tab.html | 6 +++--- manuals/WebACS/index.html | 6 +++--- manuals/asterics-grid/010_settings.html | 6 +++--- manuals/asterics-grid/01_terms.html | 6 +++--- manuals/asterics-grid/02_navigation.html | 6 +++--- manuals/asterics-grid/03_appearance_layout.html | 6 +++--- manuals/asterics-grid/04_input_options.html | 6 +++--- manuals/asterics-grid/05_actions.html | 6 +++--- manuals/asterics-grid/06_users.html | 6 +++--- manuals/asterics-grid/07_dictionaries.html | 6 +++--- manuals/asterics-grid/08_keyboard_shortcuts.html | 6 +++--- manuals/asterics-grid/09_translation.html | 6 +++--- manuals/asterics-grid/10_faq.html | 6 +++--- manuals/asterics-grid/10_word_forms.html | 6 +++--- manuals/asterics-grid/513_http-action-tutorials.html | 6 +++--- manuals/asterics-grid/514_uart-action-tutorials.html | 6 +++--- manuals/asterics-grid/index.html | 6 +++--- manuals/fabi/index.html | 6 +++--- manuals/flipmouse/index.html | 6 +++--- manuals/index.html | 6 +++--- plugins/actuators/AREWindow.html | 6 +++--- plugins/actuators/AnalogOut.html | 6 +++--- plugins/actuators/AndroidPhoneControl.html | 6 +++--- plugins/actuators/Android_connection.html | 6 +++--- plugins/actuators/AngularCursorControl.html | 6 +++--- plugins/actuators/ApplicationLauncher.html | 6 +++--- plugins/actuators/BarDisplay.html | 6 +++--- plugins/actuators/CrosshairCursorControl.html | 6 +++--- plugins/actuators/DialogBox.html | 6 +++--- plugins/actuators/DigitalOut.html | 6 +++--- plugins/actuators/DotMeter.html | 6 +++--- plugins/actuators/EasyHomeControl.html | 6 +++--- plugins/actuators/EmulateFaultyPlugin.html | 6 +++--- plugins/actuators/EnobioDisplay.html | 6 +++--- plugins/actuators/Enocean.html | 6 +++--- plugins/actuators/EventVisualizer.html | 6 +++--- plugins/actuators/FS20Sender.html | 6 +++--- plugins/actuators/FileWriter.html | 6 +++--- plugins/actuators/FlickeringLightStimulator.html | 6 +++--- plugins/actuators/GMailShortcuts.html | 6 +++--- plugins/actuators/GSMModem.html | 6 +++--- plugins/actuators/IRTrans.html | 6 +++--- plugins/actuators/ImageBox.html | 6 +++--- plugins/actuators/Keyboard.html | 6 +++--- plugins/actuators/Knx.html | 6 +++--- plugins/actuators/LegacyDigitalOut.html | 6 +++--- plugins/actuators/LineWriter.html | 6 +++--- plugins/actuators/MediaPlayer.html | 6 +++--- plugins/actuators/MidiPlayer.html | 6 +++--- plugins/actuators/ModelSwitcher.html | 6 +++--- plugins/actuators/Mouse.html | 6 +++--- plugins/actuators/MousecursorIcon.html | 6 +++--- plugins/actuators/NetConnection.html | 6 +++--- plugins/actuators/OscOutClient.html | 6 +++--- plugins/actuators/Oscilloscope.html | 6 +++--- plugins/actuators/PhilipsHue.html | 6 +++--- plugins/actuators/PhoneControl.html | 6 +++--- plugins/actuators/PicoTTS.html | 6 +++--- plugins/actuators/PlatformDigitalOut.html | 6 +++--- plugins/actuators/PlatformLCD.html | 6 +++--- plugins/actuators/PongGame.html | 6 +++--- plugins/actuators/RemoteJoystick.html | 6 +++--- plugins/actuators/RemoteKeyboard.html | 6 +++--- plugins/actuators/RemoteMouse.html | 6 +++--- plugins/actuators/RemoteTablet.html | 6 +++--- plugins/actuators/RemoteWindow.html | 6 +++--- plugins/actuators/SSVEPFileWriter.html | 6 +++--- plugins/actuators/SSVEPStimulator.html | 6 +++--- plugins/actuators/SerialSender.html | 6 +++--- plugins/actuators/SkyWatcherMount.html | 6 +++--- plugins/actuators/SyntheticVoice.html | 6 +++--- plugins/actuators/TeensyRCPrototype.html | 6 +++--- plugins/actuators/TextArea.html | 6 +++--- plugins/actuators/TextDisplay.html | 6 +++--- plugins/actuators/ToneGenerator.html | 6 +++--- plugins/actuators/Tooltip.html | 6 +++--- plugins/actuators/WavefilePlayer.html | 6 +++--- plugins/actuators/WriteCSV.html | 6 +++--- plugins/actuators/WriteEDF.html | 6 +++--- plugins/index.html | 6 +++--- plugins/processors/AcousticScanning.html | 6 +++--- plugins/processors/AdjustmentCurve.html | 6 +++--- plugins/processors/AmazonEchoControl.html | 6 +++--- plugins/processors/Amplifier.html | 6 +++--- plugins/processors/Arduino.html | 6 +++--- plugins/processors/AudioSelector.html | 6 +++--- plugins/processors/Averager.html | 6 +++--- plugins/processors/BasicTRalgorithms.html | 6 +++--- plugins/processors/Benchmark.html | 6 +++--- plugins/processors/BlinkChangeDetector.html | 6 +++--- plugins/processors/BlinkDetection.html | 6 +++--- plugins/processors/BlinkDetector.html | 6 +++--- plugins/processors/BlinkDetectorTrainer.html | 6 +++--- plugins/processors/ComPort.html | 6 +++--- plugins/processors/Comparator.html | 6 +++--- plugins/processors/ComputeBandpower.html | 6 +++--- plugins/processors/ConstantDispatcher.html | 6 +++--- plugins/processors/DataType.html | 6 +++--- plugins/processors/DateToDouble.html | 6 +++--- plugins/processors/Deadzone.html | 6 +++--- plugins/processors/Decimation.html | 6 +++--- plugins/processors/Delay.html | 6 +++--- plugins/processors/Derivative.html | 6 +++--- plugins/processors/Differentiate.html | 6 +++--- plugins/processors/Dissimilarity.html | 6 +++--- plugins/processors/DoubleToString.html | 6 +++--- plugins/processors/ECMAScriptInterpreter.html | 6 +++--- plugins/processors/EventBlock.html | 6 +++--- plugins/processors/EventCascade.html | 6 +++--- plugins/processors/EventCounter.html | 6 +++--- plugins/processors/EventDelay.html | 6 +++--- plugins/processors/EventDispatcher.html | 6 +++--- plugins/processors/EventFlipFlop.html | 6 +++--- plugins/processors/EventRouter.html | 6 +++--- plugins/processors/EventStateMachine.html | 6 +++--- plugins/processors/FABI.html | 6 +++--- plugins/processors/FS20CommandInterpreter.html | 6 +++--- plugins/processors/FabiCronusMax.html | 6 +++--- plugins/processors/Filter.html | 6 +++--- plugins/processors/HRVAnalysis.html | 6 +++--- plugins/processors/HRVRmssdFromRR.html | 6 +++--- plugins/processors/IIRFilter.html | 6 +++--- plugins/processors/IntToString.html | 6 +++--- plugins/processors/Integrate.html | 6 +++--- plugins/processors/IrMicro.html | 6 +++--- plugins/processors/JsonParser.html | 6 +++--- plugins/processors/MathEvaluator.html | 6 +++--- plugins/processors/MinMax.html | 6 +++--- plugins/processors/MotionAnalysis.html | 6 +++--- plugins/processors/MultiSource.html | 6 +++--- plugins/processors/MultiSourceString.html | 6 +++--- plugins/processors/NeuralNetworkLoader.html | 6 +++--- plugins/processors/NexusConnector.html | 6 +++--- plugins/processors/OneEventManyActions.html | 6 +++--- plugins/processors/OpenHAB.html | 6 +++--- plugins/processors/OscGestureFollower.html | 6 +++--- plugins/processors/OskaExternalScanning1D.html | 6 +++--- plugins/processors/OskaExternalScanning2D.html | 6 +++--- plugins/processors/OskaInternalScanning.html | 6 +++--- plugins/processors/PathMultiplexer.html | 6 +++--- plugins/processors/Pathselector.html | 6 +++--- plugins/processors/PeakDetector.html | 6 +++--- plugins/processors/ProtocolSSVEPTrain.html | 6 +++--- plugins/processors/Quantizer.html | 6 +++--- plugins/processors/RegularExpression.html | 6 +++--- plugins/processors/RelativeMoveSampler.html | 6 +++--- plugins/processors/SSVEPDetect.html | 6 +++--- plugins/processors/SampleAndHold.html | 6 +++--- plugins/processors/Sampler.html | 6 +++--- plugins/processors/SerialPort.html | 6 +++--- plugins/processors/SerialSender.html | 6 +++--- plugins/processors/SignalTranslation.html | 6 +++--- plugins/processors/SpeechProcessor.html | 6 +++--- plugins/processors/StringAppend.html | 6 +++--- plugins/processors/StringDelay.html | 6 +++--- plugins/processors/StringDispatcher.html | 6 +++--- plugins/processors/StringExpander.html | 6 +++--- plugins/processors/StringExtractor.html | 6 +++--- plugins/processors/StringFilter.html | 6 +++--- plugins/processors/StringFormatter.html | 6 +++--- plugins/processors/StringPathMultiplexer.html | 6 +++--- plugins/processors/StringPathSelector.html | 6 +++--- plugins/processors/StringSplitter.html | 6 +++--- plugins/processors/StringToDouble.html | 6 +++--- plugins/processors/StringToInt.html | 6 +++--- plugins/processors/TextSender.html | 6 +++--- plugins/processors/Threshold.html | 6 +++--- plugins/processors/TimestampWriter.html | 6 +++--- plugins/processors/UniversalRemoteControl.html | 6 +++--- plugins/processors/WebSocket.html | 6 +++--- plugins/processors/Yaak.html | 6 +++--- plugins/processors/eg_example.html | 6 +++--- plugins/sensors/Acceleration.html | 6 +++--- plugins/sensors/AnalogIn.html | 6 +++--- plugins/sensors/AutostartEvent.html | 6 +++--- plugins/sensors/ButtonGrid.html | 6 +++--- plugins/sensors/CellBoard.html | 6 +++--- plugins/sensors/DigitalIn.html | 6 +++--- plugins/sensors/EOG.html | 6 +++--- plugins/sensors/EShoe.html | 6 +++--- plugins/sensors/EditBox.html | 6 +++--- plugins/sensors/Enobio.html | 6 +++--- plugins/sensors/EventGenerator.html | 6 +++--- plugins/sensors/EyeTribe.html | 6 +++--- plugins/sensors/EyeX.html | 6 +++--- plugins/sensors/Eyetracker.html | 6 +++--- plugins/sensors/FS20Receiver.html | 6 +++--- plugins/sensors/FacetrackerCLM.html | 6 +++--- plugins/sensors/FacetrackerLK.html | 6 +++--- plugins/sensors/FolderBrowser.html | 6 +++--- plugins/sensors/HeadPositionHC.html | 6 +++--- plugins/sensors/HoverPanel.html | 6 +++--- plugins/sensors/IntelRealSense.html | 6 +++--- plugins/sensors/JoystickCapture.html | 6 +++--- plugins/sensors/KeyCapture.html | 6 +++--- plugins/sensors/KeyboardCapture.html | 6 +++--- plugins/sensors/Kinect.html | 6 +++--- plugins/sensors/KinectJ4K.html | 6 +++--- plugins/sensors/LegacyAnalogIn.html | 6 +++--- plugins/sensors/LegacyDigitalIn.html | 6 +++--- plugins/sensors/Lightscore.html | 6 +++--- plugins/sensors/LineReader.html | 6 +++--- plugins/sensors/Lipmouse.html | 6 +++--- plugins/sensors/LipmouseIR.html | 6 +++--- plugins/sensors/MicGPI.html | 6 +++--- plugins/sensors/MouseCapture.html | 6 +++--- plugins/sensors/OpenBCI.html | 6 +++--- plugins/sensors/OpenVibe.html | 6 +++--- plugins/sensors/OscServer.html | 6 +++--- plugins/sensors/P2_Parser.html | 6 +++--- plugins/sensors/PhilipsHueSensor.html | 6 +++--- plugins/sensors/PlatformAnalogIn.html | 6 +++--- plugins/sensors/PlatformDigitalIn.html | 6 +++--- plugins/sensors/Proximity.html | 6 +++--- plugins/sensors/RFIDReader.html | 6 +++--- plugins/sensors/RandomNumber.html | 6 +++--- plugins/sensors/RazorIMU.html | 6 +++--- plugins/sensors/ReadCSV.html | 6 +++--- plugins/sensors/ReadEDF.html | 6 +++--- plugins/sensors/Sensorboard.html | 6 +++--- plugins/sensors/SignalGenerator.html | 6 +++--- plugins/sensors/SignalShaper.html | 6 +++--- plugins/sensors/Slider.html | 6 +++--- plugins/sensors/SpaceNavigator3DMouse.html | 6 +++--- plugins/sensors/TextfieldReader.html | 6 +++--- plugins/sensors/Timer.html | 6 +++--- plugins/sensors/TobiTic.html | 6 +++--- plugins/sensors/Tobii4CHeadTracker.html | 6 +++--- plugins/sensors/TrackIR.html | 6 +++--- plugins/sensors/TuioReactivision.html | 6 +++--- plugins/sensors/WiiMote.html | 6 +++--- plugins/sensors/XFacetrackerLK.html | 6 +++--- solutions/AAC-Basic.html | 6 +++--- solutions/Camera-Mouse.html | 6 +++--- solutions/Eye-Tracking-Mouse.html | 6 +++--- solutions/Head-Sound.html | 6 +++--- solutions/Switch-Mouse.html | 6 +++--- solutions/index.html | 6 +++--- webapps/AT-solution-IDE.html | 6 +++--- webapps/Plugin-IDE.html | 6 +++--- 702 files changed, 1427 insertions(+), 1427 deletions(-) rename assets/css/{0.styles.b74cd268.css => 0.styles.cd1d0d0c.css} (99%) rename assets/js/{100.9e38f532.js => 100.0ab5f2bf.js} (88%) rename assets/js/{101.698f5272.js => 101.55bff9b1.js} (89%) rename assets/js/{102.cc9a7f84.js => 102.66546639.js} (98%) rename assets/js/{103.60605569.js => 103.a7976e54.js} (98%) rename assets/js/{104.06644d41.js => 104.c11d7b2c.js} (97%) rename assets/js/{105.8231b26f.js => 105.3f810fba.js} (96%) rename assets/js/{106.e77ed4f8.js => 106.51cde090.js} (94%) rename assets/js/{107.662e2da3.js => 107.cfe217ec.js} (97%) rename assets/js/{108.5bb7d9aa.js => 108.919fa994.js} (97%) rename assets/js/{109.38119d7c.js => 109.e98b355b.js} (96%) rename assets/js/{110.b63d17e4.js => 110.e4229db5.js} (99%) rename assets/js/{111.aa000995.js => 111.80188e5b.js} (99%) rename assets/js/{112.6cb9c5a9.js => 112.4dce625e.js} (98%) rename assets/js/{113.821c8369.js => 113.2687132e.js} (99%) rename assets/js/{114.a5910d07.js => 114.ba45231f.js} (99%) rename assets/js/{115.04cbdea2.js => 115.4ef81a79.js} (99%) rename assets/js/{116.5b94955f.js => 116.d63730ba.js} (99%) rename assets/js/{117.18a42da2.js => 117.0c5d5cd8.js} (99%) rename assets/js/{118.89d40ea6.js => 118.6fd278db.js} (93%) rename assets/js/{119.c33392fe.js => 119.34307f1b.js} (96%) rename assets/js/{12.9cf2fe85.js => 12.7015b996.js} (99%) rename assets/js/{121.408b06cb.js => 121.99b0f34f.js} (93%) rename assets/js/{122.6d31a7d1.js => 122.8665890b.js} (92%) rename assets/js/{123.3d9bc0ec.js => 123.3bae29ec.js} (83%) rename assets/js/{124.67ce29f7.js => 124.0c6b4a3a.js} (82%) rename assets/js/{125.8d4856f2.js => 125.3a160a1d.js} (91%) rename assets/js/{126.e21e1ad7.js => 126.87cb7f78.js} (98%) rename assets/js/{127.5e261f38.js => 127.1bce1fe4.js} (94%) rename assets/js/{128.e1c6745b.js => 128.85d645bf.js} (82%) rename assets/js/{129.6f3d16ce.js => 129.fdb39d91.js} (92%) rename assets/js/{13.61edaffd.js => 13.a324eca3.js} (99%) rename assets/js/{130.68300466.js => 130.de6e36f4.js} (90%) rename assets/js/{131.71d55b25.js => 131.b6d692c2.js} (92%) rename assets/js/{132.fee5c5d5.js => 132.da5d1bd5.js} (93%) rename assets/js/{133.b3ad2ffe.js => 133.0348c000.js} (82%) rename assets/js/{134.fbe4e6f5.js => 134.b8b66a89.js} (95%) rename assets/js/{135.3d2b77b3.js => 135.58e12e9b.js} (94%) rename assets/js/{136.f94ff2c2.js => 136.85cc6adb.js} (97%) rename assets/js/{137.d104f9e4.js => 137.7f77ae6c.js} (95%) rename assets/js/{138.41364369.js => 138.ec124362.js} (95%) rename assets/js/{139.4ebc29fc.js => 139.3da6703e.js} (92%) rename assets/js/{14.2c42dcb5.js => 14.d6148202.js} (87%) rename assets/js/{140.88de24a8.js => 140.705f006a.js} (97%) rename assets/js/{141.1270d493.js => 141.0cd32b21.js} (95%) rename assets/js/{142.adebdb9d.js => 142.ec23fa9a.js} (95%) rename assets/js/{143.04aeb5ee.js => 143.1abe170c.js} (91%) rename assets/js/{144.da97f755.js => 144.3e93f388.js} (97%) rename assets/js/{145.213392fc.js => 145.5c59694a.js} (93%) rename assets/js/{146.2f86ac05.js => 146.f5a30dfa.js} (99%) rename assets/js/{147.2f02e55d.js => 147.d721d9d7.js} (89%) rename assets/js/{148.70170c40.js => 148.9a6335e8.js} (95%) rename assets/js/{149.3d20ffc2.js => 149.4e9a989f.js} (94%) rename assets/js/{150.0a3594c7.js => 150.8a938188.js} (92%) rename assets/js/{151.be13a346.js => 151.f826ced2.js} (96%) rename assets/js/{152.f7690c1f.js => 152.52e9ca2d.js} (98%) rename assets/js/{153.b2a56dd3.js => 153.414a698e.js} (92%) rename assets/js/{154.5be43710.js => 154.f9548897.js} (98%) rename assets/js/{155.cf1f7c31.js => 155.bb6e1ba6.js} (97%) rename assets/js/{156.4b65b291.js => 156.82b436e4.js} (99%) rename assets/js/{157.0a2af865.js => 157.608e39b0.js} (97%) rename assets/js/{158.54077b19.js => 158.cecdc754.js} (98%) rename assets/js/{159.e6ef3b94.js => 159.7bdcbd33.js} (98%) rename assets/js/{16.df2bbddd.js => 16.13723687.js} (99%) rename assets/js/{160.fb9f1818.js => 160.c56bfeed.js} (94%) rename assets/js/{161.90f1a436.js => 161.595fa06b.js} (95%) rename assets/js/{162.5aceeeb6.js => 162.5f17702d.js} (91%) rename assets/js/{163.30322116.js => 163.b8f9482f.js} (97%) rename assets/js/{164.50f9608f.js => 164.6a0d4d64.js} (89%) rename assets/js/{165.1c1cb742.js => 165.e291f50e.js} (95%) rename assets/js/{166.f1dd8334.js => 166.7f1f68e1.js} (93%) rename assets/js/{167.d4f9cf3d.js => 167.0dc441c7.js} (96%) rename assets/js/{168.8cbdc88c.js => 168.78a97289.js} (92%) rename assets/js/{169.e1b3a564.js => 169.e852db6e.js} (95%) rename assets/js/{170.1cb36eb9.js => 170.80eb7392.js} (91%) rename assets/js/{171.e1185e60.js => 171.43893a7d.js} (94%) rename assets/js/{172.7e4325b7.js => 172.d9d792a0.js} (93%) rename assets/js/{173.ec39eaca.js => 173.d1c41401.js} (97%) rename assets/js/{174.d611b832.js => 174.754e790c.js} (92%) rename assets/js/{175.3996a703.js => 175.8d2f1b33.js} (91%) rename assets/js/{176.1d05d592.js => 176.adc830b0.js} (97%) rename assets/js/{177.908d964b.js => 177.7a5ed2e7.js} (99%) rename assets/js/{178.87887f38.js => 178.adb13763.js} (96%) rename assets/js/{179.49901c4d.js => 179.0cc0889e.js} (97%) rename assets/js/{18.dec6a7c9.js => 18.1afd62ba.js} (99%) rename assets/js/{180.7e542b45.js => 180.3b4a13f6.js} (98%) rename assets/js/{181.7ea61dc6.js => 181.52184a9b.js} (95%) rename assets/js/{182.1d59391c.js => 182.cc67506c.js} (95%) rename assets/js/{183.31d14bad.js => 183.07a712b9.js} (90%) rename assets/js/{184.fdebdc91.js => 184.927e106b.js} (95%) rename assets/js/{185.e3ca0e07.js => 185.b590396e.js} (96%) rename assets/js/{186.7bc84a7b.js => 186.52dea392.js} (98%) rename assets/js/{187.abef5dfc.js => 187.cd7fc2a9.js} (98%) rename assets/js/{188.ed107055.js => 188.be91157e.js} (97%) rename assets/js/{189.41207779.js => 189.750a8531.js} (96%) rename assets/js/{19.d900a5a7.js => 19.993ddc49.js} (99%) rename assets/js/{190.43fd2af8.js => 190.1305662c.js} (90%) rename assets/js/{191.3ee5c506.js => 191.645545b1.js} (92%) rename assets/js/{192.3ab5f6e6.js => 192.1cff1d91.js} (94%) rename assets/js/{193.5759071f.js => 193.99d4b013.js} (96%) rename assets/js/{194.0e3e6669.js => 194.e6b2db6c.js} (91%) rename assets/js/{195.ff5e6a58.js => 195.1dda4f5a.js} (87%) rename assets/js/{196.69e8f6d9.js => 196.358a3231.js} (98%) rename assets/js/{197.656f66e0.js => 197.9a6dfbc9.js} (97%) rename assets/js/{198.287970e2.js => 198.ff7e37d1.js} (97%) rename assets/js/{199.aeaefb56.js => 199.1f02fbb0.js} (98%) delete mode 100644 assets/js/20.3b70a273.js create mode 100644 assets/js/20.85754a20.js rename assets/js/{200.8d85a009.js => 200.97795e0a.js} (89%) rename assets/js/{201.02f25e09.js => 201.7c3001fd.js} (90%) rename assets/js/{202.4ab3cb1f.js => 202.fa02c017.js} (92%) rename assets/js/{203.4422e380.js => 203.6ed3ddcc.js} (98%) rename assets/js/{204.05359b66.js => 204.03ad897e.js} (98%) rename assets/js/{205.d54ea064.js => 205.7882f9cd.js} (97%) rename assets/js/{206.1d09c36d.js => 206.1b860eed.js} (95%) rename assets/js/{207.4a71e790.js => 207.31dcba08.js} (93%) rename assets/js/{208.b52ae166.js => 208.81817169.js} (94%) rename assets/js/{209.64b3a0a3.js => 209.62118cc6.js} (93%) rename assets/js/{21.c9029408.js => 21.5b240941.js} (99%) rename assets/js/{211.99a2d336.js => 211.2c4ec3ea.js} (93%) rename assets/js/{213.a02ae857.js => 213.042b5734.js} (92%) rename assets/js/{214.69ed2088.js => 214.c90e5ec0.js} (92%) rename assets/js/{215.c021b553.js => 215.5d38f82f.js} (87%) rename assets/js/{216.81eeb2ac.js => 216.168fdb29.js} (87%) rename assets/js/{217.96a966e9.js => 217.61e110e7.js} (92%) rename assets/js/{218.64d9c21d.js => 218.410d84f0.js} (97%) rename assets/js/{219.4f5fc95d.js => 219.08dc456b.js} (96%) rename assets/js/{22.6c53eda0.js => 22.9c6170dd.js} (97%) rename assets/js/{220.0fb6f473.js => 220.8907cb8f.js} (96%) rename assets/js/{221.d0835a1c.js => 221.405e50dc.js} (99%) rename assets/js/{222.e1c8e948.js => 222.8ec4a0e6.js} (97%) rename assets/js/{223.dd3744c7.js => 223.55ba3364.js} (97%) rename assets/js/{224.6e13107c.js => 224.87181fe2.js} (93%) rename assets/js/{225.8b3109c6.js => 225.efaddc56.js} (95%) rename assets/js/{226.881faffc.js => 226.0fbef67c.js} (98%) rename assets/js/{227.c18ac690.js => 227.f2f8a103.js} (96%) rename assets/js/{228.0ced96e1.js => 228.5a935437.js} (92%) rename assets/js/{229.a64faa7f.js => 229.e7926b4f.js} (95%) rename assets/js/{23.bc682a1b.js => 23.2fdaca85.js} (97%) rename assets/js/{230.c9490c1e.js => 230.e3d1e4e5.js} (92%) rename assets/js/{231.56a02a53.js => 231.7fff5a57.js} (97%) rename assets/js/{232.38813191.js => 232.7195259a.js} (90%) rename assets/js/{234.62628e62.js => 234.5fde931b.js} (92%) rename assets/js/{236.7cd1ccc9.js => 236.bdff31f2.js} (97%) rename assets/js/{237.da7a51b8.js => 237.5e3d3381.js} (94%) rename assets/js/{238.8c1e90b5.js => 238.580e0546.js} (90%) rename assets/js/{239.8d0a5254.js => 239.5fbd1ec2.js} (98%) rename assets/js/{24.cfb5a2f6.js => 24.1cfbba75.js} (99%) rename assets/js/{240.369897d5.js => 240.58bb5d95.js} (92%) rename assets/js/{241.f0bba66d.js => 241.75245bbb.js} (92%) rename assets/js/{242.d2fa9bcd.js => 242.43754f9b.js} (93%) rename assets/js/{243.2b0420d1.js => 243.111b3ae4.js} (97%) rename assets/js/{244.05ea02ae.js => 244.2a48b233.js} (97%) rename assets/js/{245.42d41f4c.js => 245.2cd92ba6.js} (91%) rename assets/js/{246.ee60da55.js => 246.dfbbed5d.js} (89%) rename assets/js/{247.0424e9d4.js => 247.c1a24c8e.js} (91%) rename assets/js/{248.aa3377dd.js => 248.6e96bd51.js} (96%) rename assets/js/{249.265f0c16.js => 249.38ead3a2.js} (96%) rename assets/js/{25.c86449f8.js => 25.952f5aa9.js} (99%) rename assets/js/{250.842cf373.js => 250.e4aca7ca.js} (91%) rename assets/js/{251.53475791.js => 251.1be574ea.js} (94%) rename assets/js/{252.6fa0c25c.js => 252.91d21ffe.js} (86%) rename assets/js/{253.4124dd14.js => 253.04620e2a.js} (98%) rename assets/js/{254.b02c8dfa.js => 254.bdef4bcc.js} (94%) rename assets/js/{255.446ce26d.js => 255.19ed73db.js} (93%) rename assets/js/{256.b0bd1795.js => 256.1715b98d.js} (98%) rename assets/js/{257.8c9ce1d0.js => 257.1ed59be9.js} (94%) rename assets/js/{258.92321666.js => 258.2d1025aa.js} (96%) rename assets/js/{259.e5dba3c5.js => 259.d92ca943.js} (98%) rename assets/js/{26.7a748c90.js => 26.63399639.js} (99%) rename assets/js/{260.85089714.js => 260.8cc984dd.js} (98%) rename assets/js/{261.3daa9f49.js => 261.de69b0f8.js} (98%) rename assets/js/{262.5d2767ec.js => 262.96562ab5.js} (95%) rename assets/js/{263.7bf898d1.js => 263.c8dd13d1.js} (97%) rename assets/js/{264.49cfa089.js => 264.20773c9f.js} (95%) rename assets/js/{265.4b157215.js => 265.62cad889.js} (93%) rename assets/js/{266.234b9c2e.js => 266.afe8cf81.js} (97%) rename assets/js/{267.64a8ede7.js => 267.a74c44ed.js} (97%) rename assets/js/{268.dc466a9c.js => 268.3e340c0d.js} (97%) rename assets/js/{269.e42dda26.js => 269.7a100324.js} (97%) rename assets/js/{27.f2c190b1.js => 27.730f0b1c.js} (90%) rename assets/js/{270.8d270c18.js => 270.82525729.js} (92%) rename assets/js/{271.da400853.js => 271.d0c6e513.js} (97%) rename assets/js/{272.024b082b.js => 272.59279dbe.js} (94%) rename assets/js/{273.1f543121.js => 273.6891dd84.js} (93%) rename assets/js/{274.2270b991.js => 274.f6c7c4e9.js} (97%) rename assets/js/{275.71353893.js => 275.ce2fe009.js} (91%) rename assets/js/{276.8c380b15.js => 276.2f59e433.js} (92%) rename assets/js/{277.7bd0b69e.js => 277.ba1f5b1a.js} (94%) rename assets/js/{278.770a4467.js => 278.5d09ebce.js} (94%) rename assets/js/{279.cabaa4bf.js => 279.3d06e9ea.js} (96%) rename assets/js/{28.a5924173.js => 28.fb4e1471.js} (99%) rename assets/js/{280.37cc5fde.js => 280.e71f8812.js} (96%) rename assets/js/{281.e2235cc3.js => 281.0bf1e306.js} (99%) rename assets/js/{282.0b267136.js => 282.ee7aef78.js} (93%) rename assets/js/{283.a3c9b40d.js => 283.3fb8cd32.js} (89%) rename assets/js/{290.05de3171.js => 290.c2d65d31.js} (96%) rename assets/js/{291.f164a1e0.js => 291.95b4e438.js} (90%) rename assets/js/{292.cd0f9fd5.js => 292.ff6d5030.js} (99%) rename assets/js/{295.a2466f46.js => 295.769ec7d8.js} (97%) rename assets/js/{296.e15007b1.js => 296.f0aee286.js} (99%) rename assets/js/{297.28666c1a.js => 297.14d845d3.js} (96%) rename assets/js/{30.c184393c.js => 30.182d9f74.js} (96%) rename assets/js/{300.ce2f0795.js => 300.cfd04eb4.js} (91%) rename assets/js/{301.467c731a.js => 301.37ff11e2.js} (92%) rename assets/js/{302.764dd69c.js => 302.84284d9c.js} (85%) rename assets/js/{303.a1b0be60.js => 303.b5a5a0ee.js} (85%) rename assets/js/{305.ac58fd5f.js => 305.d4c73fcc.js} (92%) rename assets/js/{306.1b1eaee1.js => 306.f5de698c.js} (90%) rename assets/js/{307.1bec56a1.js => 307.8370f9c2.js} (91%) rename assets/js/{308.b1a53b12.js => 308.73da3210.js} (91%) rename assets/js/{309.4a0d4d1d.js => 309.a41e3133.js} (97%) rename assets/js/{31.4b6a9279.js => 31.82877776.js} (96%) rename assets/js/{310.78421141.js => 310.40a47636.js} (97%) rename assets/js/{311.4e9336ae.js => 311.2c94ed87.js} (85%) rename assets/js/{312.3f9ae104.js => 312.c17ebc44.js} (91%) rename assets/js/{313.2c8882a9.js => 313.1ba60539.js} (99%) rename assets/js/{314.89b09ecf.js => 314.51b100bf.js} (97%) rename assets/js/{315.9be4dac4.js => 315.2f5dd7bf.js} (98%) rename assets/js/{316.c191dd3d.js => 316.f6d92900.js} (99%) rename assets/js/{317.7103d31f.js => 317.9b024e31.js} (99%) rename assets/js/{319.b25611ce.js => 319.992ae26b.js} (99%) rename assets/js/{320.c0917668.js => 320.e92ad8e6.js} (97%) rename assets/js/{321.5b7fe6bb.js => 321.9bade160.js} (99%) rename assets/js/{322.cbbb8ac3.js => 322.c10ad4c9.js} (99%) rename assets/js/{323.b0865784.js => 323.0ffde70f.js} (99%) rename assets/js/{324.675c5d48.js => 324.a8eae962.js} (99%) rename assets/js/{325.5a20ee36.js => 325.df6b0a9b.js} (99%) rename assets/js/{326.d7776080.js => 326.f69db026.js} (99%) rename assets/js/{328.ded2ecc7.js => 328.aecfb245.js} (83%) rename assets/js/{329.2722b573.js => 329.51225426.js} (93%) delete mode 100644 assets/js/331.2da221cb.js create mode 100644 assets/js/331.fc158b14.js rename assets/js/{332.6b518c11.js => 332.c67dcfae.js} (95%) rename assets/js/{333.aa4b646c.js => 333.aa4c3ef3.js} (98%) rename assets/js/{334.d6ae34cc.js => 334.099e5326.js} (90%) rename assets/js/{335.fd12f257.js => 335.ba94e8fe.js} (99%) rename assets/js/{336.7899adb1.js => 336.3384f283.js} (98%) rename assets/js/{338.963c706c.js => 338.59b19c36.js} (98%) rename assets/js/{339.1dae1b25.js => 339.ced18b02.js} (98%) rename assets/js/{34.7452418f.js => 34.2bb4ec07.js} (88%) rename assets/js/{340.e9933f79.js => 340.96781440.js} (77%) rename assets/js/{341.49ebeebb.js => 341.6aad8d53.js} (95%) rename assets/js/{342.1b2d53dd.js => 342.4cc73c89.js} (96%) rename assets/js/{343.f081837b.js => 343.d5841410.js} (99%) create mode 100644 assets/js/344.1c3a19ac.js delete mode 100644 assets/js/344.e85675b3.js rename assets/js/{347.65063b21.js => 347.27af6308.js} (91%) rename assets/js/{348.ae495803.js => 348.b527edc6.js} (91%) rename assets/js/{349.698cea75.js => 349.c7030437.js} (93%) rename assets/js/{35.b8dbb531.js => 35.fffcd70b.js} (85%) rename assets/js/{350.d6a4b97c.js => 350.ae70ab89.js} (90%) rename assets/js/{351.d0200ef6.js => 351.5e83a23c.js} (88%) rename assets/js/{352.40f4c641.js => 352.fce7d0a3.js} (89%) rename assets/js/{353.426fdb50.js => 353.63cc9723.js} (91%) rename assets/js/{354.a1638431.js => 354.c7b1ddba.js} (92%) rename assets/js/{356.b1a64248.js => 356.30b87552.js} (96%) rename assets/js/{358.7051e1a7.js => 358.fb5e5c7c.js} (87%) rename assets/js/{359.24cae214.js => 359.785309a7.js} (96%) rename assets/js/{36.f3e922f5.js => 36.77352b16.js} (95%) rename assets/js/{360.d3a47740.js => 360.669aed2f.js} (96%) rename assets/js/{362.ab711c2e.js => 362.d59285e3.js} (98%) rename assets/js/{363.e53ff1c7.js => 363.d17bda57.js} (94%) rename assets/js/{364.fad30d1a.js => 364.b32856ab.js} (99%) rename assets/js/{365.715286b4.js => 365.43b3e039.js} (99%) rename assets/js/{366.cefef854.js => 366.cd02a06f.js} (98%) rename assets/js/{367.6af66db5.js => 367.00bcfb52.js} (99%) rename assets/js/{368.d962d388.js => 368.3461f99c.js} (97%) rename assets/js/{37.88604a47.js => 37.4219d3d3.js} (91%) rename assets/js/{370.2962bf81.js => 370.89f3274c.js} (97%) rename assets/js/{372.e4c9ad69.js => 372.a902e350.js} (99%) rename assets/js/{375.ce6a6815.js => 375.26d8d23c.js} (98%) rename assets/js/{376.b33d6a34.js => 376.4abdb2a5.js} (99%) rename assets/js/{377.eb276427.js => 377.5eceb79d.js} (98%) rename assets/js/{378.5884cbf0.js => 378.4b649713.js} (98%) rename assets/js/{38.25f82ecc.js => 38.b72746da.js} (91%) rename assets/js/{380.6dce0ec3.js => 380.51a4b984.js} (98%) rename assets/js/{381.9096190c.js => 381.8b1d41d9.js} (96%) rename assets/js/{382.e5bc4924.js => 382.7442fbc2.js} (96%) rename assets/js/{384.d06bc123.js => 384.7d8104bb.js} (98%) rename assets/js/{386.c481ebf1.js => 386.fef3cdb0.js} (98%) rename assets/js/{387.5540fe39.js => 387.d88e7da7.js} (91%) rename assets/js/{39.87fc4957.js => 39.095ade4b.js} (98%) rename assets/js/{4.a5e9913a.js => 4.e07ca2c9.js} (94%) rename assets/js/{40.e4a566f4.js => 40.cd6cd316.js} (98%) rename assets/js/{41.67442f26.js => 41.ecb78c49.js} (93%) rename assets/js/{42.55ad14cd.js => 42.fe7bb89d.js} (98%) rename assets/js/{43.318192a2.js => 43.5092921a.js} (98%) rename assets/js/{44.225eb7c8.js => 44.8df58e2c.js} (93%) rename assets/js/{45.0ea6ff23.js => 45.c06050ea.js} (88%) rename assets/js/{46.1c3e3142.js => 46.6cc9027d.js} (87%) rename assets/js/{47.9e28ab05.js => 47.38e88c29.js} (97%) rename assets/js/{5.43c8b579.js => 5.f4048ccf.js} (99%) rename assets/js/{55.5d5deff3.js => 55.8fe374c1.js} (65%) rename assets/js/{56.f868852a.js => 56.2dcee92a.js} (65%) rename assets/js/{57.cf13c630.js => 57.21aa791f.js} (88%) rename assets/js/{58.b589cf37.js => 58.b787c6c0.js} (93%) rename assets/js/{59.d4f4d8d3.js => 59.84fbde40.js} (96%) rename assets/js/{6.3e7ebab7.js => 6.f215dd70.js} (99%) rename assets/js/{60.dcaad5fc.js => 60.04dda403.js} (87%) rename assets/js/{61.90bce2cb.js => 61.2d7b29c4.js} (98%) rename assets/js/{62.18df649d.js => 62.f687d51b.js} (99%) rename assets/js/{63.a8a24c1e.js => 63.536f9ede.js} (99%) rename assets/js/{64.9d737588.js => 64.4a61fc21.js} (99%) rename assets/js/{65.2dc40b00.js => 65.121ec1dc.js} (96%) rename assets/js/{66.0f82d189.js => 66.a1a00220.js} (97%) rename assets/js/{67.54c08f24.js => 67.71673926.js} (93%) rename assets/js/{68.c70eeb8b.js => 68.ab5fed4c.js} (94%) rename assets/js/{69.3fbb7cfb.js => 69.9ffd1025.js} (98%) rename assets/js/{70.3b8aac09.js => 70.81b8029d.js} (98%) rename assets/js/{71.7a4cf88d.js => 71.abb671ee.js} (98%) rename assets/js/{72.a88af099.js => 72.3aaaddbe.js} (97%) rename assets/js/{73.335eeef4.js => 73.f6b86a63.js} (95%) rename assets/js/{74.bd00a339.js => 74.e4091831.js} (98%) rename assets/js/{75.0424e5c9.js => 75.f54e234c.js} (97%) rename assets/js/{76.b158aecf.js => 76.05493fb2.js} (97%) rename assets/js/{77.f55be022.js => 77.05db69f7.js} (98%) rename assets/js/{78.8bdc5bd4.js => 78.49e38071.js} (97%) rename assets/js/{79.0df67efb.js => 79.94214922.js} (94%) rename assets/js/{81.08669fa6.js => 81.3c93324e.js} (98%) rename assets/js/{82.66e8761c.js => 82.b60309ac.js} (91%) rename assets/js/{83.afbcd7f1.js => 83.70899422.js} (94%) rename assets/js/{84.ccc4cef1.js => 84.b32bb5dd.js} (99%) rename assets/js/{85.6d2e2f3f.js => 85.31659d53.js} (89%) rename assets/js/{86.b7cb09ed.js => 86.f1d21c2e.js} (93%) rename assets/js/{87.19b35635.js => 87.b961e89c.js} (97%) rename assets/js/{88.3dee584e.js => 88.aaa508da.js} (97%) rename assets/js/{89.b8755cfd.js => 89.f43efbae.js} (97%) rename assets/js/{90.cf914999.js => 90.e3799b9d.js} (95%) rename assets/js/{91.eb24f1fe.js => 91.dc771483.js} (98%) rename assets/js/{92.5e6c4717.js => 92.26df8168.js} (92%) rename assets/js/{93.b66561e9.js => 93.2b428727.js} (90%) rename assets/js/{94.85bd2eb8.js => 94.2bd4c8cf.js} (90%) rename assets/js/{95.4775b468.js => 95.fdb756c0.js} (90%) rename assets/js/{96.67962702.js => 96.ba1d6b87.js} (96%) rename assets/js/{97.6882e675.js => 97.cf6781be.js} (91%) rename assets/js/{98.cca344b5.js => 98.3b44205a.js} (93%) rename assets/js/{99.8b15cfc7.js => 99.915948b5.js} (92%) rename assets/js/{app.81c8018a.js => app.af0f0355.js} (87%) diff --git a/404.html b/404.html index 8f1ee4a61e..2f733ed833 100644 --- a/404.html +++ b/404.html @@ -17,13 +17,13 @@ - - + + -

404

That's a Four-Oh-Four.
+ - + diff --git a/assets/css/0.styles.b74cd268.css b/assets/css/0.styles.cd1d0d0c.css similarity index 99% rename from assets/css/0.styles.b74cd268.css rename to assets/css/0.styles.cd1d0d0c.css index d958749fe3..fe9db7e113 100644 --- a/assets/css/0.styles.b74cd268.css +++ b/assets/css/0.styles.cd1d0d0c.css @@ -6,4 +6,4 @@ * Copyright 2023 Fonticons, Inc. */.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:Font Awesome\ 6 Free}.fa-brands,.fab{font-family:Font Awesome\ 6 Brands}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;font-display:block;src:url(/assets/fonts/fa-brands-400.8b0ddedb.woff2) format("woff2"),url(/assets/fonts/fa-brands-400.0ab3921d.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:400;font-display:block;src:url(/assets/fonts/fa-regular-400.61f30b79.woff2) format("woff2"),url(/assets/fonts/fa-regular-400.20206738.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:900;font-display:block;src:url(/assets/fonts/fa-solid-900.c6427838.woff2) format("woff2"),url(/assets/fonts/fa-solid-900.e2ceb839.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:Font Awesome\ 5 Brands;font-display:block;font-weight:400;src:url(/assets/fonts/fa-brands-400.8b0ddedb.woff2) format("woff2"),url(/assets/fonts/fa-brands-400.0ab3921d.ttf) format("truetype")}@font-face{font-family:Font Awesome\ 5 Free;font-display:block;font-weight:900;src:url(/assets/fonts/fa-solid-900.c6427838.woff2) format("woff2"),url(/assets/fonts/fa-solid-900.e2ceb839.ttf) format("truetype")}@font-face{font-family:Font Awesome\ 5 Free;font-display:block;font-weight:400;src:url(/assets/fonts/fa-regular-400.61f30b79.woff2) format("woff2"),url(/assets/fonts/fa-regular-400.20206738.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/assets/fonts/fa-solid-900.c6427838.woff2) format("woff2"),url(/assets/fonts/fa-solid-900.e2ceb839.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/assets/fonts/fa-brands-400.8b0ddedb.woff2) format("woff2"),url(/assets/fonts/fa-brands-400.0ab3921d.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/assets/fonts/fa-regular-400.61f30b79.woff2) format("woff2"),url(/assets/fonts/fa-regular-400.20206738.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:FontAwesome;font-display:block;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/fonts/fa-v4compatibility.d20cedd7.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}@font-face{font-family:swiper-icons;src:url("data:application/font-woff;charset=utf-8;base64, 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") format("woff");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/44*27);height:var(--swiper-navigation-size);margin-top:calc(var(--swiper-navigation-size)*-1/2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:normal;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:"prev"}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:"next"}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#fff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:opacity .3s;transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:transform .2s,top .2s}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,left .2s}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,right .2s}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#fff}.swiper-pagination-black{--swiper-pagination-color:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s linear infinite;box-sizing:border-box;border-radius:50%;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-top:4px solid transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{to{transform:rotate(1turn)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}#toolbar-close-icon[data-v-4140cd12]{cursor:pointer}.settings-page{z-index:19;height:100%;display:flex;flex-flow:column nowrap;background-color:#eef0f2}.dark-mode .settings-page{background-color:#121212}.settings-page>.toolbar,.settings-page>:not(.toolbar)>div:not(.ps__thumb-x):not(.ps__thumb-y){padding:1rem 2rem;border-bottom:1px solid #cfd4db;height:unset}.settings-page .toolbar{max-height:2rem}.settings-page input{white-space:nowrap;color:#404040;display:inline-block;border:1px solid #cfd4db;border-radius:1rem;width:100%;font-size:.9rem;line-height:2rem;outline:none;transition:all .2s ease}.settings-page>div.toolbar{border-top:1px solid #667386;display:flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;flex:1 1 100%;font-size:1.4rem;font-weight:500;color:#000}.dark-mode .settings-page>div.toolbar{color:#5a7b86}.settings-page>div:not(.toolbar){font-size:1.2rem}@media (max-width:456px){.settings-page>.toolbar,.settings-page>:not(.toolbar)>div{padding:1rem .75rem}.settings-page>div:not(.toolbar){font-size:1rem}.settings-page>div:not(.toolbar) div.title{margin-left:.25rem}}#dark-mode-buttons[data-v-000b9ec2]{margin-top:1rem;display:flex;flex-flow:row nowrap;justify-content:space-evenly}#dark-mode-buttons button[data-v-000b9ec2]{cursor:pointer;background-color:#7f8b9d;color:#fff;border:none;border-radius:2px;padding:16px;font-size:1.4rem;margin-right:1rem;width:100%}#dark-mode-buttons button[data-v-000b9ec2]:last-child{margin-right:0}#dark-mode-buttons button[data-v-000b9ec2]:hover{background-color:#0b81a8;background-color:#525c6b}#dark-mode-buttons button[disabled=disabled][data-v-000b9ec2]{cursor:default;background-color:#0ea1d2}.title[data-v-3fbaee58]{margin-bottom:.5rem}form[data-v-3fbaee58]{display:flex;flex-flow:row nowrap}form input[data-v-3fbaee58]{padding-left:.6rem}form .controls[data-v-3fbaee58]{display:flex;flex-flow:row nowrap;align-items:center;position:absolute;opacity:0;transition:opacity 2s ease-in!important;transition:padding 1s ease-in!important}form .controls svg[data-v-3fbaee58]{cursor:pointer;padding:.5rem .7rem;width:1rem}form:focus-within input[data-v-3fbaee58],form:hover input[data-v-3fbaee58]{padding-left:2.2rem}form:focus-within .controls[data-v-3fbaee58],form:hover .controls[data-v-3fbaee58]{opacity:1}.settings-view{position:absolute;top:3.6rem;height:calc(100% - 3.6rem);width:100%;background-color:#eef0f2}.dark-mode .settings-view{background-color:#121212}.toast[data-v-004f2b8f]{background-color:#edeff1;border:1px solid #c2c8d0;box-shadow:1px 1px 3px 1px #717f93;border-radius:.25rem;margin:1rem auto;width:305px;font-size:.8rem;opacity:.6}.toast[data-v-004f2b8f]:first-child{margin-top:0}.toast[data-v-004f2b8f]:last-child{margin-bottom:0}.toast[data-v-004f2b8f]:hover{opacity:1}.toast .toast-header[data-v-004f2b8f]{font-weight:500;display:flex;flex-flow:row nowrap;justify-content:space-between;border-bottom:1px solid #c2c8d0}.toast .toast-content[data-v-004f2b8f],.toast .toast-header[data-v-004f2b8f]{padding:.5rem 1rem}@media (max-width:999px){.toast[data-v-004f2b8f]{opacity:1}}ul[data-v-613826d5]{list-style:initial}ol[data-v-f7aa2bf6]{padding-top:.25rem;padding-left:1.5rem}#toaster[data-v-40409937]{pointer-events:all;list-style-type:none;flex-flow:column nowrap;padding:0;margin:0}.ps[data-v-40409937]{height:100%}.list-item[data-v-40409937]{transition:all .5s}.list-enter[data-v-40409937],.list-leave-to[data-v-40409937]{opacity:0;transform:translateY(30px)}.list-leave-active[data-v-40409937]{position:absolute}#toasts-view[data-v-93e8c1e2]{z-index:15;position:fixed;height:calc(100% - 3.6rem);top:3.6rem;right:0;margin:15px 15px 15px 0;width:350px;pointer-events:none}@media (max-width:456px){#toasts-view[data-v-93e8c1e2]{width:100%;margin-left:auto;margin-right:auto}}.go-to-top[data-v-02efbe36]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#0ea1d2;z-index:1}.go-to-top[data-v-02efbe36]:hover{color:#43c7f2}@media (max-width:959px){.go-to-top[data-v-02efbe36]{display:none}}.fade-enter-active[data-v-02efbe36],.fade-leave-active[data-v-02efbe36]{transition:opacity .3s}.fade-enter[data-v-02efbe36],.fade-leave-to[data-v-02efbe36]{opacity:0}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#333;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#0ea1d2}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#000}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#000}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:1234px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:456px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#000}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#0ea1d2}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;-webkit-user-select:none;user-select:none;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:1000px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:1234px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:999px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:456px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.nav-addon{padding-left:4rem;display:block}@media (max-width:1234px){.nav-item{margin-left:1rem!important}.sidebar .nav-item,.sidebar:first-child{margin-left:0!important}.nav-addon{padding-left:1rem}}@media (max-width:999px){.nav-addon{padding-left:0;padding-top:1rem;border-top:1px solid #eaecef}}html.dark-mode{background-color:#121212!important}html.dark-mode .nav-dropdown,html.dark-mode .navbar,html.dark-mode .search-box input,html.dark-mode .sidebar,html.dark-mode .theme-default-content:not(.custom) h1,html.dark-mode .theme-default-content:not(.custom) h2,html.dark-mode .theme-default-content:not(.custom) h3,html.dark-mode .theme-default-content:not(.custom) h4,html.dark-mode .theme-default-content:not(.custom) h5,html.dark-mode .theme-default-content:not(.custom) h6{border-color:#5a7b86}html.dark-mode .dropdown-title,html.dark-mode .links,html.dark-mode .nav-dropdown,html.dark-mode .nav-item>.nav-link,html.dark-mode .navbar,html.dark-mode .search-box,html.dark-mode .sidebar,html.dark-mode .sidebar-heading,html.dark-mode .sidebar-link,html.dark-mode .site-name,html.dark-mode body,html.dark-mode html,html.dark-mode input{background-color:#121212!important;color:#5a7b86!important}html.dark-mode .custom-block{background-color:#1e1e1e!important}html.dark-mode .custom-block.danger p{color:#8d0000}html.dark-mode code{color:#707070}.swiper{box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .swiper{box-shadow:1px 1px 3px 1px #48636c}.swiper-button-next,.swiper-button-prev{color:#0ea1d2;top:511.25px}.swiper-button-prev{left:20px}.swiper-button-next{right:20px}.swiper-pagination{transform:scale(2)!important;width:160px!important;margin-left:-80px;bottom:20px!important}.dark-mode .swiper-pagination .swiper-pagination-bullet{background-color:#5a7b86}.swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{background-color:#0ea1d2}.slide{display:flex;flex-flow:column wrap}.slide .media{height:416.25px}.slide .media .media-default{background-color:#0ea1d2;width:100%;height:100%}.slide .content,.slide .controls{min-height:150px;margin:0 70px 40px;width:-moz-fit-content;width:fit-content}.slide .controls{margin:0 auto 40px}.slide .badge{font-size:.9rem;font-weight:500;display:flex;flex-flow:row nowrap;padding:4px;margin:.5rem 4px 2px 2px;background-color:#0ea1d2;color:#fff;border-radius:.25rem;box-shadow:1px 1px 3px 1px #03202a}@media (max-width:999px){.slide .content{margin:40px 30px}}@media (max-width:456px){.swiper-pagination{width:100px!important;margin-left:-50px}}:focus,a:focus{outline:3px solid #0ea1d2!important;outline-offset:.1rem!important}img.emoji{height:1.2rem;margin:0 .05em 0 .1em;vertical-align:-.1em}.sw-update-popup{border:2px solid #0ea1d2!important}.sw-update-popup>button{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif!important;-webkit-font-smoothing:antialiased!important;text-align:center!important;line-height:1.2!important;font-weight:500!important;text-decoration:none!important;display:inline-block!important;font-size:1.1rem!important;color:#fff!important;background-color:#0ea1d2!important;padding:.8rem 1.6rem!important;border-radius:4px!important;transition:background-color .1s ease!important;box-sizing:border-box!important;border:none!important;border-bottom:1px solid #0f303e!important}.dropdown-wrapper .dropdown-title{pointer-events:auto!important}#nprogress{pointer-events:none}#nprogress .bar{background:#0ea1d2;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #0ea1d2,0 0 5px #0ea1d2;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#0ea1d2 transparent transparent #0ea1d2;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html{scroll-behavior:smooth}.sw-update-popup[data-v-ecc056f6]{position:fixed;right:1em;bottom:1em;padding:1em;border:1px solid #3eaf7c;border-radius:3px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.5);text-align:center;z-index:3}.sw-update-popup>button[data-v-ecc056f6]{margin-top:.5em;padding:.25em 2em}.sw-update-popup-enter-active[data-v-ecc056f6],.sw-update-popup-leave-active[data-v-ecc056f6]{transition:opacity .3s,transform .3s}.sw-update-popup-enter[data-v-ecc056f6],.sw-update-popup-leave-to[data-v-ecc056f6]{opacity:0;transform:translateY(50%) scale(.5)}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#666}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#0ea1d2;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0d91bd}.home .hero .action-button:hover{background-color:#10b6ed}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#1a1a1a}.home .feature p{color:#404040}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#404040}@media (max-width:999px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:456px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}} -/*! @docsearch/css 3.3.3 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,0.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,0.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,0.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,0.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,0.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,0.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,0.5),0 -4px 8px 0 rgba(0,0,0,0.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}#search-form{margin-right:1rem}.DocSearch-Button-Container,.DocSearch-Button-Keys{display:flex!important}.DocSearch-Button-Placeholder{height:.9rem}.DocSearch-Input:focus{outline:unset!important}.DocSearch-Logo svg .cls-1,.DocSearch-Logo svg .cls-2{fill:var(--docsearch-logo-color)}@media (max-width:999px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none!important}}:root{--docsearch-logo-color:#0ea1d2;--docsearch-primary-color:#0ea1d2;--docsearch-highlight-color:#0ea1d2}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:999px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#000;pointer-events:none}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#0ea1d2}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #0ea1d2;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:999px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#0ea1d2}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:999px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.settings-button[data-v-ef43f700]{cursor:pointer}#settings-label[data-v-ef43f700]{display:none;font-weight:700}#settings-icon[data-v-ef43f700]{display:block}@media (max-width:999px){#settings-label[data-v-ef43f700]{display:block}#settings-icon[data-v-ef43f700]{display:none}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#0ea1d2}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:999px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:999px){.nav-links a.router-link-active,.nav-links a:hover{color:#000}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #0fb1e7}}svg#asterics-logo path#back[data-v-55a54dcc]{fill:#000}svg#asterics-logo path#front[data-v-55a54dcc]{fill:#0ea1d2}.dark-mode svg#asterics-logo path#back[data-v-55a54dcc]{fill:#eaecef}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#000;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:999px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.asterics-sw-update-popup{position:fixed;right:1em;bottom:1em;padding:1em;border:2px solid #0ea1d2;border-radius:4px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.5);text-align:center}.asterics-sw-update-popup button{display:inline-block;background-color:#0ea1d2;color:#fff;border:none;border-bottom:1px solid #0d91bd;border-radius:4px;padding:.8rem 1.6rem;font-size:1rem;font-weight:500;transition:background-color .1s ease;margin-top:1rem}.asterics-sw-update-popup-enter-active,.asterics-sw-update-popup-leave-active{transition:opacity .3s,transform .3s}.asterics-sw-update-popup-enter,.asterics-sw-update-popup-leave-to{opacity:0;transform:translateY(50%) scale(.5)}.action[data-v-66fb803e]{display:inline-block;color:#fff;background-color:#0ea1d2;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0d91bd}.dark-mode .action[data-v-66fb803e]{background-color:#0a799d}.action.dark[data-v-66fb803e]{background-color:#064054}.dark-mode .action[data-v-66fb803e]{border-bottom:1px solid #096989}.action.dark[data-v-66fb803e]{border-bottom:1px solid #04303f}.action[data-v-66fb803e]:hover{background-color:#10b6ed}.dark-mode .action[data-v-66fb803e]:hover{background-color:#0c89b3}.action:hover.dark[data-v-66fb803e]:hover{background-color:#075169}#action-group[data-v-9c64e234]{font-size:1.4rem}#action-group>div[data-v-9c64e234]{padding:4px 0}@media (max-width:999px){#action-group[data-v-9c64e234]{font-size:1.3rem}}@media (max-width:456px){#action-group[data-v-9c64e234]{font-size:1rem}}#actions[data-v-0c986244]{display:flex;flex-flow:row nowrap;margin-top:4px}#actions>a[data-v-0c986244]{margin-right:1rem}#actions>a[data-v-0c986244]:last-child{margin-right:0}@media (max-width:456px){#actions[data-v-0c986244]{flex-flow:column nowrap}#actions>a[data-v-0c986244]{margin:.25em 0;width:100%;font-size:1.2rem;padding:.8rem}}#funding[data-v-797f4a9c]{display:flex;flex-flow:row nowrap;align-items:center;padding-left:0;list-style-type:none}#funding>li[data-v-797f4a9c]{justify-content:center;flex-basis:0;flex-grow:1}@media (max-width:456px){#funding[data-v-797f4a9c]{flex-flow:row wrap;justify-content:center}#funding li[data-v-797f4a9c]{flex:1 1 40%;max-width:40%}#funding li[data-v-797f4a9c]:nth-child(2n-1){margin-right:3rem}}#header[data-v-328d38ff]{font-size:6rem;font-weight:500}@media (max-width:999px){#header[data-v-328d38ff]{font-size:5rem}}@media (max-width:456px){#header[data-v-328d38ff]{font-size:2.5rem;padding-bottom:.5rem}}.container[data-v-986bc34a],img[data-v-986bc34a]{width:100%;height:100%;vertical-align:middle}img[data-v-986bc34a]{-o-object-fit:cover;object-fit:cover}@media (max-width:456px){.container[data-v-986bc34a],img[data-v-986bc34a]{box-shadow:unset;max-width:unset;max-height:unset}}li[data-v-08980368]{margin:auto 18px}.partner[data-v-08980368]{min-width:80px}@media (max-width:456px){.partner .container img{max-height:150px;-o-object-fit:contain;object-fit:contain}}.player[data-v-07090fc0],div[data-v-07090fc0],iframe[data-v-07090fc0]{height:100%!important;width:100%!important}.os-badge>[data-v-d24d64e2]{padding-right:4px}.os-badge .icon[data-v-d24d64e2]{width:1.2rem;color:#04303f}.badge[data-v-7ad3e67f]{background-color:#064054}.badge span[data-v-7ad3e67f]{padding:0 4px}.information[data-v-6432c13c]{display:flex;flex-flow:column nowrap;margin:1rem;min-width:30%}.information>div[data-v-6432c13c]{padding:5px 0}.information .category[data-v-6432c13c]{margin:0 0 .5rem;font-size:1.1rem;font-weight:500;color:#04303f;border-bottom:1px solid #04303f}.dark-mode .information .category[data-v-6432c13c]{color:#7e9ea9;border-bottom-color:#7e9ea9}.information .title[data-v-6432c13c]{font-size:1.4rem;font-weight:600}.information .badges[data-v-6432c13c],.information .os[data-v-6432c13c]{display:flex;flex-flow:row nowrap}.information .os[data-v-6432c13c]{flex-flow:row wrap}.information .description[data-v-6432c13c]{margin-top:1rem;line-height:1.7}.description[data-v-3df55efe]{display:flex;flex-flow:row nowrap;height:312.1875px;background:linear-gradient(#fbfbfc,transparent 60%)}.dark-mode .description[data-v-3df55efe]{background:linear-gradient(#5a7b86 -150%,transparent 60%)}.description .description-information[data-v-3df55efe],.description .description-media[data-v-3df55efe]{height:unset;transition:width 3s ease 0s}.description .description-media[data-v-3df55efe]{transition:width 2s ease 0s;width:60%}.description .description-information[data-v-3df55efe]{width:40%}.description-information[data-v-3df55efe]:hover,.description-media[data-v-3df55efe]:hover{transition:width 3s ease 1s;width:80%!important}.description-media[data-v-3df55efe]{box-shadow:3px 2px 3px 1px #667386}.dark-mode .description-media[data-v-3df55efe]{box-shadow:3px 2px 3px 1px #48636c}@media (max-width:999px){.description[data-v-3df55efe]{height:unset;flex-flow:column nowrap}.description .description-media[data-v-3df55efe]{margin:auto;width:100%!important;order:2;height:277.5px;max-height:416.25px}.description .description-information[data-v-3df55efe]{min-height:208.125px;order:1;width:-moz-fit-content;width:fit-content}}@media (max-width:456px){.description .description-media[data-v-3df55efe]{box-shadow:none}.description .description-information[data-v-3df55efe]{min-height:30vh}}.model-controls-wrapper[data-v-44501ca1]{display:flex;flex-flow:row nowrap;justify-content:center;align-items:center;margin:3em auto 0;width:-moz-fit-content;width:fit-content}.model-controls-wrapper .control[data-v-44501ca1]{margin-right:2em}.model-controls-wrapper .control[data-v-44501ca1]:last-child{margin-right:0}.model-controls-wrapper .icon-background[data-v-44501ca1]{cursor:pointer;width:70px;height:70px;border-radius:50%;background-color:#0ea1d2;box-shadow:2px 2px 3px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-44501ca1]{box-shadow:2px 2px 3px 1px #2d3e43}.model-controls-wrapper .icon-background[data-v-44501ca1]:hover{background-color:#10b6ed;box-shadow:3px 3px 4px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-44501ca1]:hover{box-shadow:3px 3px 4px 1px #3f565e}.model-controls-wrapper .icon-background.small[data-v-44501ca1]{width:50px;height:50px}.model-controls-wrapper .icon-background.small .icon[data-v-44501ca1]{width:34px;height:34px;margin:0}.model-controls-wrapper .icon-background.small .icon.small[data-v-44501ca1]{width:24px;height:24px;padding:13px}.model-controls-wrapper .icon-background.dark[data-v-44501ca1]{background-color:#04303f}.model-controls-wrapper .icon-background.dark[data-v-44501ca1]:hover{background-color:#064054}.model-controls-wrapper .icon-background.external[data-v-44501ca1]{background-color:#0a7193}.model-controls-wrapper .icon-background.external[data-v-44501ca1]:hover{background-color:#0b81a8}.model-controls-wrapper .icon-background .icon[data-v-44501ca1]{color:#fff;width:36px;height:36px;padding:17px}.model-controls-wrapper .icon-background .icon svg[data-v-44501ca1]{width:100%;height:100%}.disabled .icon-background[data-v-44501ca1]{background-color:#667386!important;cursor:auto}.disabled .icon-background[data-v-44501ca1]:hover{box-shadow:2px 2px 3px 1px #667386}.dark-mode .disabled .icon-background[data-v-44501ca1]:hover{box-shadow:2px 2px 3px 1px #2d3e43}@media (max-width:999px){.model-controls-wrapper .control[data-v-44501ca1]{margin-right:2rem}}@media (max-width:456px){.model-controls-wrapper[data-v-44501ca1]{margin:2em auto 1em}.model-controls-wrapper .control[data-v-44501ca1]{margin-right:.75rem}.model-controls-wrapper .control .icon-background[data-v-44501ca1]{width:40px;height:40px}.model-controls-wrapper .control .icon-background.small[data-v-44501ca1]{width:30px;height:30px}.model-controls-wrapper .control .icon-background .icon[data-v-44501ca1]{width:20px;height:20px;padding:10px}.model-controls-wrapper .control .icon-background .icon.small[data-v-44501ca1]{width:14px;height:14px;padding:0}.model-controls-wrapper .control .icon-background .icon.small svg[data-v-44501ca1]{width:14px;height:14px;padding:8px}svg#asterics-logo[data-v-44501ca1]{transform:scale(1.25)}}.model-controls-wrapper[data-v-98cdf960]{display:flex;flex-flow:row nowrap;justify-content:center;align-items:center;margin:3em auto 0;width:-moz-fit-content;width:fit-content}.model-controls-wrapper .control[data-v-98cdf960]{margin-right:2em}.model-controls-wrapper .control[data-v-98cdf960]:last-child{margin-right:0}.model-controls-wrapper .icon-background[data-v-98cdf960]{cursor:pointer;width:70px;height:70px;border-radius:50%;background-color:#0ea1d2;box-shadow:2px 2px 3px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-98cdf960]{box-shadow:2px 2px 3px 1px #2d3e43}.model-controls-wrapper .icon-background[data-v-98cdf960]:hover{background-color:#10b6ed;box-shadow:3px 3px 4px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-98cdf960]:hover{box-shadow:3px 3px 4px 1px #3f565e}.model-controls-wrapper .icon-background.small[data-v-98cdf960]{width:50px;height:50px}.model-controls-wrapper .icon-background.small .icon[data-v-98cdf960]{width:34px;height:34px;margin:0}.model-controls-wrapper .icon-background.small .icon.small[data-v-98cdf960]{width:24px;height:24px;padding:13px}.model-controls-wrapper .icon-background.dark[data-v-98cdf960]{background-color:#04303f}.model-controls-wrapper .icon-background.dark[data-v-98cdf960]:hover{background-color:#064054}.model-controls-wrapper .icon-background.external[data-v-98cdf960]{background-color:#0a7193}.model-controls-wrapper .icon-background.external[data-v-98cdf960]:hover{background-color:#0b81a8}.model-controls-wrapper .icon-background .icon[data-v-98cdf960]{color:#fff;width:36px;height:36px;padding:17px}.model-controls-wrapper .icon-background .icon svg[data-v-98cdf960]{width:100%;height:100%}.disabled .icon-background[data-v-98cdf960]{background-color:#667386!important;cursor:auto}.disabled .icon-background[data-v-98cdf960]:hover{box-shadow:2px 2px 3px 1px #667386}.dark-mode .disabled .icon-background[data-v-98cdf960]:hover{box-shadow:2px 2px 3px 1px #2d3e43}@media (max-width:999px){.model-controls-wrapper .control[data-v-98cdf960]{margin-right:2rem}}@media (max-width:456px){.model-controls-wrapper[data-v-98cdf960]{margin:2em auto 1em}.model-controls-wrapper .control[data-v-98cdf960]{margin-right:.75rem}.model-controls-wrapper .control .icon-background[data-v-98cdf960]{width:40px;height:40px}.model-controls-wrapper .control .icon-background.small[data-v-98cdf960]{width:30px;height:30px}.model-controls-wrapper .control .icon-background .icon[data-v-98cdf960]{width:20px;height:20px;padding:10px}.model-controls-wrapper .control .icon-background .icon.small[data-v-98cdf960]{width:14px;height:14px;padding:0}.model-controls-wrapper .control .icon-background .icon.small svg[data-v-98cdf960]{width:14px;height:14px;padding:8px}svg#asterics-logo[data-v-98cdf960]{transform:scale(1.25)}}.swiper-slide[data-v-60c80fad]{margin:1rem 0;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .swiper-slide[data-v-60c80fad]{box-shadow:1px 1px 3px 1px #48636c}.solution-media[data-v-60c80fad]{width:100%}@media (max-width:456px){.slide .controls{min-height:unset!important}}.container>div[data-v-4392e75a]{margin:20px 0}.container .title[data-v-4392e75a]{font-size:1.4rem;font-weight:600}.container .description[data-v-4392e75a]{line-height:1.7}.swiper-slide{margin:1rem 0;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .swiper-slide{box-shadow:1px 1px 3px 1px #48636c}@media (max-width:999px){.swiper-button-next,.swiper-button-prev{display:none}}.plugin-search[data-v-3357ab27]{display:flex;flex-flow:row nowrap;font-size:1.2rem}#plugin-search-icon[data-v-3357ab27]{position:absolute;padding:1rem;color:#cfd4db}.dark-mode #plugin-search-icon[data-v-3357ab27]{color:#7698a3}#plugin-search-input[data-v-3357ab27]{width:100%;padding:.8rem .8rem .8rem 3rem;border-radius:2rem;font-size:inherit;outline:none}#plugin-search-input[data-v-3357ab27]:focus{border:2px solid #0ea1d2}.dark-mode #plugin-search-input[data-v-3357ab27]{border-color:#516f79}#plugin-search-input[data-v-3357ab27]::-moz-placeholder{color:#5a7b86}#plugin-search-input[data-v-3357ab27]::placeholder{color:#5a7b86}.title[data-v-50653d92]{cursor:pointer;padding:.5rem 0;font-size:1.2rem;display:flex;flex-flow:row nowrap;justify-content:space-between;align-items:center}.title div[data-v-50653d92]{flex:2 1 46%}.title div[data-v-50653d92]:first-child{margin:1%;flex:2 1 44%}.title div:last-child label[data-v-50653d92]{cursor:auto}form[data-v-e2596472]{margin:8px 0}form fieldset[data-v-e2596472]{display:flex;flex-flow:column nowrap;border:none;background-color:#fbfbfc;box-shadow:1px 1px 3px 1px #7f8b9d}.dark-mode form fieldset[data-v-e2596472]{background-color:#1e1e1e;box-shadow:1px 1px 3px 1px #2a2a2a}.plugin-filter{display:flex;flex-flow:row wrap}.plugin-filter input[type=radio]{opacity:0;position:fixed;width:0}.plugin-filter input[type=radio]:checked+label{background-color:#0ea1d2;color:#fff}.dark-mode .plugin-filter input[type=radio]:checked+label{background-color:#0a799d}.plugin-filter input[type=radio]:checked+label:hover{font-weight:400}.plugin-filter input[type=radio]+label:hover{background-color:#29bff1;color:#fff}.dark-mode .plugin-filter input[type=radio]+label:hover{background-color:#0d99c8}.plugin-filter label{font-size:1.2rem;margin:2px;padding:9px;cursor:pointer;display:inline-block;text-align:center;flex:2 1 46%;background-color:#fff;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .plugin-filter label{background-color:#243136;box-shadow:1px 1px 3px 1px #0e0e0e;color:#999}img.default[data-v-2fc6d2a0]{width:75%!important;height:75%!important;-o-object-fit:contain!important;object-fit:contain!important}div[data-v-9d11ee74]{padding:4px 8px;font-size:1.2rem;font-weight:500;border-top:1px solid #eaecef;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.dark-mode div[data-v-9d11ee74]{border-top:1px solid #5a7b86}.search-grid-link[data-v-3bf036a2]{cursor:pointer;width:230.66666666666666px;height:230.66666666666666px;margin:8px;border:none;box-shadow:1px 1px 2px 1px #7f8b9d}.dark-mode .search-grid-link[data-v-3bf036a2]{box-shadow:1px 1px 2px 1px #717171;background-color:#1e1e1e!important}.search-grid-link a[data-v-3bf036a2]{color:#000}.dark-mode .search-grid-link a[data-v-3bf036a2]{color:#5a7b86}.search-grid-link>a[data-v-3bf036a2]:hover{text-decoration:none!important;box-shadow:1px 1px 2px 1px #0b81a8;color:#0ea1d2}.search-grid-element[data-v-3bf036a2]{display:flex;flex-flow:column nowrap;border:none;list-style-type:none;padding:0}.dark-mode .search-grid-element[data-v-3bf036a2]{box-shadow:1px 1px 2px 1px #5a7b86}.search-grid-element .search-grid-image-container[data-v-3bf036a2]{display:flex;flex-flow:row;justify-content:space-around;align-items:center;width:100%;height:190.66666666666666px;margin:auto}.search-grid-element .search-grid-image-container img[data-v-3bf036a2]{-o-object-fit:cover;object-fit:cover;-o-object-position:50% 50%;object-position:50% 50%;width:100%;height:100%}@media (max-width:1234px){.search-grid-link[data-v-3bf036a2]{width:328px;height:328px}.search-grid-link .search-grid-image-container[data-v-3bf036a2]{height:288px}}@media (max-width:999px){.search-grid-link[data-v-3bf036a2]{width:314px;height:314px}.search-grid-link .search-grid-image-container[data-v-3bf036a2]{height:274px}}@media (max-width:456px){.search-grid-link[data-v-3bf036a2]{width:100vw;max-height:40vh}.search-grid-link .search-grid-image-container[data-v-3bf036a2]{height:274px;max-height:32vh}}.plugins[data-v-068fd960]{margin:2em 0;width:100%;padding:0}.plugins ul[data-v-068fd960]{list-style-type:none;padding:0;margin:0;display:flex;flex-flow:row wrap;justify-content:flex-start}.plugins ul li[data-v-068fd960]{margin-left:0}.plugins .no-results[data-v-068fd960]{background-color:#eaecef;padding:1rem;margin:8px 0;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .plugins .no-results[data-v-068fd960]{background-color:#1e1e1e;box-shadow:1px 1px 3px 1px #2a2a2a}.swiper-button-next[data-v-5df8abdc],.swiper-button-prev[data-v-5df8abdc]{top:407.1875px}.swiper-container .swiper-slide{border:unset!important;margin:unset!important;box-shadow:unset!important}#subtitle[data-v-61570546]{font-size:1.8rem;font-weight:400;margin-bottom:2rem;border-bottom:.1rem solid #dde0e5}.dark-mode #subtitle[data-v-61570546]{border-bottom:1px solid #7f8b9d}@media (max-width:999px){#subtitle[data-v-61570546]{font-size:1.6rem}}@media (max-width:456px){#subtitle[data-v-61570546]{font-size:1.2rem;margin-bottom:.5rem}}.yt-player[data-v-055f0ec9]{width:100%}div.video-container[data-v-055f0ec9]{height:416.25px;box-shadow:1px 1px 3px 1px #7f8b9d}@media (max-width:740px){div.video-container[data-v-055f0ec9]{height:740px;width:100%;max-height:370px}}.theme-code-block[data-v-c3402832]{display:none}.theme-code-block__active[data-v-c3402832]{display:block}.theme-code-block>pre[data-v-c3402832]{background-color:orange}.theme-code-group__nav[data-v-c02030d4]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-c02030d4]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-c02030d4]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-c02030d4]{border-bottom:1px solid #42b983}.pre-blank[data-v-c02030d4]{color:#42b983}.badge[data-v-14acdff0]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-14acdff0],.badge.tip[data-v-14acdff0],.badge[data-v-14acdff0]{background-color:#42b983}.badge.error[data-v-14acdff0]{background-color:#da5961}.badge.warn[data-v-14acdff0],.badge.warning[data-v-14acdff0],.badge.yellow[data-v-14acdff0]{background-color:#e7c000}.badge+.badge[data-v-14acdff0]{margin-left:5px}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#000;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#0ea1d2;border-left-color:#0ea1d2}.sidebar-heading.clickable:hover{color:#0ea1d2}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:1234px){.page-edit{padding:2rem}}@media (max-width:456px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto;transition:color 1s ease}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#404040}.page-edit .edit-link .edit-guides a,.page-edit .edit-link svg{margin-right:.25rem}.page-edit .edit-link a>svg{margin-right:0}.page-edit .edit-link .edit-preamble,.page-edit .edit-link .edit-text{font-style:italic}.page-edit .edit-link .edit-guides a,.page-edit .edit-link .edit-preamble{color:#aaa}.page-edit:hover #editor-guide{color:#45b784}.page-edit:hover #markdown-guide{color:#0ea1d2}.page-edit:hover #developer-guide{color:#04303f}.page-edit .last-updated{float:right;text-align:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#404040}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:999px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#000;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#0ea1d2}a.sidebar-link.active{font-weight:600;color:#0ea1d2;border-left-color:#0ea1d2}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:1234px){.page-nav{padding:2rem}}@media (max-width:456px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:999px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}#home-jumbotron[data-v-3d754ff6]{background:radial-gradient(#fff 0,#dde0e5 80%);display:flex;flex-flow:column nowrap;box-shadow:1px 1px 0 2px #7f8b9d;transition:box-shadow 1.5s ease-out;border-top:1px solid #7f8b9d}.dark-mode #home-jumbotron[data-v-3d754ff6]{background:unset;background-color:#1b2528;box-shadow:1px 1px 0 2px #364a51;border-bottom:1px solid #12191b!important}.dark-mode #home-jumbotron.lock[data-v-3d754ff6]{box-shadow:1px 1px 14px 2px #364a51!important}#home-jumbotron.mounted[data-v-3d754ff6]{box-shadow:1px 1px 2rem 2px #7f8b9d;border-bottom:1px solid #b4bbc6}.dark-mode #home-jumbotron.mounted[data-v-3d754ff6]{box-shadow:1px 1px 14px 2px #364a51!important}#home-jumbotron>div[data-v-3d754ff6]{flex:1 1 100%;margin:10rem 6rem;transition:margin 1s ease-out}#home-jumbotron.lock[data-v-3d754ff6]{transition-duration:3s;box-shadow:1px 1px 4px 2px #7f8b9d}#home-jumbotron.lock>div[data-v-3d754ff6]{margin:4rem 6rem}#home-jumbotron.lock>div>div[data-v-3d754ff6]{padding:8px 0}@media (max-width:456px){#home-jumbotron>div[data-v-3d754ff6]{margin:6rem 1rem}#home-jumbotron.lock>div[data-v-3d754ff6]{margin:1rem}} \ No newline at end of file +/*! @docsearch/css 3.3.3 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,0.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,0.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,0.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,0.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,0.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,0.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,0.5),0 -4px 8px 0 rgba(0,0,0,0.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}#search-form{margin-right:1rem}.DocSearch-Button-Container,.DocSearch-Button-Keys{display:flex!important}.DocSearch-Button-Placeholder{height:.9rem}.DocSearch-Input:focus{outline:unset!important}.DocSearch-Logo svg .cls-1,.DocSearch-Logo svg .cls-2{fill:var(--docsearch-logo-color)}@media (max-width:999px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none!important}}:root{--docsearch-logo-color:#0ea1d2;--docsearch-primary-color:#0ea1d2;--docsearch-highlight-color:#0ea1d2}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:999px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#000;pointer-events:none}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#0ea1d2}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #0ea1d2;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:999px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#0ea1d2}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:999px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.settings-button[data-v-ef43f700]{cursor:pointer}#settings-label[data-v-ef43f700]{display:none;font-weight:700}#settings-icon[data-v-ef43f700]{display:block}@media (max-width:999px){#settings-label[data-v-ef43f700]{display:block}#settings-icon[data-v-ef43f700]{display:none}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#0ea1d2}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:999px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:999px){.nav-links a.router-link-active,.nav-links a:hover{color:#000}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #0fb1e7}}svg#asterics-logo path#back[data-v-55a54dcc]{fill:#000}svg#asterics-logo path#front[data-v-55a54dcc]{fill:#0ea1d2}.dark-mode svg#asterics-logo path#back[data-v-55a54dcc]{fill:#eaecef}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#000;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:999px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.asterics-sw-update-popup{position:fixed;right:1em;bottom:1em;padding:1em;border:2px solid #0ea1d2;border-radius:4px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.5);text-align:center}.asterics-sw-update-popup button{display:inline-block;background-color:#0ea1d2;color:#fff;border:none;border-bottom:1px solid #0d91bd;border-radius:4px;padding:.8rem 1.6rem;font-size:1rem;font-weight:500;transition:background-color .1s ease;margin-top:1rem}.asterics-sw-update-popup-enter-active,.asterics-sw-update-popup-leave-active{transition:opacity .3s,transform .3s}.asterics-sw-update-popup-enter,.asterics-sw-update-popup-leave-to{opacity:0;transform:translateY(50%) scale(.5)}.action[data-v-66fb803e]{display:inline-block;color:#fff;background-color:#0ea1d2;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0d91bd}.dark-mode .action[data-v-66fb803e]{background-color:#0a799d}.action.dark[data-v-66fb803e]{background-color:#064054}.dark-mode .action[data-v-66fb803e]{border-bottom:1px solid #096989}.action.dark[data-v-66fb803e]{border-bottom:1px solid #04303f}.action[data-v-66fb803e]:hover{background-color:#10b6ed}.dark-mode .action[data-v-66fb803e]:hover{background-color:#0c89b3}.action:hover.dark[data-v-66fb803e]:hover{background-color:#075169}#action-group[data-v-9c64e234]{font-size:1.4rem}#action-group>div[data-v-9c64e234]{padding:4px 0}@media (max-width:999px){#action-group[data-v-9c64e234]{font-size:1.3rem}}@media (max-width:456px){#action-group[data-v-9c64e234]{font-size:1rem}}#actions[data-v-0c986244]{display:flex;flex-flow:row nowrap;margin-top:4px}#actions>a[data-v-0c986244]{margin-right:1rem}#actions>a[data-v-0c986244]:last-child{margin-right:0}@media (max-width:456px){#actions[data-v-0c986244]{flex-flow:column nowrap}#actions>a[data-v-0c986244]{margin:.25em 0;width:100%;font-size:1.2rem;padding:.8rem}}#funding[data-v-797f4a9c]{display:flex;flex-flow:row nowrap;align-items:center;padding-left:0;list-style-type:none}#funding>li[data-v-797f4a9c]{justify-content:center;flex-basis:0;flex-grow:1}@media (max-width:456px){#funding[data-v-797f4a9c]{flex-flow:row wrap;justify-content:center}#funding li[data-v-797f4a9c]{flex:1 1 40%;max-width:40%}#funding li[data-v-797f4a9c]:nth-child(2n-1){margin-right:3rem}}#header[data-v-328d38ff]{font-size:6rem;font-weight:500}@media (max-width:999px){#header[data-v-328d38ff]{font-size:5rem}}@media (max-width:456px){#header[data-v-328d38ff]{font-size:2.5rem;padding-bottom:.5rem}}.container[data-v-986bc34a],img[data-v-986bc34a]{width:100%;height:100%;vertical-align:middle}img[data-v-986bc34a]{-o-object-fit:cover;object-fit:cover}@media (max-width:456px){.container[data-v-986bc34a],img[data-v-986bc34a]{box-shadow:unset;max-width:unset;max-height:unset}}li[data-v-08980368]{margin:auto 18px}.partner[data-v-08980368]{min-width:80px}@media (max-width:456px){.partner .container img{max-height:150px;-o-object-fit:contain;object-fit:contain}}.player[data-v-07090fc0],div[data-v-07090fc0],iframe[data-v-07090fc0]{height:100%!important;width:100%!important}.os-badge>[data-v-d24d64e2]{padding-right:4px}.os-badge .icon[data-v-d24d64e2]{width:1.2rem;color:#04303f}.badge[data-v-7ad3e67f]{background-color:#064054}.badge span[data-v-7ad3e67f]{padding:0 4px}.information[data-v-6432c13c]{display:flex;flex-flow:column nowrap;margin:1rem;min-width:30%}.information>div[data-v-6432c13c]{padding:5px 0}.information .category[data-v-6432c13c]{margin:0 0 .5rem;font-size:1.1rem;font-weight:500;color:#04303f;border-bottom:1px solid #04303f}.dark-mode .information .category[data-v-6432c13c]{color:#7e9ea9;border-bottom-color:#7e9ea9}.information .title[data-v-6432c13c]{font-size:1.4rem;font-weight:600}.information .badges[data-v-6432c13c],.information .os[data-v-6432c13c]{display:flex;flex-flow:row nowrap}.information .os[data-v-6432c13c]{flex-flow:row wrap}.information .description[data-v-6432c13c]{margin-top:1rem;line-height:1.7}.description[data-v-3df55efe]{display:flex;flex-flow:row nowrap;height:312.1875px;background:linear-gradient(#fbfbfc,transparent 60%)}.dark-mode .description[data-v-3df55efe]{background:linear-gradient(#5a7b86 -150%,transparent 60%)}.description .description-information[data-v-3df55efe],.description .description-media[data-v-3df55efe]{height:unset;transition:width 3s ease 0s}.description .description-media[data-v-3df55efe]{transition:width 2s ease 0s;width:60%}.description .description-information[data-v-3df55efe]{width:40%}.description-information[data-v-3df55efe]:hover,.description-media[data-v-3df55efe]:hover{transition:width 3s ease 1s;width:80%!important}.description-media[data-v-3df55efe]{box-shadow:3px 2px 3px 1px #667386}.dark-mode .description-media[data-v-3df55efe]{box-shadow:3px 2px 3px 1px #48636c}@media (max-width:999px){.description[data-v-3df55efe]{height:unset;flex-flow:column nowrap}.description .description-media[data-v-3df55efe]{margin:auto;width:100%!important;order:2;height:277.5px;max-height:416.25px}.description .description-information[data-v-3df55efe]{min-height:208.125px;order:1;width:-moz-fit-content;width:fit-content}}@media (max-width:456px){.description .description-media[data-v-3df55efe]{box-shadow:none}.description .description-information[data-v-3df55efe]{min-height:30vh}}.model-controls-wrapper[data-v-44501ca1]{display:flex;flex-flow:row nowrap;justify-content:center;align-items:center;margin:3em auto 0;width:-moz-fit-content;width:fit-content}.model-controls-wrapper .control[data-v-44501ca1]{margin-right:2em}.model-controls-wrapper .control[data-v-44501ca1]:last-child{margin-right:0}.model-controls-wrapper .icon-background[data-v-44501ca1]{cursor:pointer;width:70px;height:70px;border-radius:50%;background-color:#0ea1d2;box-shadow:2px 2px 3px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-44501ca1]{box-shadow:2px 2px 3px 1px #2d3e43}.model-controls-wrapper .icon-background[data-v-44501ca1]:hover{background-color:#10b6ed;box-shadow:3px 3px 4px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-44501ca1]:hover{box-shadow:3px 3px 4px 1px #3f565e}.model-controls-wrapper .icon-background.small[data-v-44501ca1]{width:50px;height:50px}.model-controls-wrapper .icon-background.small .icon[data-v-44501ca1]{width:34px;height:34px;margin:0}.model-controls-wrapper .icon-background.small .icon.small[data-v-44501ca1]{width:24px;height:24px;padding:13px}.model-controls-wrapper .icon-background.dark[data-v-44501ca1]{background-color:#04303f}.model-controls-wrapper .icon-background.dark[data-v-44501ca1]:hover{background-color:#064054}.model-controls-wrapper .icon-background.external[data-v-44501ca1]{background-color:#0a7193}.model-controls-wrapper .icon-background.external[data-v-44501ca1]:hover{background-color:#0b81a8}.model-controls-wrapper .icon-background .icon[data-v-44501ca1]{color:#fff;width:36px;height:36px;padding:17px}.model-controls-wrapper .icon-background .icon svg[data-v-44501ca1]{width:100%;height:100%}.disabled .icon-background[data-v-44501ca1]{background-color:#667386!important;cursor:auto}.disabled .icon-background[data-v-44501ca1]:hover{box-shadow:2px 2px 3px 1px #667386}.dark-mode .disabled .icon-background[data-v-44501ca1]:hover{box-shadow:2px 2px 3px 1px #2d3e43}@media (max-width:999px){.model-controls-wrapper .control[data-v-44501ca1]{margin-right:2rem}}@media (max-width:456px){.model-controls-wrapper[data-v-44501ca1]{margin:2em auto 1em}.model-controls-wrapper .control[data-v-44501ca1]{margin-right:.75rem}.model-controls-wrapper .control .icon-background[data-v-44501ca1]{width:40px;height:40px}.model-controls-wrapper .control .icon-background.small[data-v-44501ca1]{width:30px;height:30px}.model-controls-wrapper .control .icon-background .icon[data-v-44501ca1]{width:20px;height:20px;padding:10px}.model-controls-wrapper .control .icon-background .icon.small[data-v-44501ca1]{width:14px;height:14px;padding:0}.model-controls-wrapper .control .icon-background .icon.small svg[data-v-44501ca1]{width:14px;height:14px;padding:8px}svg#asterics-logo[data-v-44501ca1]{transform:scale(1.25)}}.model-controls-wrapper[data-v-98cdf960]{display:flex;flex-flow:row nowrap;justify-content:center;align-items:center;margin:3em auto 0;width:-moz-fit-content;width:fit-content}.model-controls-wrapper .control[data-v-98cdf960]{margin-right:2em}.model-controls-wrapper .control[data-v-98cdf960]:last-child{margin-right:0}.model-controls-wrapper .icon-background[data-v-98cdf960]{cursor:pointer;width:70px;height:70px;border-radius:50%;background-color:#0ea1d2;box-shadow:2px 2px 3px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-98cdf960]{box-shadow:2px 2px 3px 1px #2d3e43}.model-controls-wrapper .icon-background[data-v-98cdf960]:hover{background-color:#10b6ed;box-shadow:3px 3px 4px 1px #667386}.dark-mode .model-controls-wrapper .icon-background[data-v-98cdf960]:hover{box-shadow:3px 3px 4px 1px #3f565e}.model-controls-wrapper .icon-background.small[data-v-98cdf960]{width:50px;height:50px}.model-controls-wrapper .icon-background.small .icon[data-v-98cdf960]{width:34px;height:34px;margin:0}.model-controls-wrapper .icon-background.small .icon.small[data-v-98cdf960]{width:24px;height:24px;padding:13px}.model-controls-wrapper .icon-background.dark[data-v-98cdf960]{background-color:#04303f}.model-controls-wrapper .icon-background.dark[data-v-98cdf960]:hover{background-color:#064054}.model-controls-wrapper .icon-background.external[data-v-98cdf960]{background-color:#0a7193}.model-controls-wrapper .icon-background.external[data-v-98cdf960]:hover{background-color:#0b81a8}.model-controls-wrapper .icon-background .icon[data-v-98cdf960]{color:#fff;width:36px;height:36px;padding:17px}.model-controls-wrapper .icon-background .icon svg[data-v-98cdf960]{width:100%;height:100%}.disabled .icon-background[data-v-98cdf960]{background-color:#667386!important;cursor:auto}.disabled .icon-background[data-v-98cdf960]:hover{box-shadow:2px 2px 3px 1px #667386}.dark-mode .disabled .icon-background[data-v-98cdf960]:hover{box-shadow:2px 2px 3px 1px #2d3e43}@media (max-width:999px){.model-controls-wrapper .control[data-v-98cdf960]{margin-right:2rem}}@media (max-width:456px){.model-controls-wrapper[data-v-98cdf960]{margin:2em auto 1em}.model-controls-wrapper .control[data-v-98cdf960]{margin-right:.75rem}.model-controls-wrapper .control .icon-background[data-v-98cdf960]{width:40px;height:40px}.model-controls-wrapper .control .icon-background.small[data-v-98cdf960]{width:30px;height:30px}.model-controls-wrapper .control .icon-background .icon[data-v-98cdf960]{width:20px;height:20px;padding:10px}.model-controls-wrapper .control .icon-background .icon.small[data-v-98cdf960]{width:14px;height:14px;padding:0}.model-controls-wrapper .control .icon-background .icon.small svg[data-v-98cdf960]{width:14px;height:14px;padding:8px}svg#asterics-logo[data-v-98cdf960]{transform:scale(1.25)}}.swiper-slide[data-v-60c80fad]{margin:1rem 0;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .swiper-slide[data-v-60c80fad]{box-shadow:1px 1px 3px 1px #48636c}.solution-media[data-v-60c80fad]{width:100%}@media (max-width:456px){.slide .controls{min-height:unset!important}}.container>div[data-v-4392e75a]{margin:20px 0}.container .title[data-v-4392e75a]{font-size:1.4rem;font-weight:600}.container .description[data-v-4392e75a]{line-height:1.7}.swiper-slide{margin:1rem 0;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .swiper-slide{box-shadow:1px 1px 3px 1px #48636c}@media (max-width:999px){.swiper-button-next,.swiper-button-prev{display:none}}.plugin-search[data-v-3357ab27]{display:flex;flex-flow:row nowrap;font-size:1.2rem}#plugin-search-icon[data-v-3357ab27]{position:absolute;padding:1rem;color:#cfd4db}.dark-mode #plugin-search-icon[data-v-3357ab27]{color:#7698a3}#plugin-search-input[data-v-3357ab27]{width:100%;padding:.8rem .8rem .8rem 3rem;border-radius:2rem;font-size:inherit;outline:none}#plugin-search-input[data-v-3357ab27]:focus{border:2px solid #0ea1d2}.dark-mode #plugin-search-input[data-v-3357ab27]{border-color:#516f79}#plugin-search-input[data-v-3357ab27]::-moz-placeholder{color:#5a7b86}#plugin-search-input[data-v-3357ab27]::placeholder{color:#5a7b86}.title[data-v-50653d92]{cursor:pointer;padding:.5rem 0;font-size:1.2rem;display:flex;flex-flow:row nowrap;justify-content:space-between;align-items:center}.title div[data-v-50653d92]{flex:2 1 46%}.title div[data-v-50653d92]:first-child{margin:1%;flex:2 1 44%}.title div:last-child label[data-v-50653d92]{cursor:auto}form[data-v-e2596472]{margin:8px 0}form fieldset[data-v-e2596472]{display:flex;flex-flow:column nowrap;border:none;background-color:#fbfbfc;box-shadow:1px 1px 3px 1px #7f8b9d}.dark-mode form fieldset[data-v-e2596472]{background-color:#1e1e1e;box-shadow:1px 1px 3px 1px #2a2a2a}.plugin-filter{display:flex;flex-flow:row wrap}.plugin-filter input[type=radio]{opacity:0;position:fixed;width:0}.plugin-filter input[type=radio]:checked+label{background-color:#0ea1d2;color:#fff}.dark-mode .plugin-filter input[type=radio]:checked+label{background-color:#0a799d}.plugin-filter input[type=radio]:checked+label:hover{font-weight:400}.plugin-filter input[type=radio]+label:hover{background-color:#29bff1;color:#fff}.dark-mode .plugin-filter input[type=radio]+label:hover{background-color:#0d99c8}.plugin-filter label{font-size:1.2rem;margin:2px;padding:9px;cursor:pointer;display:inline-block;text-align:center;flex:2 1 46%;background-color:#fff;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .plugin-filter label{background-color:#243136;box-shadow:1px 1px 3px 1px #0e0e0e;color:#999}img.default[data-v-2fc6d2a0]{width:75%!important;height:75%!important;-o-object-fit:contain!important;object-fit:contain!important}div[data-v-9d11ee74]{padding:4px 8px;font-size:1.2rem;font-weight:500;border-top:1px solid #eaecef;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.dark-mode div[data-v-9d11ee74]{border-top:1px solid #5a7b86}.search-grid-link[data-v-3bf036a2]{cursor:pointer;width:230.66666666666666px;height:230.66666666666666px;margin:8px;border:none;box-shadow:1px 1px 2px 1px #7f8b9d}.dark-mode .search-grid-link[data-v-3bf036a2]{box-shadow:1px 1px 2px 1px #717171;background-color:#1e1e1e!important}.search-grid-link a[data-v-3bf036a2]{color:#000}.dark-mode .search-grid-link a[data-v-3bf036a2]{color:#5a7b86}.search-grid-link>a[data-v-3bf036a2]:hover{text-decoration:none!important;box-shadow:1px 1px 2px 1px #0b81a8;color:#0ea1d2}.search-grid-element[data-v-3bf036a2]{display:flex;flex-flow:column nowrap;border:none;list-style-type:none;padding:0}.dark-mode .search-grid-element[data-v-3bf036a2]{box-shadow:1px 1px 2px 1px #5a7b86}.search-grid-element .search-grid-image-container[data-v-3bf036a2]{display:flex;flex-flow:row;justify-content:space-around;align-items:center;width:100%;height:190.66666666666666px;margin:auto}.search-grid-element .search-grid-image-container img[data-v-3bf036a2]{-o-object-fit:cover;object-fit:cover;-o-object-position:50% 50%;object-position:50% 50%;width:100%;height:100%}@media (max-width:1234px){.search-grid-link[data-v-3bf036a2]{width:328px;height:328px}.search-grid-link .search-grid-image-container[data-v-3bf036a2]{height:288px}}@media (max-width:999px){.search-grid-link[data-v-3bf036a2]{width:314px;height:314px}.search-grid-link .search-grid-image-container[data-v-3bf036a2]{height:274px}}@media (max-width:456px){.search-grid-link[data-v-3bf036a2]{width:100vw;max-height:40vh}.search-grid-link .search-grid-image-container[data-v-3bf036a2]{height:274px;max-height:32vh}}.plugins[data-v-068fd960]{margin:2em 0;width:100%;padding:0}.plugins ul[data-v-068fd960]{list-style-type:none;padding:0;margin:0;display:flex;flex-flow:row wrap;justify-content:flex-start}.plugins ul li[data-v-068fd960]{margin-left:0}.plugins .no-results[data-v-068fd960]{background-color:#eaecef;padding:1rem;margin:8px 0;box-shadow:1px 1px 3px 1px #b4bbc6}.dark-mode .plugins .no-results[data-v-068fd960]{background-color:#1e1e1e;box-shadow:1px 1px 3px 1px #2a2a2a}.swiper-button-next[data-v-5df8abdc],.swiper-button-prev[data-v-5df8abdc]{top:407.1875px}.swiper-container .swiper-slide{border:unset!important;margin:unset!important;box-shadow:unset!important}#subtitle[data-v-61570546]{font-size:1.8rem;font-weight:400;margin-bottom:2rem;border-bottom:.1rem solid #dde0e5}.dark-mode #subtitle[data-v-61570546]{border-bottom:1px solid #7f8b9d}@media (max-width:999px){#subtitle[data-v-61570546]{font-size:1.6rem}}@media (max-width:456px){#subtitle[data-v-61570546]{font-size:1.2rem;margin-bottom:.5rem}}.yt-player[data-v-055f0ec9]{width:100%}div.video-container[data-v-055f0ec9]{height:416.25px;box-shadow:1px 1px 3px 1px #7f8b9d}@media (max-width:740px){div.video-container[data-v-055f0ec9]{height:740px;width:100%;max-height:370px}}.badge[data-v-14acdff0]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-14acdff0],.badge.tip[data-v-14acdff0],.badge[data-v-14acdff0]{background-color:#42b983}.badge.error[data-v-14acdff0]{background-color:#da5961}.badge.warn[data-v-14acdff0],.badge.warning[data-v-14acdff0],.badge.yellow[data-v-14acdff0]{background-color:#e7c000}.badge+.badge[data-v-14acdff0]{margin-left:5px}.theme-code-block[data-v-c3402832]{display:none}.theme-code-block__active[data-v-c3402832]{display:block}.theme-code-block>pre[data-v-c3402832]{background-color:orange}.theme-code-group__nav[data-v-c02030d4]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-c02030d4]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-c02030d4]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-c02030d4]{border-bottom:1px solid #42b983}.pre-blank[data-v-c02030d4]{color:#42b983}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#000;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#0ea1d2;border-left-color:#0ea1d2}.sidebar-heading.clickable:hover{color:#0ea1d2}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:1234px){.page-edit{padding:2rem}}@media (max-width:456px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto;transition:color 1s ease}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#404040}.page-edit .edit-link .edit-guides a,.page-edit .edit-link svg{margin-right:.25rem}.page-edit .edit-link a>svg{margin-right:0}.page-edit .edit-link .edit-preamble,.page-edit .edit-link .edit-text{font-style:italic}.page-edit .edit-link .edit-guides a,.page-edit .edit-link .edit-preamble{color:#aaa}.page-edit:hover #editor-guide{color:#45b784}.page-edit:hover #markdown-guide{color:#0ea1d2}.page-edit:hover #developer-guide{color:#04303f}.page-edit .last-updated{float:right;text-align:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#404040}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:999px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#000;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#0ea1d2}a.sidebar-link.active{font-weight:600;color:#0ea1d2;border-left-color:#0ea1d2}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:1234px){.page-nav{padding:2rem}}@media (max-width:456px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:999px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}#home-jumbotron[data-v-3d754ff6]{background:radial-gradient(#fff 0,#dde0e5 80%);display:flex;flex-flow:column nowrap;box-shadow:1px 1px 0 2px #7f8b9d;transition:box-shadow 1.5s ease-out;border-top:1px solid #7f8b9d}.dark-mode #home-jumbotron[data-v-3d754ff6]{background:unset;background-color:#1b2528;box-shadow:1px 1px 0 2px #364a51;border-bottom:1px solid #12191b!important}.dark-mode #home-jumbotron.lock[data-v-3d754ff6]{box-shadow:1px 1px 14px 2px #364a51!important}#home-jumbotron.mounted[data-v-3d754ff6]{box-shadow:1px 1px 2rem 2px #7f8b9d;border-bottom:1px solid #b4bbc6}.dark-mode #home-jumbotron.mounted[data-v-3d754ff6]{box-shadow:1px 1px 14px 2px #364a51!important}#home-jumbotron>div[data-v-3d754ff6]{flex:1 1 100%;margin:10rem 6rem;transition:margin 1s ease-out}#home-jumbotron.lock[data-v-3d754ff6]{transition-duration:3s;box-shadow:1px 1px 4px 2px #7f8b9d}#home-jumbotron.lock>div[data-v-3d754ff6]{margin:4rem 6rem}#home-jumbotron.lock>div>div[data-v-3d754ff6]{padding:8px 0}@media (max-width:456px){#home-jumbotron>div[data-v-3d754ff6]{margin:6rem 1rem}#home-jumbotron.lock>div[data-v-3d754ff6]{margin:1rem}} \ No newline at end of file diff --git a/assets/js/100.9e38f532.js b/assets/js/100.0ab5f2bf.js similarity index 88% rename from assets/js/100.9e38f532.js rename to assets/js/100.0ab5f2bf.js index cff4d1baa3..a5b4fc1deb 100644 --- a/assets/js/100.9e38f532.js +++ b/assets/js/100.0ab5f2bf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{1257:function(e,t,r){"use strict";r.r(t);var a=r(2),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"rfid-reader"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rfid-reader"}},[e._v("#")]),e._v(" RFID Reader")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),e._v(" "),t("p",[e._v("The RFIDReader component provides an interface to the ID-Innovations RFID reader modules. These modules are available for example from Sparkfun electronics. The recognized ID-Tags are transferred from the module to a COM port, where the RFIDReader components reads the ID and puts it to the output port as an ASCII string. The RFIDReader can be useful to switch to a different a model (e.g. for another users or use cases) or to change parameters of a running model.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(834),alt:"Screenshot: RFIDReader plugin",title:"Screenshot: RFIDReader plugin"}})]),e._v(" "),t("p",[e._v("RFIDReader plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an ID-Innovations RFID reader to be connected to a COM port via the Sparkfun USB breakout board or a UART/USB bridge or converter cable. Dedicated drivers have to be installed (e.g. the FTDI VCP drivers for the Sparkfun breakout board). All needed components are contained in the Sparkfun RFID Starter Kit:")]),e._v(" "),t("p",[t("img",{attrs:{src:r(835),alt:"RFID Starter Kit",title:"RFID Starter Kit"}})]),e._v(" "),t("p",[e._v("RFID Starter Kit")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("tagID [string]:")]),e._v(" A recognized TagID is put out on this port as a sequence of 12 hexadecimal numbers in an ASCII string.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("comPort [string]:")]),e._v(" The COM port where the RFID reader module is connected to (e.g “COM5”)")]),e._v(" "),t("li",[t("strong",[e._v("baudRate [integer]:")]),e._v(" The baudrate for communication with the RFID reader module, should be 9600 for the ID Innovations modules")])])])}),[],!1,null,null,null);t.default=o.exports},834:function(e,t,r){e.exports=r.p+"assets/img/rfidreader.808198ba.jpg"},835:function(e,t,r){e.exports=r.p+"assets/img/rfidreader_kit.967bb765.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{1263:function(e,t,r){"use strict";r.r(t);var a=r(2),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"rfid-reader"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rfid-reader"}},[e._v("#")]),e._v(" RFID Reader")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),e._v(" "),t("p",[e._v("The RFIDReader component provides an interface to the ID-Innovations RFID reader modules. These modules are available for example from Sparkfun electronics. The recognized ID-Tags are transferred from the module to a COM port, where the RFIDReader components reads the ID and puts it to the output port as an ASCII string. The RFIDReader can be useful to switch to a different a model (e.g. for another users or use cases) or to change parameters of a running model.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(839),alt:"Screenshot: RFIDReader plugin",title:"Screenshot: RFIDReader plugin"}})]),e._v(" "),t("p",[e._v("RFIDReader plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an ID-Innovations RFID reader to be connected to a COM port via the Sparkfun USB breakout board or a UART/USB bridge or converter cable. Dedicated drivers have to be installed (e.g. the FTDI VCP drivers for the Sparkfun breakout board). All needed components are contained in the Sparkfun RFID Starter Kit:")]),e._v(" "),t("p",[t("img",{attrs:{src:r(840),alt:"RFID Starter Kit",title:"RFID Starter Kit"}})]),e._v(" "),t("p",[e._v("RFID Starter Kit")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("tagID [string]:")]),e._v(" A recognized TagID is put out on this port as a sequence of 12 hexadecimal numbers in an ASCII string.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("comPort [string]:")]),e._v(" The COM port where the RFID reader module is connected to (e.g “COM5”)")]),e._v(" "),t("li",[t("strong",[e._v("baudRate [integer]:")]),e._v(" The baudrate for communication with the RFID reader module, should be 9600 for the ID Innovations modules")])])])}),[],!1,null,null,null);t.default=o.exports},839:function(e,t,r){e.exports=r.p+"assets/img/rfidreader.808198ba.jpg"},840:function(e,t,r){e.exports=r.p+"assets/img/rfidreader_kit.967bb765.jpg"}}]); \ No newline at end of file diff --git a/assets/js/101.698f5272.js b/assets/js/101.55bff9b1.js similarity index 89% rename from assets/js/101.698f5272.js rename to assets/js/101.55bff9b1.js index 213d2bf6f2..edaec84c09 100644 --- a/assets/js/101.698f5272.js +++ b/assets/js/101.55bff9b1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{1258:function(t,e,r){"use strict";r.r(e);var a=r(2),o=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Inertial Measurement)")]),t._v(" "),e("p",[t._v("The RazorIMU plugin provides the serial output of the 9DOF Razor Inertial Measurement Unit at three output ports: pitch, yaw and roll. These three values represent the orientation in terms of rotation along the three axes of the coordinate system.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(836),alt:"Screenshot: RazorIMU plugin",title:"Screenshot: RazorIMU plugin"}})]),t._v(" "),e("p",[t._v("RazorIMU plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This plugin requires a 9DOF Razor IMU module connected to the AsTeRICS platform via a UART/USB converter cable (e.g. an FTDI cable) which creates a COM port. The Razor IMU module (and also the converter cable) is available at SparkFun electronics. It has to be updated with the Sparkfun 9DOF Razor IMU AHRS firmware. (The COM port must be determined by looking in the device manager window and cannot be automatically detected like with dedicated AsTeRICS CIMs.) The required baud rate is 57600.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(837),alt:"RazorIMU",title:"RazorIMU"}})]),t._v(" "),e("p",[t._v("RazorIMU module")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("pitch [double]:")]),t._v(" The value for the current pitch.")]),t._v(" "),e("li",[e("strong",[t._v("yaw [double]:")]),t._v(" The value for the current yaw.")]),t._v(" "),e("li",[e("strong",[t._v("roll [double]:")]),t._v(" The value for the current roll.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("comPort [String]:")]),t._v(" The name of the COM port the IMU is connected to.")]),t._v(" "),e("li",[e("strong",[t._v("baudRate [integer]:")]),t._v(" The baud rate the IMU is transferring its data at.")]),t._v(" "),e("li",[e("strong",[t._v("operationMode [String]:")]),t._v(" Designates the operation mode (currently only “PitchYawRoll” is available).")])])])}),[],!1,null,null,null);e.default=o.exports},836:function(t,e,r){t.exports=r.p+"assets/img/razorimu.870eca5a.jpg"},837:function(t,e,r){t.exports=r.p+"assets/img/razorimu_picture.a4cedfe8.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{1260:function(t,e,r){"use strict";r.r(e);var a=r(2),o=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Inertial Measurement)")]),t._v(" "),e("p",[t._v("The RazorIMU plugin provides the serial output of the 9DOF Razor Inertial Measurement Unit at three output ports: pitch, yaw and roll. These three values represent the orientation in terms of rotation along the three axes of the coordinate system.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(835),alt:"Screenshot: RazorIMU plugin",title:"Screenshot: RazorIMU plugin"}})]),t._v(" "),e("p",[t._v("RazorIMU plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This plugin requires a 9DOF Razor IMU module connected to the AsTeRICS platform via a UART/USB converter cable (e.g. an FTDI cable) which creates a COM port. The Razor IMU module (and also the converter cable) is available at SparkFun electronics. It has to be updated with the Sparkfun 9DOF Razor IMU AHRS firmware. (The COM port must be determined by looking in the device manager window and cannot be automatically detected like with dedicated AsTeRICS CIMs.) The required baud rate is 57600.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(836),alt:"RazorIMU",title:"RazorIMU"}})]),t._v(" "),e("p",[t._v("RazorIMU module")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("pitch [double]:")]),t._v(" The value for the current pitch.")]),t._v(" "),e("li",[e("strong",[t._v("yaw [double]:")]),t._v(" The value for the current yaw.")]),t._v(" "),e("li",[e("strong",[t._v("roll [double]:")]),t._v(" The value for the current roll.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("comPort [String]:")]),t._v(" The name of the COM port the IMU is connected to.")]),t._v(" "),e("li",[e("strong",[t._v("baudRate [integer]:")]),t._v(" The baud rate the IMU is transferring its data at.")]),t._v(" "),e("li",[e("strong",[t._v("operationMode [String]:")]),t._v(" Designates the operation mode (currently only “PitchYawRoll” is available).")])])])}),[],!1,null,null,null);e.default=o.exports},835:function(t,e,r){t.exports=r.p+"assets/img/razorimu.870eca5a.jpg"},836:function(t,e,r){t.exports=r.p+"assets/img/razorimu_picture.a4cedfe8.jpg"}}]); \ No newline at end of file diff --git a/assets/js/102.cc9a7f84.js b/assets/js/102.66546639.js similarity index 98% rename from assets/js/102.cc9a7f84.js rename to assets/js/102.66546639.js index 5af5a073d8..be3da203a0 100644 --- a/assets/js/102.cc9a7f84.js +++ b/assets/js/102.66546639.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{1263:function(e,t,r){"use strict";r.r(t);var o=r(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"sensorboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sensorboard"}},[e._v("#")]),e._v(" Sensorboard")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),e._v(" "),t("p",[e._v("This component provides the sensor signals from the Sensorboard CIM module, which has been developed in course of the Master Thesis of Yat-Sin Yeung at the UAS Technikum Wien. The Sensorboard is part of the head-mounted Smart Vision Module setup but can also be used as a stand-alone unit for movement analysis. The Sensorboard contains a 3-axis accelerometer, a 3-axis gyroscope, a 3-axis compass module, one analogue pressure sensor (a sip/puff sensor) and a connection to an optical IR-object tracking sensor which can track the position of up to 4 infrared LEDs in the field of view of the sensor."),t("br"),e._v("\nFurthermore, the Sensorboard contains a USB hub so that a USB camera can be connected.")]),e._v(" "),t("p",[e._v("The sensorboard is necessary for the headpose-compensated eye gaze tracking applications of the SVM. It can be used also for other applications like remote IR-led tracking or as inertial measurement unit."),t("br"),e._v("\nFor a detailled description of the Sensorboard and its application for eye-tracking please refer to the files Documentation/DIYGuides/SVM_Eyetracking_Yeung.pdf and Documentation/DIYGuides/SmartVisionModule.pdf")]),e._v(" "),t("p",[t("img",{attrs:{src:r(841),alt:"Screenshot: Sensorboard plugin",title:"Screenshot: Sensorboard plugin"}})]),e._v(" "),t("p",[e._v("The Sensorboard plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The Sensorboard has to be connected to an USB port. Design files and firmware of the Sensorboard can be found in the folder CIMs/Sensorboard.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(842),alt:"Screenshot: the Sensorboard PCB",title:"Screenshot: Sensorboard PCB"}})]),e._v(" "),t("p",[e._v("The Sensorboard PCB")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("accX/Y/Z [integer]:")]),e._v(" the three axis output of the acceleration sensor")]),e._v(" "),t("li",[t("strong",[e._v("gyroX/Y/Z [integer]:")]),e._v(" the three axis output of the gyroscope sensor")]),e._v(" "),t("li",[t("strong",[e._v("compassX/Y/Z [integer]:")]),e._v(" the three axis output of the compass sensor")]),e._v(" "),t("li",[t("strong",[e._v("pt1x - pt4x [integer]:")])]),e._v(" "),t("li",[t("strong",[e._v("pt1y - pt4y [integer]:")]),e._v(" The x/y corrdinates of the IR-LED tracking camera (0-1022, 1023 if no LED detected)")]),e._v(" "),t("li",[t("strong",[e._v("pressure [integer]:")]),e._v(" the output of the pressure (sip/puff) sensor")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("refreshInterval [integer]:")]),e._v(" the refresh interval for sensor values in milliseconds (should not be less than 20).")])])])}),[],!1,null,null,null);t.default=s.exports},841:function(e,t,r){e.exports=r.p+"assets/img/sensorboard_plugin.38fd7418.jpg"},842:function(e,t,r){e.exports=r.p+"assets/img/sensorboard.0f3cc561.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{1264:function(e,t,r){"use strict";r.r(t);var o=r(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"sensorboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sensorboard"}},[e._v("#")]),e._v(" Sensorboard")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),e._v(" "),t("p",[e._v("This component provides the sensor signals from the Sensorboard CIM module, which has been developed in course of the Master Thesis of Yat-Sin Yeung at the UAS Technikum Wien. The Sensorboard is part of the head-mounted Smart Vision Module setup but can also be used as a stand-alone unit for movement analysis. The Sensorboard contains a 3-axis accelerometer, a 3-axis gyroscope, a 3-axis compass module, one analogue pressure sensor (a sip/puff sensor) and a connection to an optical IR-object tracking sensor which can track the position of up to 4 infrared LEDs in the field of view of the sensor."),t("br"),e._v("\nFurthermore, the Sensorboard contains a USB hub so that a USB camera can be connected.")]),e._v(" "),t("p",[e._v("The sensorboard is necessary for the headpose-compensated eye gaze tracking applications of the SVM. It can be used also for other applications like remote IR-led tracking or as inertial measurement unit."),t("br"),e._v("\nFor a detailled description of the Sensorboard and its application for eye-tracking please refer to the files Documentation/DIYGuides/SVM_Eyetracking_Yeung.pdf and Documentation/DIYGuides/SmartVisionModule.pdf")]),e._v(" "),t("p",[t("img",{attrs:{src:r(841),alt:"Screenshot: Sensorboard plugin",title:"Screenshot: Sensorboard plugin"}})]),e._v(" "),t("p",[e._v("The Sensorboard plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The Sensorboard has to be connected to an USB port. Design files and firmware of the Sensorboard can be found in the folder CIMs/Sensorboard.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(842),alt:"Screenshot: the Sensorboard PCB",title:"Screenshot: Sensorboard PCB"}})]),e._v(" "),t("p",[e._v("The Sensorboard PCB")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("accX/Y/Z [integer]:")]),e._v(" the three axis output of the acceleration sensor")]),e._v(" "),t("li",[t("strong",[e._v("gyroX/Y/Z [integer]:")]),e._v(" the three axis output of the gyroscope sensor")]),e._v(" "),t("li",[t("strong",[e._v("compassX/Y/Z [integer]:")]),e._v(" the three axis output of the compass sensor")]),e._v(" "),t("li",[t("strong",[e._v("pt1x - pt4x [integer]:")])]),e._v(" "),t("li",[t("strong",[e._v("pt1y - pt4y [integer]:")]),e._v(" The x/y corrdinates of the IR-LED tracking camera (0-1022, 1023 if no LED detected)")]),e._v(" "),t("li",[t("strong",[e._v("pressure [integer]:")]),e._v(" the output of the pressure (sip/puff) sensor")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("refreshInterval [integer]:")]),e._v(" the refresh interval for sensor values in milliseconds (should not be less than 20).")])])])}),[],!1,null,null,null);t.default=s.exports},841:function(e,t,r){e.exports=r.p+"assets/img/sensorboard_plugin.38fd7418.jpg"},842:function(e,t,r){e.exports=r.p+"assets/img/sensorboard.0f3cc561.jpg"}}]); \ No newline at end of file diff --git a/assets/js/103.60605569.js b/assets/js/103.a7976e54.js similarity index 98% rename from assets/js/103.60605569.js rename to assets/js/103.a7976e54.js index 23b309f94c..daa07344bf 100644 --- a/assets/js/103.60605569.js +++ b/assets/js/103.a7976e54.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{1265:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Simulation)")]),e._v(" "),t("p",[e._v("The SignalShaper component can be used to generate signal composed from basic linear functions.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(844),alt:"Screenshot: SignalShaper plugin",title:"Screenshot: SignalShaper plugin"}})]),e._v(" "),t("p",[e._v("SignalShaper plugin")]),e._v(" "),t("p",[t("img",{attrs:{src:n(845),alt:"Example composed signal created from three linear signals",title:"Example composed signal"}})]),e._v(" "),t("p",[e._v("Example composed signal created from three linear signals")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [double]:")]),e._v(" The output port for the signal.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" Start the signal generation. If this event is received during signal generation, the signal generation is restarted.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("interval [integer]:")]),e._v(" The sampling  rate in milliseconds.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("numberOfLines [integer]:")]),e._v(" The number of linear signals used to shape the output signal.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("behaviourAfterFinish [**"),t("strong",[e._v("integer*")]),e._v("*]:")]),e._v(" Defines the component behaviour after all signal lines have been sent:")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("do nothing:")]),e._v(" stop any action.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("repeat:")]),e._v(" Send the signal lines from beginning.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("send the last value:")]),e._v(" Continue to send the last value of the signal.")])])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("beginValue1…beginValue5 [double]:")]),e._v(" The begin value of the linear signals.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("endValue1…endValue5 [double]:")]),e._v(" The end value of the linear signals.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("time1…time5 [integer]:")]),e._v(" The duration of the linear signals in milliseconds.")])])])])}),[],!1,null,null,null);t.default=s.exports},844:function(e,t,n){e.exports=n.p+"assets/img/signalshaper.cb5abd80.jpg"},845:function(e,t,n){e.exports=n.p+"assets/img/signalshaper.0a42d503.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{1266:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Simulation)")]),e._v(" "),t("p",[e._v("The SignalShaper component can be used to generate signal composed from basic linear functions.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(844),alt:"Screenshot: SignalShaper plugin",title:"Screenshot: SignalShaper plugin"}})]),e._v(" "),t("p",[e._v("SignalShaper plugin")]),e._v(" "),t("p",[t("img",{attrs:{src:n(845),alt:"Example composed signal created from three linear signals",title:"Example composed signal"}})]),e._v(" "),t("p",[e._v("Example composed signal created from three linear signals")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [double]:")]),e._v(" The output port for the signal.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" Start the signal generation. If this event is received during signal generation, the signal generation is restarted.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("interval [integer]:")]),e._v(" The sampling  rate in milliseconds.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("numberOfLines [integer]:")]),e._v(" The number of linear signals used to shape the output signal.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("behaviourAfterFinish [**"),t("strong",[e._v("integer*")]),e._v("*]:")]),e._v(" Defines the component behaviour after all signal lines have been sent:")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("do nothing:")]),e._v(" stop any action.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("repeat:")]),e._v(" Send the signal lines from beginning.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("send the last value:")]),e._v(" Continue to send the last value of the signal.")])])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("beginValue1…beginValue5 [double]:")]),e._v(" The begin value of the linear signals.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("endValue1…endValue5 [double]:")]),e._v(" The end value of the linear signals.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("time1…time5 [integer]:")]),e._v(" The duration of the linear signals in milliseconds.")])])])])}),[],!1,null,null,null);t.default=s.exports},844:function(e,t,n){e.exports=n.p+"assets/img/signalshaper.cb5abd80.jpg"},845:function(e,t,n){e.exports=n.p+"assets/img/signalshaper.0a42d503.png"}}]); \ No newline at end of file diff --git a/assets/js/104.06644d41.js b/assets/js/104.c11d7b2c.js similarity index 97% rename from assets/js/104.06644d41.js rename to assets/js/104.c11d7b2c.js index a5c7c111bb..39cddc1d50 100644 --- a/assets/js/104.06644d41.js +++ b/assets/js/104.c11d7b2c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{1266:function(E,R,t){"use strict";t.r(R);var A=t(2),e=Object(A.a)({},(function(){var E=this,R=E._self._c;return R("ContentSlotsDistributor",{attrs:{"slot-key":E.$parent.slotKey}},[R("h1",{attrs:{id:"space-navigtor-3d-mouse"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#space-navigtor-3d-mouse"}},[E._v("#")]),E._v(" Space Navigtor 3D Mouse")]),E._v(" "),R("p",[E._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),E._v(" "),R("p",[E._v("This component interfaces the 3Dconnexion 3D Mouse device.")]),E._v(" "),R("p",[R("img",{attrs:{src:t(846),alt:"Screenshot: SpaceNavigator3DMouse plugin",title:"Screenshot: SpaceNavigator3DMouse plugin"}})]),E._v(" "),R("p",[E._v("SpaceNavigator3DMouse plugin")]),E._v(" "),R("h2",{attrs:{id:"requirements"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[E._v("#")]),E._v(" Requirements")]),E._v(" "),R("p",[E._v("The 3D Mouse device connected to the platform")]),E._v(" "),R("p",[R("img",{attrs:{src:t(847),alt:"SpaceNavigator 3DMouse",title:"SpaceNavigator 3DMouse"}})]),E._v(" "),R("p",[E._v("SpaceNavigator 3DMouse")]),E._v(" "),R("h2",{attrs:{id:"output-port-description"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[E._v("#")]),E._v(" Output Port Description")]),E._v(" "),R("ul",[R("li",[R("strong",[E._v("mouseX [integer]:")]),E._v(" Data of axis X.")]),E._v(" "),R("li",[R("strong",[E._v("mouseY [integer]:")]),E._v(" Data of axis Y.")]),E._v(" "),R("li",[R("strong",[E._v("mouseZ [integer]:")]),E._v(" Data of axis Z.")]),E._v(" "),R("li",[R("strong",[E._v("mouseRx [integer]:")]),E._v(" Data of rotation of axis X.")]),E._v(" "),R("li",[R("strong",[E._v("mouseRy [integer]:")]),E._v(" Data of rotation of axis Y.")]),E._v(" "),R("li",[R("strong",[E._v("mouseRz [integer]:")]),E._v(" Data of rotation of axis Z.")]),E._v(" "),R("li",[R("strong",[E._v("buttons [integer]:")]),E._v(" Data of selected buttons combination.")])]),E._v(" "),R("h2",{attrs:{id:"properties"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[E._v("#")]),E._v(" Properties")]),E._v(" "),R("ul",[R("li",[R("strong",[E._v("interval [integer]:")]),E._v(" The interval of capturing 3D mouse state (ms).")])])])}),[],!1,null,null,null);R.default=e.exports},846:function(E,R,t){E.exports=t.p+"assets/img/spacenavigator3dmouse.7ec48af0.jpg"},847:function(E,R){E.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAEYAUEDASIAAhEBAxEB/8QAHQABAAEFAQEBAAAAAAAAAAAAAAcBAwQFBgIICf/EAEgQAAEDAwIDBgMEBggEBQUAAAEAAgMEBREGIRIxQQcTIlFxgRRhoQgykbEjQmJygsEVJDNSkqKy8ENT4fEWFzRz0TWDk6PC/8QAGQEBAQEBAQEAAAAAAAAAAAAAAAECAwQF/8QALhEBAQACAQMDAgQFBQAAAAAAAAECEQMEITEFEkFRkRMUYXEiI4Gh8AYyUuHx/9oADAMBAAIRAxEAPwD7LREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBETIQETK11xv1jtv/ANRvNuo//fqWR/mUGxRa23X+xXLj/o69W6s4McfcVTJOHJwM4Jxk7LZICISAmQgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgImVEnbp26ab7M2PtzWC8aicwOjt0UgaIgdw6Z+/dgjcDBcegxugliWRkTHSSPaxjRlznHAA8yVEWuvtH9luluOKO8SX+qacdzZ4xOD/APcJbH/m9l8edpHafrPtEqJH6nvchoHHMdspx3VKwZyBwD7/AO88uPpyXGungbsxrW4+S1Mfqzt9G6q+19qaoLmaW0db6Fp5S3KV87vXgYWAH3Puor1D2/8AbBd3ET6zqaNu/goYY4MfLLW5x75+aj19U3pjGeixamUS7kbhWyfBus666lvt8uEc19vNxur+L71bUvnLfTjJx7LKEcTHAiRo9OELRGur2f2coDQNgGt/+FnRw6gkpmVEQdM14yA1jDssd17NhE6Bjge+jaM7nwldNaNRttwBtd1qKCQc30tS+BxP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qZKvs303McwNrKT5RVBI/wA/EtPWdk1JLk096qYz07yFr/yws2LEVh++M8uasOIzspFquyS7MHFTXuimIOzZKd0Y/EF35LXS9lGrACWT2d/y+IkBP4x/zWdLtxkRA4t+YSnd+kB6fJdjB2Vaue4iSS0RDq41Dz9BGtnR9j9xyHVGoKZh6tjpXO+pcPyT2rtw1VKC0DO+Fr5JAHZ/NTBTdkltBHxl4rph5RtZH+YK3tu7OtIUXC4WhlRIB9+pkdLn2J4R7AK6R89xvdPOKenY+eY8o4ml7j7DddJadAauupaY7W6jjP8AxKt4iDfbd30X0LR0dLRQiCjpoaaIHPBEwNbn0Cvq6EVWLsdoo+GW+3OarcN+4ph3UfoScuPtwqQbHYbNZIjHabZTUgP3nRsHG/8Aedzd7lbRFRQBVREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREH//2Q=="}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{1270:function(E,R,t){"use strict";t.r(R);var A=t(2),e=Object(A.a)({},(function(){var E=this,R=E._self._c;return R("ContentSlotsDistributor",{attrs:{"slot-key":E.$parent.slotKey}},[R("h1",{attrs:{id:"space-navigtor-3d-mouse"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#space-navigtor-3d-mouse"}},[E._v("#")]),E._v(" Space Navigtor 3D Mouse")]),E._v(" "),R("p",[E._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),E._v(" "),R("p",[E._v("This component interfaces the 3Dconnexion 3D Mouse device.")]),E._v(" "),R("p",[R("img",{attrs:{src:t(849),alt:"Screenshot: SpaceNavigator3DMouse plugin",title:"Screenshot: SpaceNavigator3DMouse plugin"}})]),E._v(" "),R("p",[E._v("SpaceNavigator3DMouse plugin")]),E._v(" "),R("h2",{attrs:{id:"requirements"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[E._v("#")]),E._v(" Requirements")]),E._v(" "),R("p",[E._v("The 3D Mouse device connected to the platform")]),E._v(" "),R("p",[R("img",{attrs:{src:t(850),alt:"SpaceNavigator 3DMouse",title:"SpaceNavigator 3DMouse"}})]),E._v(" "),R("p",[E._v("SpaceNavigator 3DMouse")]),E._v(" "),R("h2",{attrs:{id:"output-port-description"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[E._v("#")]),E._v(" Output Port Description")]),E._v(" "),R("ul",[R("li",[R("strong",[E._v("mouseX [integer]:")]),E._v(" Data of axis X.")]),E._v(" "),R("li",[R("strong",[E._v("mouseY [integer]:")]),E._v(" Data of axis Y.")]),E._v(" "),R("li",[R("strong",[E._v("mouseZ [integer]:")]),E._v(" Data of axis Z.")]),E._v(" "),R("li",[R("strong",[E._v("mouseRx [integer]:")]),E._v(" Data of rotation of axis X.")]),E._v(" "),R("li",[R("strong",[E._v("mouseRy [integer]:")]),E._v(" Data of rotation of axis Y.")]),E._v(" "),R("li",[R("strong",[E._v("mouseRz [integer]:")]),E._v(" Data of rotation of axis Z.")]),E._v(" "),R("li",[R("strong",[E._v("buttons [integer]:")]),E._v(" Data of selected buttons combination.")])]),E._v(" "),R("h2",{attrs:{id:"properties"}},[R("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[E._v("#")]),E._v(" Properties")]),E._v(" "),R("ul",[R("li",[R("strong",[E._v("interval [integer]:")]),E._v(" The interval of capturing 3D mouse state (ms).")])])])}),[],!1,null,null,null);R.default=e.exports},849:function(E,R,t){E.exports=t.p+"assets/img/spacenavigator3dmouse.7ec48af0.jpg"},850:function(E,R){E.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAEYAUEDASIAAhEBAxEB/8QAHQABAAEFAQEBAAAAAAAAAAAAAAcBAwQFBgIICf/EAEgQAAEDAwIDBgMEBggEBQUAAAEAAgMEBREGIRIxQQcTIlFxgRRhoQgykbEjQmJygsEVJDNSkqKy8ENT4fEWFzRz0TWDk6PC/8QAGQEBAQEBAQEAAAAAAAAAAAAAAAECAwQF/8QALhEBAQACAQMDAgQFBQAAAAAAAAECEQMEITEFEkFRkRMUYXEiI4Gh8AYyUuHx/9oADAMBAAIRAxEAPwD7LREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBETIQETK11xv1jtv/ANRvNuo//fqWR/mUGxRa23X+xXLj/o69W6s4McfcVTJOHJwM4Jxk7LZICISAmQgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgImVEnbp26ab7M2PtzWC8aicwOjt0UgaIgdw6Z+/dgjcDBcegxugliWRkTHSSPaxjRlznHAA8yVEWuvtH9luluOKO8SX+qacdzZ4xOD/APcJbH/m9l8edpHafrPtEqJH6nvchoHHMdspx3VKwZyBwD7/AO88uPpyXGungbsxrW4+S1Mfqzt9G6q+19qaoLmaW0db6Fp5S3KV87vXgYWAH3Puor1D2/8AbBd3ET6zqaNu/goYY4MfLLW5x75+aj19U3pjGeixamUS7kbhWyfBus666lvt8uEc19vNxur+L71bUvnLfTjJx7LKEcTHAiRo9OELRGur2f2coDQNgGt/+FnRw6gkpmVEQdM14yA1jDssd17NhE6Bjge+jaM7nwldNaNRttwBtd1qKCQc30tS+BxP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qZKvs303McwNrKT5RVBI/wA/EtPWdk1JLk096qYz07yFr/yws2LEVh++M8uasOIzspFquyS7MHFTXuimIOzZKd0Y/EF35LXS9lGrACWT2d/y+IkBP4x/zWdLtxkRA4t+YSnd+kB6fJdjB2Vaue4iSS0RDq41Dz9BGtnR9j9xyHVGoKZh6tjpXO+pcPyT2rtw1VKC0DO+Fr5JAHZ/NTBTdkltBHxl4rph5RtZH+YK3tu7OtIUXC4WhlRIB9+pkdLn2J4R7AK6R89xvdPOKenY+eY8o4ml7j7DddJadAauupaY7W6jjP8AxKt4iDfbd30X0LR0dLRQiCjpoaaIHPBEwNbn0Cvq6EVWLsdoo+GW+3OarcN+4ph3UfoScuPtwqQbHYbNZIjHabZTUgP3nRsHG/8Aedzd7lbRFRQBVREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREH//2Q=="}}]); \ No newline at end of file diff --git a/assets/js/105.8231b26f.js b/assets/js/105.3f810fba.js similarity index 96% rename from assets/js/105.8231b26f.js rename to assets/js/105.3f810fba.js index 51438a63cd..d9613c204c 100644 --- a/assets/js/105.8231b26f.js +++ b/assets/js/105.3f810fba.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{1271:function(t,e,r){"use strict";r.r(e);var s=r(2),l=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"trackir"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#trackir"}},[t._v("#")]),t._v(" TrackIR")]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Computer Vision)")]),t._v(" "),e("p",[t._v("The TrackIR input component plugin provides an interface to the TrackIR 5 head tracker, see: https://www.trackir.com/\nThe TrackIR 5 can measure the head orientation in 6DOF (Yaw, Pitch, Roll, X, Y, Z).\nThis data can be utilized for mouse cursor control and other purposes.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(854),alt:"TrackIR device",title:"TrackIR device"}})]),t._v(" "),e("p",[e("img",{attrs:{src:r(855),alt:"Screenshot: TrackIR plugin",title:"Screenshot: TrackIR plugin"}})]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This software component requires the TrackIR device being connected to an USB port, and the TrackIR software running.")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Yaw [double], Pitch [double], Roll [double]:")]),t._v(" These output ports provide current yaw, pitch and roll rotation values (the range of the values depends on the speed settings in the TrackIR software).")]),t._v(" "),e("li",[e("strong",[t._v("X [double], Y [double], Z [double]:")]),t._v(" This output port provides the X, Y and Z translation values (the range of the values depends on the speed settings in the TrackIR software).")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("start:")]),t._v(" An incoming event on this port starts the TrackIR data output.")]),t._v(" "),e("li",[e("strong",[t._v("stop:")]),t._v(" An incoming event on this port stops the TrackIR data output.")]),t._v(" "),e("li",[e("strong",[t._v("center:")]),t._v(" An incoming event on this port sets the TrackIR coordinates to 0 (the user should look straigt to the middle of the screen in order to get a correct center position).")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("autoStart [boolean]:")]),t._v(" This property specifies if the data output is started automatically (if value is true) or if of a start event must be sent via the dedicated event listener port (if value is false).")]),t._v(" "),e("li",[e("strong",[t._v("pollingIntervar [integer]:")]),t._v(" This property defines the polling-interval (update-interval) for getting sensor value updates (given in milliseconds), for example: a value of 10 results in 100 updates per second. The maximum update rate for the TrackIR 5 is 125 Hz (8 ms)")])])])}),[],!1,null,null,null);e.default=l.exports},854:function(t,e,r){t.exports=r.p+"assets/img/trackir_device.1b95f179.jpg"},855:function(t,e){t.exports="data:image/png;base64,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"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{1274:function(t,e,r){"use strict";r.r(e);var s=r(2),l=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"trackir"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#trackir"}},[t._v("#")]),t._v(" TrackIR")]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Computer Vision)")]),t._v(" "),e("p",[t._v("The TrackIR input component plugin provides an interface to the TrackIR 5 head tracker, see: https://www.trackir.com/\nThe TrackIR 5 can measure the head orientation in 6DOF (Yaw, Pitch, Roll, X, Y, Z).\nThis data can be utilized for mouse cursor control and other purposes.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(857),alt:"TrackIR device",title:"TrackIR device"}})]),t._v(" "),e("p",[e("img",{attrs:{src:r(858),alt:"Screenshot: TrackIR plugin",title:"Screenshot: TrackIR plugin"}})]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This software component requires the TrackIR device being connected to an USB port, and the TrackIR software running.")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Yaw [double], Pitch [double], Roll [double]:")]),t._v(" These output ports provide current yaw, pitch and roll rotation values (the range of the values depends on the speed settings in the TrackIR software).")]),t._v(" "),e("li",[e("strong",[t._v("X [double], Y [double], Z [double]:")]),t._v(" This output port provides the X, Y and Z translation values (the range of the values depends on the speed settings in the TrackIR software).")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("start:")]),t._v(" An incoming event on this port starts the TrackIR data output.")]),t._v(" "),e("li",[e("strong",[t._v("stop:")]),t._v(" An incoming event on this port stops the TrackIR data output.")]),t._v(" "),e("li",[e("strong",[t._v("center:")]),t._v(" An incoming event on this port sets the TrackIR coordinates to 0 (the user should look straigt to the middle of the screen in order to get a correct center position).")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("autoStart [boolean]:")]),t._v(" This property specifies if the data output is started automatically (if value is true) or if of a start event must be sent via the dedicated event listener port (if value is false).")]),t._v(" "),e("li",[e("strong",[t._v("pollingIntervar [integer]:")]),t._v(" This property defines the polling-interval (update-interval) for getting sensor value updates (given in milliseconds), for example: a value of 10 results in 100 updates per second. The maximum update rate for the TrackIR 5 is 125 Hz (8 ms)")])])])}),[],!1,null,null,null);e.default=l.exports},857:function(t,e,r){t.exports=r.p+"assets/img/trackir_device.1b95f179.jpg"},858:function(t,e){t.exports="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/106.e77ed4f8.js b/assets/js/106.51cde090.js similarity index 94% rename from assets/js/106.e77ed4f8.js rename to assets/js/106.51cde090.js index 9fb7f9f9bb..ff8c6eac55 100644 --- a/assets/js/106.e77ed4f8.js +++ b/assets/js/106.51cde090.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{1272:function(e,t,i){"use strict";i.r(t);var o=i(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"wiimote"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wiimote"}},[e._v("#")]),e._v(" WiiMote")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),e._v(" "),t("p",[e._v("The WiiMote component interfaces to the Nintendo WiiMote controller via Bluetooth and the WiiYourself! library. It provides various sensor values including the Wiimote buttons and the tracked IR-points of the Wiimote IR front camera and the Joystick position of the Nunchuk extension.")]),e._v(" "),t("p",[e._v("Contains WiiYourself! wiimote code by gl.tter - see "),t("a",{attrs:{href:"http://gl.tter.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://gl.tter.org"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("For Wiimote connection and pairing, please see e.g. "),t("a",{attrs:{href:"http://code.google.com/p/giimote/wiki/GettingConnected",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:i(856),alt:"Screenshot: WiiMote plugin",title:"Screenshot: WiiMote plugin"}})]),e._v(" "),t("p",[e._v("WiiMote plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A Wiimote controller has to be available and paired with the Bluetooth radio module of the system.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(857),alt:"WiiMote and Nunchuk",title:"WiiMote and Nunchuk"}})]),e._v(" "),t("p",[e._v("WiiMote and Nunchuk")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pitch [integer]:")]),e._v(" The calculated pitch orientation of the Wiimote controller (in degrees)")]),e._v(" "),t("li",[t("strong",[e._v("roll [integer]:")]),e._v(" The calculated roll orientation of the Wiimote controller (in degrees)")]),e._v(" "),t("li",[t("strong",[e._v("point1X [integer]:")]),e._v(" The X position of the first visible IR point (0-1023)")]),e._v(" "),t("li",[t("strong",[e._v("point1Y [integer]:")]),e._v(" The Y position of the first visible IR point (0-768)")]),e._v(" "),t("li",[t("strong",[e._v("point2X [integer]:")]),e._v(" The X position of the second visible IR point (0-1023)")]),e._v(" "),t("li",[t("strong",[e._v("point2Y [integer]:")]),e._v(" The Y position of the second visible IR point (0-768)")]),e._v(" "),t("li",[t("strong",[e._v("nunX [integer]:")]),e._v(" The X-position of the analog joystick on the Nunchuk extension (if connected)")]),e._v(" "),t("li",[t("strong",[e._v("nunY [integer]:")]),e._v(" The Y-position of the analog joystick on the Nunchuk extension (if connected)")]),e._v(" "),t("li",[t("strong",[e._v("battery [integer]:")]),e._v(" The battery level (0-100%)")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pressedUp:")]),e._v(" Up direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedUp:")]),e._v(" Up direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedDown:")]),e._v(" Down direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedDown:")]),e._v(" Down direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedLeft:")]),e._v(" Left direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedLeft:")]),e._v(" Left direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedRight:")]),e._v(" Right direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedRight:")]),e._v(" Right direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedA:")]),e._v(" A direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedA:")]),e._v(" A direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedB:")]),e._v(" B direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedB:")]),e._v(" B direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressed1:")]),e._v(" 1 direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("released1:")]),e._v(" 1 direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressed2:")]),e._v(" 2 direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("released2:")]),e._v(" 2 direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedPlus:")]),e._v(" Plus direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedPlus:")]),e._v(" Plus direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedMinus:")]),e._v(" Minus direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedMinus:")]),e._v(" Minus direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedHome:")]),e._v(" Home direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedHome:")]),e._v(" Home direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedNunchuckC:")]),e._v(" NunchuckC direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedNunchuckC:")]),e._v(" NunchuckC direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedNunchuckZ:")]),e._v(" NunchuckZ direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedNunchuckZ:")]),e._v(" NunchuckZ direction button released")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("updatePeriod [integer]:")]),e._v(" This property defines how often the WiiMote is queried for new data (in milliseconds)")])])])}),[],!1,null,null,null);t.default=r.exports},856:function(e,t,i){e.exports=i.p+"assets/img/wiimote.7e82ebda.jpg"},857:function(e,t,i){e.exports=i.p+"assets/img/wiimote_picture.0684eac1.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{1273:function(e,t,i){"use strict";i.r(t);var o=i(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"wiimote"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#wiimote"}},[e._v("#")]),e._v(" WiiMote")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),e._v(" "),t("p",[e._v("The WiiMote component interfaces to the Nintendo WiiMote controller via Bluetooth and the WiiYourself! library. It provides various sensor values including the Wiimote buttons and the tracked IR-points of the Wiimote IR front camera and the Joystick position of the Nunchuk extension.")]),e._v(" "),t("p",[e._v("Contains WiiYourself! wiimote code by gl.tter - see "),t("a",{attrs:{href:"http://gl.tter.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://gl.tter.org"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("For Wiimote connection and pairing, please see e.g. "),t("a",{attrs:{href:"http://code.google.com/p/giimote/wiki/GettingConnected",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:i(855),alt:"Screenshot: WiiMote plugin",title:"Screenshot: WiiMote plugin"}})]),e._v(" "),t("p",[e._v("WiiMote plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A Wiimote controller has to be available and paired with the Bluetooth radio module of the system.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(856),alt:"WiiMote and Nunchuk",title:"WiiMote and Nunchuk"}})]),e._v(" "),t("p",[e._v("WiiMote and Nunchuk")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pitch [integer]:")]),e._v(" The calculated pitch orientation of the Wiimote controller (in degrees)")]),e._v(" "),t("li",[t("strong",[e._v("roll [integer]:")]),e._v(" The calculated roll orientation of the Wiimote controller (in degrees)")]),e._v(" "),t("li",[t("strong",[e._v("point1X [integer]:")]),e._v(" The X position of the first visible IR point (0-1023)")]),e._v(" "),t("li",[t("strong",[e._v("point1Y [integer]:")]),e._v(" The Y position of the first visible IR point (0-768)")]),e._v(" "),t("li",[t("strong",[e._v("point2X [integer]:")]),e._v(" The X position of the second visible IR point (0-1023)")]),e._v(" "),t("li",[t("strong",[e._v("point2Y [integer]:")]),e._v(" The Y position of the second visible IR point (0-768)")]),e._v(" "),t("li",[t("strong",[e._v("nunX [integer]:")]),e._v(" The X-position of the analog joystick on the Nunchuk extension (if connected)")]),e._v(" "),t("li",[t("strong",[e._v("nunY [integer]:")]),e._v(" The Y-position of the analog joystick on the Nunchuk extension (if connected)")]),e._v(" "),t("li",[t("strong",[e._v("battery [integer]:")]),e._v(" The battery level (0-100%)")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pressedUp:")]),e._v(" Up direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedUp:")]),e._v(" Up direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedDown:")]),e._v(" Down direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedDown:")]),e._v(" Down direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedLeft:")]),e._v(" Left direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedLeft:")]),e._v(" Left direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedRight:")]),e._v(" Right direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedRight:")]),e._v(" Right direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedA:")]),e._v(" A direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedA:")]),e._v(" A direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedB:")]),e._v(" B direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedB:")]),e._v(" B direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressed1:")]),e._v(" 1 direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("released1:")]),e._v(" 1 direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressed2:")]),e._v(" 2 direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("released2:")]),e._v(" 2 direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedPlus:")]),e._v(" Plus direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedPlus:")]),e._v(" Plus direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedMinus:")]),e._v(" Minus direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedMinus:")]),e._v(" Minus direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedHome:")]),e._v(" Home direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedHome:")]),e._v(" Home direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedNunchuckC:")]),e._v(" NunchuckC direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedNunchuckC:")]),e._v(" NunchuckC direction button released")]),e._v(" "),t("li",[t("strong",[e._v("pressedNunchuckZ:")]),e._v(" NunchuckZ direction button pressed")]),e._v(" "),t("li",[t("strong",[e._v("releasedNunchuckZ:")]),e._v(" NunchuckZ direction button released")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("updatePeriod [integer]:")]),e._v(" This property defines how often the WiiMote is queried for new data (in milliseconds)")])])])}),[],!1,null,null,null);t.default=r.exports},855:function(e,t,i){e.exports=i.p+"assets/img/wiimote.7e82ebda.jpg"},856:function(e,t,i){e.exports=i.p+"assets/img/wiimote_picture.0684eac1.jpg"}}]); \ No newline at end of file diff --git a/assets/js/107.662e2da3.js b/assets/js/107.cfe217ec.js similarity index 97% rename from assets/js/107.662e2da3.js rename to assets/js/107.cfe217ec.js index 0d3c563f43..2c5c6a7d9d 100644 --- a/assets/js/107.662e2da3.js +++ b/assets/js/107.cfe217ec.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{1281:function(A,e,o){"use strict";o.r(e);var t=o(2),r=Object(t.a)({},(function(){var A=this,e=A._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[e("h1",{attrs:{id:"switch-mouse-solution"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#switch-mouse-solution"}},[A._v("#")]),A._v(" Switch Mouse Solution")]),A._v(" "),e("h2",{attrs:{id:"objective"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[A._v("#")]),A._v(" Objective")]),A._v(" "),e("p",[A._v("Mouse control by switch input. This model demonstrates mouse cursor control via 2 switches or (alternatively) 2 keyboard keys. (There are other models for "),e("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=https://127.0.0.1:8083&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/useCaseDemos/mouseControl/crosshairCursorControl_1key.acs",target:"_blank",rel:"noopener noreferrer"}},[A._v("single-switch"),e("OutboundLink")],1),A._v(" or "),e("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=https://127.0.0.1:8083&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/useCaseDemos/mouseControl/crosshairCursorControl_4keys%20_events.acs",target:"_blank",rel:"noopener noreferrer"}},[A._v("4-switch"),e("OutboundLink")],1),A._v(" cursor control available in the "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/bin/ARE/models/useCaseDemos/mouseControl",target:"_blank",rel:"noopener noreferrer"}},[e("code",[A._v("ARE/models")]),e("OutboundLink")],1),A._v(" folder.)\nInstead of a mouse cursor, a crosshair indicator is displayed on the screen, scanning from the top to the bottom and from the left to the right.")]),A._v(" "),e("h2",{attrs:{id:"mouse-movement"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#mouse-movement"}},[A._v("#")]),A._v(" Mouse movement")]),A._v(" "),e("p",[A._v("By pressing the "),e("code",[A._v("right")]),A._v(" cursor key the crosshair should move accordingly from the left to the right as long as you keep the key pressed. Subsequently, press the "),e("code",[A._v("down")]),A._v(" cursor key to move the cross from the top to the bottom. As soon as the keys are released, the left click is performed by dwelling (stopping movement and waiting for some time). When the crosshair exits the screen, it wraps around and enters the screen from the other side. Thus, every position on the screen can be reached.")]),A._v(" "),e("p",[e("img",{attrs:{src:o(863),alt:"Cross marking the click position on the screen"}})]),A._v(" "),e("p",[e("em",[A._v("Fig. 1: Crosshair indicating the current mouse position. Red horizontal line indicating a movement from top to bottom.")])]),A._v(" "),e("h2",{attrs:{id:"tooltips"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tooltips"}},[A._v("#")]),A._v(" Tooltips")]),A._v(" "),e("p",[A._v("In order to perform special clicks, so called “tooltips” are available: Press "),e("code",[A._v("right")]),A._v(" and "),e("code",[A._v("down")]),A._v(" cursor keys simultaneously in order to show the tooltips, which look like this:")]),A._v(" "),e("p",[e("img",{attrs:{src:o(864),alt:"Cross marking the click position on the screen"}})]),A._v(" "),e("p",[e("em",[A._v("Fig. 2: Tooltip next to the crosshair, shows symbol for double click")])]),A._v(" "),e("p",[A._v("By pressing one of "),e("code",[A._v("right")]),A._v(" or "),e("code",[A._v("down")]),A._v(" cursor keys again it’s possible to navigate through the tooltips where functions like double click, right click, dragging or keyboard shortcuts like "),e("code",[A._v("Ctrl + C")]),A._v(" and "),e("code",[A._v("Ctrl + V")]),A._v(" can be chosen.")]),A._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[A._v("#")]),A._v(" Requirements")]),A._v(" "),e("ul",[e("li",[A._v("Switch\n"),e("ul",[e("li",[A._v("Keyboard key ("),e("code",[A._v("Cursor right")]),A._v(", "),e("code",[A._v("Cursor down")]),A._v(") or")]),A._v(" "),e("li",[A._v("external Switch (e.g. "),e("a",{attrs:{href:"https://www.asterics-foundation.org/projects/fabi/",target:"_blank",rel:"noopener noreferrer"}},[A._v("FABI"),e("OutboundLink")],1),A._v(") attached and configured to emulate "),e("code",[A._v("Cursor right")]),A._v("and "),e("code",[A._v("Cursor down")]),A._v(" keys.")])])]),A._v(" "),e("li",[A._v("AsTeRICS installed and ARE running")]),A._v(" "),e("li",[A._v("OS: Windows, Linux (incl. RPi), Mac OSX")])]),A._v(" "),e("h2",{attrs:{id:"major-plugins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#major-plugins"}},[A._v("#")]),A._v(" Major Plugins")]),A._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"/plugins/sensors/KeyCapture"}},[A._v("KeyCapture")])]),A._v(" "),e("li",[e("a",{attrs:{href:"/plugins/actuators/Mouse"}},[A._v("Mouse")])]),A._v(" "),e("li",[e("a",{attrs:{href:"/plugins/actuators/CrosshairCursorControl"}},[A._v("CrosshairCursorControl")])]),A._v(" "),e("li",[e("a",{attrs:{href:"/plugins/actuators/Tooltip"}},[A._v("Tooltip")])])])])}),[],!1,null,null,null);e.default=r.exports},863:function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOcAAACICAYAAAAcVvyvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAK6SURBVHhe7dqxCQQxEATBC/1CU2b6AF4gd6+pgjHXbEfo2WSstf7Gd4kzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SJOGEqcMNSz33fbx3dzurHxE2dhN6cbGz9xFnZzurHxE2dhN6cbGz9xFnZzurHx81oLQ4kzxCeEFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOEv2/gGKHeaVHFo/ZAAAAABJRU5ErkJggg=="},864:function(A,e){A.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{1281:function(A,e,o){"use strict";o.r(e);var t=o(2),r=Object(t.a)({},(function(){var A=this,e=A._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[e("h1",{attrs:{id:"switch-mouse-solution"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#switch-mouse-solution"}},[A._v("#")]),A._v(" Switch Mouse Solution")]),A._v(" "),e("h2",{attrs:{id:"objective"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[A._v("#")]),A._v(" Objective")]),A._v(" "),e("p",[A._v("Mouse control by switch input. This model demonstrates mouse cursor control via 2 switches or (alternatively) 2 keyboard keys. (There are other models for "),e("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=https://127.0.0.1:8083&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/useCaseDemos/mouseControl/crosshairCursorControl_1key.acs",target:"_blank",rel:"noopener noreferrer"}},[A._v("single-switch"),e("OutboundLink")],1),A._v(" or "),e("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=https://127.0.0.1:8083&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/useCaseDemos/mouseControl/crosshairCursorControl_4keys%20_events.acs",target:"_blank",rel:"noopener noreferrer"}},[A._v("4-switch"),e("OutboundLink")],1),A._v(" cursor control available in the "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/bin/ARE/models/useCaseDemos/mouseControl",target:"_blank",rel:"noopener noreferrer"}},[e("code",[A._v("ARE/models")]),e("OutboundLink")],1),A._v(" folder.)\nInstead of a mouse cursor, a crosshair indicator is displayed on the screen, scanning from the top to the bottom and from the left to the right.")]),A._v(" "),e("h2",{attrs:{id:"mouse-movement"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#mouse-movement"}},[A._v("#")]),A._v(" Mouse movement")]),A._v(" "),e("p",[A._v("By pressing the "),e("code",[A._v("right")]),A._v(" cursor key the crosshair should move accordingly from the left to the right as long as you keep the key pressed. Subsequently, press the "),e("code",[A._v("down")]),A._v(" cursor key to move the cross from the top to the bottom. As soon as the keys are released, the left click is performed by dwelling (stopping movement and waiting for some time). When the crosshair exits the screen, it wraps around and enters the screen from the other side. Thus, every position on the screen can be reached.")]),A._v(" "),e("p",[e("img",{attrs:{src:o(864),alt:"Cross marking the click position on the screen"}})]),A._v(" "),e("p",[e("em",[A._v("Fig. 1: Crosshair indicating the current mouse position. Red horizontal line indicating a movement from top to bottom.")])]),A._v(" "),e("h2",{attrs:{id:"tooltips"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tooltips"}},[A._v("#")]),A._v(" Tooltips")]),A._v(" "),e("p",[A._v("In order to perform special clicks, so called “tooltips” are available: Press "),e("code",[A._v("right")]),A._v(" and "),e("code",[A._v("down")]),A._v(" cursor keys simultaneously in order to show the tooltips, which look like this:")]),A._v(" "),e("p",[e("img",{attrs:{src:o(865),alt:"Cross marking the click position on the screen"}})]),A._v(" "),e("p",[e("em",[A._v("Fig. 2: Tooltip next to the crosshair, shows symbol for double click")])]),A._v(" "),e("p",[A._v("By pressing one of "),e("code",[A._v("right")]),A._v(" or "),e("code",[A._v("down")]),A._v(" cursor keys again it’s possible to navigate through the tooltips where functions like double click, right click, dragging or keyboard shortcuts like "),e("code",[A._v("Ctrl + C")]),A._v(" and "),e("code",[A._v("Ctrl + V")]),A._v(" can be chosen.")]),A._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[A._v("#")]),A._v(" Requirements")]),A._v(" "),e("ul",[e("li",[A._v("Switch\n"),e("ul",[e("li",[A._v("Keyboard key ("),e("code",[A._v("Cursor right")]),A._v(", "),e("code",[A._v("Cursor down")]),A._v(") or")]),A._v(" "),e("li",[A._v("external Switch (e.g. "),e("a",{attrs:{href:"https://www.asterics-foundation.org/projects/fabi/",target:"_blank",rel:"noopener noreferrer"}},[A._v("FABI"),e("OutboundLink")],1),A._v(") attached and configured to emulate "),e("code",[A._v("Cursor right")]),A._v("and "),e("code",[A._v("Cursor down")]),A._v(" keys.")])])]),A._v(" "),e("li",[A._v("AsTeRICS installed and ARE running")]),A._v(" "),e("li",[A._v("OS: Windows, Linux (incl. RPi), Mac OSX")])]),A._v(" "),e("h2",{attrs:{id:"major-plugins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#major-plugins"}},[A._v("#")]),A._v(" Major Plugins")]),A._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"/plugins/sensors/KeyCapture"}},[A._v("KeyCapture")])]),A._v(" "),e("li",[e("a",{attrs:{href:"/plugins/actuators/Mouse"}},[A._v("Mouse")])]),A._v(" "),e("li",[e("a",{attrs:{href:"/plugins/actuators/CrosshairCursorControl"}},[A._v("CrosshairCursorControl")])]),A._v(" "),e("li",[e("a",{attrs:{href:"/plugins/actuators/Tooltip"}},[A._v("Tooltip")])])])])}),[],!1,null,null,null);e.default=r.exports},864:function(A,e){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOcAAACICAYAAAAcVvyvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAK6SURBVHhe7dqxCQQxEATBC/1CU2b6AF4gd6+pgjHXbEfo2WSstf7Gd4kzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SLOEHG2iDNEnC3iDBFnizhDxNkizhBxtogzRJwt4gwRZ4s4Q8TZIs4QcbaIM0ScLeIMEWeLOEPE2SJOGEqcMNSz33fbx3dzurHxE2dhN6cbGz9xFnZzurHxE2dhN6cbGz9xFnZzurHx81oLQ4kzxCeEFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOFvEGSLOFnGGiLNFnCHibBFniDhbxBkizhZxhoizRZwh4mwRZ4g4W8QZIs4WcYaIs0WcIeJsEWeIOEv2/gGKHeaVHFo/ZAAAAABJRU5ErkJggg=="},865:function(A,e){A.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/108.5bb7d9aa.js b/assets/js/108.919fa994.js similarity index 97% rename from assets/js/108.5bb7d9aa.js rename to assets/js/108.919fa994.js index abeee40c8c..19bc8d3aed 100644 --- a/assets/js/108.5bb7d9aa.js +++ b/assets/js/108.919fa994.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{411:function(e,t,n){e.exports=n.p+"assets/img/openhab-show-synced-control.2ac0761e.gif"},929:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"environmental-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environmental-control"}},[e._v("#")]),e._v(" Environmental Control")]),e._v(" "),t("p",[e._v("AsTeRICS has many plugins for environmental control like "),t("strong",[e._v("KNX")]),e._v(", "),t("strong",[e._v("EnOcean")]),e._v(", "),t("strong",[e._v("IrTrans")]),e._v(", "),t("strong",[e._v("Phillips Hue")]),e._v(" or "),t("strong",[e._v("OpenHAB")]),e._v(". Check the "),t("RouterLink",{attrs:{to:"/plugins/"}},[e._v("Plugins")]),e._v(" page and filter by "),t("code",[e._v("Home Control")]),e._v(".")],1),e._v(" "),t("p",[e._v("On this page you will find some tutorials of how to use such plugins to control your environment and how to create and accessible user interface for it.")]),e._v(" "),t("h2",{attrs:{id:"openhab"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#openhab"}},[e._v("#")]),e._v(" OpenHAB")]),e._v(" "),t("p",[e._v("OpenHAB is an Open Source Home Automation SW that let’s you control light, heating and other appliances of your Smart Home. Such appliances or devices are called "),t("strong",[e._v("things")]),e._v(" which are represented as "),t("strong",[e._v("items")]),e._v(" in a user interface. OpenHAB provides several user interfaces and means of voice control.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Accessible User Interface")]),e._v(" "),t("p",[e._v("This tutorial explains how to control an OpenHAB instance and it’s configured items by an AsTeRICS model and how to create an "),t("strong",[e._v("accessible user interface")]),e._v(" for it using AsTeRICS Grid.")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("This tutorial is based on OpenHAB v3.x but should also work with OpenHAB v2.x")])]),e._v(" "),t("ol",[t("li",[e._v("Read the "),t("a",{attrs:{href:"https://www.openhab.org/docs/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenHAB concept page"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.openhab.org/download/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Install OpenHAB"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Download the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/download/v4.1.0/demo-conf-openhab2.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("openhab2 demo configuration zip file"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Restore the demo configuration using openhab-cli (Linux) by entering "),t("code",[e._v("sudo openhab-cli restore demo-conf-openhab2.zip")]),e._v(" in the command line. On other systems extract the .zip file and copy the "),t("code",[e._v("conf/items")]),e._v(" and the "),t("code",[e._v("conf/sitemaps")]),e._v(" folder to your OpenHAB config folder.")]),e._v(" "),t("li",[e._v("Start OpenHAB")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/componentTests/processors/openHAB_simple_test.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Download OpenHAB model"),t("OutboundLink")],1),e._v(" or "),t("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=http://127.0.0.1:8081&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/componentTests/processors/openHAB_simple_test.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Open OpenHAB model in WebACS"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Start the ARE ("),t("code",[e._v("ARE.exe")]),e._v(" or "),t("code",[e._v("start.bat")]),e._v(" or "),t("code",[e._v("start.sh")]),e._v(")")]),e._v(" "),t("li",[e._v("Open model in ARE or Upload model from ACS")]),e._v(" "),t("li",[e._v("Start model in ARE")]),e._v(" "),t("li",[e._v("Open the "),t("a",{attrs:{href:"http://localhost:8080/basicui/app?w=GF_Kitchen&sitemap=demo",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenHAB Basic UI of the Kitchen"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("In the ARE GUI: Click on "),t("code",[e._v("Item Light_GF_Kitchen_Ceiling ON")]),e._v(" or "),t("code",[e._v("Item Light_GF_Kitchen_Ceiling OFF")]),e._v(". You should see the switching of the item in the basic UI accordingly.\n"),t("img",{attrs:{src:n(411),alt:"Screenshot: OpenHAB Basic UI of Kitchen and ARE GUI with buttons to control OpenHAB items. Animation showing light and roller shutter items switched on and off and the temperature slider changing the temperature"}})]),e._v(" "),t("li",[e._v("Change a value in the basic UI, you should get an event in the event visualizer of the ARE GUI.")])]),e._v(" "),t("h3",{attrs:{id:"accessible-ui"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#accessible-ui"}},[e._v("#")]),e._v(" Accessible UI")]),e._v(" "),t("p",[e._v("You can use AsTeRICS Grid to create an accessible UI for controlling your Smart Home using OpenHAB.")]),e._v(" "),t("ol",[t("li",[e._v("Open "),t("a",{attrs:{href:"https://grid.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[e._v("AsTeRICS Grid"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("See "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html#asterics-action"}},[e._v("AsTeRICS Action")]),e._v(": To know how to execute an action of an AsTeRICS model in a running ARE instance.")],1),e._v(" "),t("li",[e._v("Click "),t("code",[e._v("Download from ARE")])]),e._v(" "),t("li",[e._v("In "),t("code",[e._v("Component")]),e._v(", select "),t("code",[e._v("openHAB.1_c")])]),e._v(" "),t("li",[e._v("In "),t("code",[e._v("Send data")]),e._v(" "),t("ol",[t("li",[e._v("Select "),t("code",[e._v("actionString")])]),e._v(" "),t("li",[e._v("Set item name and state value, e.g. "),t("code",[e._v("@OPENHAB:Light_GF_Kitchen_Ceiling,ON")]),e._v(" or "),t("code",[e._v("Light_GF_Kitchen_Ceiling,ON")]),e._v(" ("),t("RouterLink",{attrs:{to:"/plugins/processors/OpenHAB.html#input-port-description"}},[e._v("See plugin documentation")]),e._v(")")],1)])]),e._v(" "),t("li",[e._v("Test action by clicking on "),t("code",[e._v("Test Action")])]),e._v(" "),t("li",[e._v("Click "),t("code",[e._v("OK")]),e._v(" to save the action.")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{399:function(e,t,n){e.exports=n.p+"assets/img/openhab-show-synced-control.2ac0761e.gif"},927:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"environmental-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environmental-control"}},[e._v("#")]),e._v(" Environmental Control")]),e._v(" "),t("p",[e._v("AsTeRICS has many plugins for environmental control like "),t("strong",[e._v("KNX")]),e._v(", "),t("strong",[e._v("EnOcean")]),e._v(", "),t("strong",[e._v("IrTrans")]),e._v(", "),t("strong",[e._v("Phillips Hue")]),e._v(" or "),t("strong",[e._v("OpenHAB")]),e._v(". Check the "),t("RouterLink",{attrs:{to:"/plugins/"}},[e._v("Plugins")]),e._v(" page and filter by "),t("code",[e._v("Home Control")]),e._v(".")],1),e._v(" "),t("p",[e._v("On this page you will find some tutorials of how to use such plugins to control your environment and how to create and accessible user interface for it.")]),e._v(" "),t("h2",{attrs:{id:"openhab"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#openhab"}},[e._v("#")]),e._v(" OpenHAB")]),e._v(" "),t("p",[e._v("OpenHAB is an Open Source Home Automation SW that let’s you control light, heating and other appliances of your Smart Home. Such appliances or devices are called "),t("strong",[e._v("things")]),e._v(" which are represented as "),t("strong",[e._v("items")]),e._v(" in a user interface. OpenHAB provides several user interfaces and means of voice control.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Accessible User Interface")]),e._v(" "),t("p",[e._v("This tutorial explains how to control an OpenHAB instance and it’s configured items by an AsTeRICS model and how to create an "),t("strong",[e._v("accessible user interface")]),e._v(" for it using AsTeRICS Grid.")])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("This tutorial is based on OpenHAB v3.x but should also work with OpenHAB v2.x")])]),e._v(" "),t("ol",[t("li",[e._v("Read the "),t("a",{attrs:{href:"https://www.openhab.org/docs/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenHAB concept page"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://www.openhab.org/download/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Install OpenHAB"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Download the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/download/v4.1.0/demo-conf-openhab2.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("openhab2 demo configuration zip file"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Restore the demo configuration using openhab-cli (Linux) by entering "),t("code",[e._v("sudo openhab-cli restore demo-conf-openhab2.zip")]),e._v(" in the command line. On other systems extract the .zip file and copy the "),t("code",[e._v("conf/items")]),e._v(" and the "),t("code",[e._v("conf/sitemaps")]),e._v(" folder to your OpenHAB config folder.")]),e._v(" "),t("li",[e._v("Start OpenHAB")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/componentTests/processors/openHAB_simple_test.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Download OpenHAB model"),t("OutboundLink")],1),e._v(" or "),t("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=http://127.0.0.1:8081&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/componentTests/processors/openHAB_simple_test.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Open OpenHAB model in WebACS"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("Start the ARE ("),t("code",[e._v("ARE.exe")]),e._v(" or "),t("code",[e._v("start.bat")]),e._v(" or "),t("code",[e._v("start.sh")]),e._v(")")]),e._v(" "),t("li",[e._v("Open model in ARE or Upload model from ACS")]),e._v(" "),t("li",[e._v("Start model in ARE")]),e._v(" "),t("li",[e._v("Open the "),t("a",{attrs:{href:"http://localhost:8080/basicui/app?w=GF_Kitchen&sitemap=demo",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenHAB Basic UI of the Kitchen"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("In the ARE GUI: Click on "),t("code",[e._v("Item Light_GF_Kitchen_Ceiling ON")]),e._v(" or "),t("code",[e._v("Item Light_GF_Kitchen_Ceiling OFF")]),e._v(". You should see the switching of the item in the basic UI accordingly.\n"),t("img",{attrs:{src:n(399),alt:"Screenshot: OpenHAB Basic UI of Kitchen and ARE GUI with buttons to control OpenHAB items. Animation showing light and roller shutter items switched on and off and the temperature slider changing the temperature"}})]),e._v(" "),t("li",[e._v("Change a value in the basic UI, you should get an event in the event visualizer of the ARE GUI.")])]),e._v(" "),t("h3",{attrs:{id:"accessible-ui"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#accessible-ui"}},[e._v("#")]),e._v(" Accessible UI")]),e._v(" "),t("p",[e._v("You can use AsTeRICS Grid to create an accessible UI for controlling your Smart Home using OpenHAB.")]),e._v(" "),t("ol",[t("li",[e._v("Open "),t("a",{attrs:{href:"https://grid.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[e._v("AsTeRICS Grid"),t("OutboundLink")],1)]),e._v(" "),t("li",[e._v("See "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html#asterics-action"}},[e._v("AsTeRICS Action")]),e._v(": To know how to execute an action of an AsTeRICS model in a running ARE instance.")],1),e._v(" "),t("li",[e._v("Click "),t("code",[e._v("Download from ARE")])]),e._v(" "),t("li",[e._v("In "),t("code",[e._v("Component")]),e._v(", select "),t("code",[e._v("openHAB.1_c")])]),e._v(" "),t("li",[e._v("In "),t("code",[e._v("Send data")]),e._v(" "),t("ol",[t("li",[e._v("Select "),t("code",[e._v("actionString")])]),e._v(" "),t("li",[e._v("Set item name and state value, e.g. "),t("code",[e._v("@OPENHAB:Light_GF_Kitchen_Ceiling,ON")]),e._v(" or "),t("code",[e._v("Light_GF_Kitchen_Ceiling,ON")]),e._v(" ("),t("RouterLink",{attrs:{to:"/plugins/processors/OpenHAB.html#input-port-description"}},[e._v("See plugin documentation")]),e._v(")")],1)])]),e._v(" "),t("li",[e._v("Test action by clicking on "),t("code",[e._v("Test Action")])]),e._v(" "),t("li",[e._v("Click "),t("code",[e._v("OK")]),e._v(" to save the action.")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/109.38119d7c.js b/assets/js/109.e98b355b.js similarity index 96% rename from assets/js/109.38119d7c.js rename to assets/js/109.e98b355b.js index 8c31f20d05..6083bbd7b9 100644 --- a/assets/js/109.38119d7c.js +++ b/assets/js/109.e98b355b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{295:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_74b8c615b8455605.d7a70de8.png"},984:function(e,t,n){"use strict";n.r(t);var o=n(2),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-development-overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-development-overview"}},[e._v("#")]),e._v(" ARE Development Overview")]),e._v(" "),t("h2",{attrs:{id:"the-asterics-runtime-environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-asterics-runtime-environment"}},[e._v("#")]),e._v(" The AsTeRICS Runtime Environment")]),e._v(" "),t("p",[e._v("The AsTeRICS Runtime environment (ARE) is an OSGi-based middleware [3] which allows software plugins to run in parallel. The plugins usually represent a sensor or an actuator and are implemented as independent OSGi bundles. The runtime environment identifies AsTeRICS plugins from other OSGi bundles based on metadata defined inside the plugins.")]),e._v(" "),t("p",[e._v("The ARE expects from plugin-developers to define the structure of their plugins (properties, inputs, outputs and event ports) in XML files. Based on these XMLs, the middleware constructs a runtime representation of each installed AsTeRICS plugin.")]),e._v(" "),t("p",[e._v("Furthermore, the ARE expects a runtime model (system model) which usually comes from the AsTeRICS Configuration Suite (ACS). The ACS is running on a Windows Personal Computer (.net 4.0 required) and mainly used to graphically design the layout of the system as a network of interconnected components. The system model is another XML file that defines the components participating in a specific application, connections between them, events and other properties. Based on this file, ARE knows which plugins to activate and how to define the data flow between them. Since the system model represents the main communication means between the ACS and the ARE, it is expected to be a serialisable object, easy to transfer and translate. ARE and ACS communicate through an appropriate TCP/IP-based communication protocol named ASAPI.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(295),alt:""}})]),e._v(" "),t("p",[e._v("The ARE also provides “services” to plugin developers (for example communication support for COM ports) and it allows reporting errors on the runtime environment, registering event listeners and interacting with its graphical user interface (ARE GUI).")]),e._v(" "),t("p",[e._v("The ARE GUI is a simple graphical environment developed to allow end-users to interact directly with the runtime environment. It may be used to modify runtime parameters of a model via buttons or sliders, and to monitor live signals and events of the running model.")]),e._v(" "),t("h2",{attrs:{id:"are-components"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-components"}},[e._v("#")]),e._v(" ARE Components")]),e._v(" "),t("p",[e._v("The ARE consist of the following main parts:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("The ARE middleware")])]),e._v(" "),t("li",[t("p",[e._v("ARE plugins (also referred to as “components”) – sensor, processor and actuator modules which provide functional building blocks for assistive functionalities")])]),e._v(" "),t("li",[t("p",[e._v("A service layer which provides infrastructure to the ARE components,"),t("br"),e._v("\nfor example COM port and communication management for connection of the Communication Interface Modules (CIMs)")])])]),e._v(" "),t("p",[e._v("The ARE is commonly deployed on an embedded device, running an appropriate operating system (OS), typically an embedded variant of Windows. On top of the OS, an appropriate Java Virtual Machine (JVM) is used to host the OSGi component framework which provides support for modularity and dynamic loading/unloading of components.")]),e._v(" "),t("p",[e._v("All the core components of the framework (described in detail later) are defined as OSGi modules. Certain components that need to access legacy code (e.g., written in C or C++) are also deployed on top of OSGi, and are interfaced to the native code using Java Native Interface (JNI) as needed. In this regard, and with the exception of the pluggable components that use native code interfaces with platform-specific JNI bindings, the ARE middleware is expected to be "),t("em",[e._v("platform independent")]),e._v(".")]),e._v(" "),t("p",[e._v("The implementation requires basically JAVA 1.7 (JDK/JRE 7) and an OSGi framework (which is part of the source code downloads).")]),e._v(" "),t("h2",{attrs:{id:"about-osgi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#about-osgi"}},[e._v("#")]),e._v(" About OSGi")]),e._v(" "),t("p",[e._v("The Open Service Gateway initiative (OSGi) is an open specification that enables the modular assembly of software built with the Java technology [3]. The OSGi Service Platform facilitates the componentization of software modules and applications and assures interoperability of applications and services over a variety of networked devices.")]),e._v(" "),t("p",[e._v("OSGi technology is the dynamic module system for Java™. Java provides the portability that is required to support products on many different platforms. The OSGi technology provides the standardized primitives that allow applications to be constructed from small, reusable and collaborative components. These components can be composed into an application and deployed; The OSGi Service Platform provides a service-oriented architecture that enables these components to dynamically discover each other for collaboration, and thereby forms the optimal basis for the AsTeRICS middleware.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{289:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_74b8c615b8455605.d7a70de8.png"},942:function(e,t,n){"use strict";n.r(t);var o=n(2),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-development-overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-development-overview"}},[e._v("#")]),e._v(" ARE Development Overview")]),e._v(" "),t("h2",{attrs:{id:"the-asterics-runtime-environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-asterics-runtime-environment"}},[e._v("#")]),e._v(" The AsTeRICS Runtime Environment")]),e._v(" "),t("p",[e._v("The AsTeRICS Runtime environment (ARE) is an OSGi-based middleware [3] which allows software plugins to run in parallel. The plugins usually represent a sensor or an actuator and are implemented as independent OSGi bundles. The runtime environment identifies AsTeRICS plugins from other OSGi bundles based on metadata defined inside the plugins.")]),e._v(" "),t("p",[e._v("The ARE expects from plugin-developers to define the structure of their plugins (properties, inputs, outputs and event ports) in XML files. Based on these XMLs, the middleware constructs a runtime representation of each installed AsTeRICS plugin.")]),e._v(" "),t("p",[e._v("Furthermore, the ARE expects a runtime model (system model) which usually comes from the AsTeRICS Configuration Suite (ACS). The ACS is running on a Windows Personal Computer (.net 4.0 required) and mainly used to graphically design the layout of the system as a network of interconnected components. The system model is another XML file that defines the components participating in a specific application, connections between them, events and other properties. Based on this file, ARE knows which plugins to activate and how to define the data flow between them. Since the system model represents the main communication means between the ACS and the ARE, it is expected to be a serialisable object, easy to transfer and translate. ARE and ACS communicate through an appropriate TCP/IP-based communication protocol named ASAPI.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(289),alt:""}})]),e._v(" "),t("p",[e._v("The ARE also provides “services” to plugin developers (for example communication support for COM ports) and it allows reporting errors on the runtime environment, registering event listeners and interacting with its graphical user interface (ARE GUI).")]),e._v(" "),t("p",[e._v("The ARE GUI is a simple graphical environment developed to allow end-users to interact directly with the runtime environment. It may be used to modify runtime parameters of a model via buttons or sliders, and to monitor live signals and events of the running model.")]),e._v(" "),t("h2",{attrs:{id:"are-components"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-components"}},[e._v("#")]),e._v(" ARE Components")]),e._v(" "),t("p",[e._v("The ARE consist of the following main parts:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("The ARE middleware")])]),e._v(" "),t("li",[t("p",[e._v("ARE plugins (also referred to as “components”) – sensor, processor and actuator modules which provide functional building blocks for assistive functionalities")])]),e._v(" "),t("li",[t("p",[e._v("A service layer which provides infrastructure to the ARE components,"),t("br"),e._v("\nfor example COM port and communication management for connection of the Communication Interface Modules (CIMs)")])])]),e._v(" "),t("p",[e._v("The ARE is commonly deployed on an embedded device, running an appropriate operating system (OS), typically an embedded variant of Windows. On top of the OS, an appropriate Java Virtual Machine (JVM) is used to host the OSGi component framework which provides support for modularity and dynamic loading/unloading of components.")]),e._v(" "),t("p",[e._v("All the core components of the framework (described in detail later) are defined as OSGi modules. Certain components that need to access legacy code (e.g., written in C or C++) are also deployed on top of OSGi, and are interfaced to the native code using Java Native Interface (JNI) as needed. In this regard, and with the exception of the pluggable components that use native code interfaces with platform-specific JNI bindings, the ARE middleware is expected to be "),t("em",[e._v("platform independent")]),e._v(".")]),e._v(" "),t("p",[e._v("The implementation requires basically JAVA 1.7 (JDK/JRE 7) and an OSGi framework (which is part of the source code downloads).")]),e._v(" "),t("h2",{attrs:{id:"about-osgi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#about-osgi"}},[e._v("#")]),e._v(" About OSGi")]),e._v(" "),t("p",[e._v("The Open Service Gateway initiative (OSGi) is an open specification that enables the modular assembly of software built with the Java technology [3]. The OSGi Service Platform facilitates the componentization of software modules and applications and assures interoperability of applications and services over a variety of networked devices.")]),e._v(" "),t("p",[e._v("OSGi technology is the dynamic module system for Java™. Java provides the portability that is required to support products on many different platforms. The OSGi technology provides the standardized primitives that allow applications to be constructed from small, reusable and collaborative components. These components can be composed into an application and deployed; The OSGi Service Platform provides a service-oriented architecture that enables these components to dynamically discover each other for collaboration, and thereby forms the optimal basis for the AsTeRICS middleware.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/110.b63d17e4.js b/assets/js/110.e4229db5.js similarity index 99% rename from assets/js/110.b63d17e4.js rename to assets/js/110.e4229db5.js index 48d6f810d1..dda3fe1059 100644 --- a/assets/js/110.b63d17e4.js +++ b/assets/js/110.e4229db5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{296:function(t,a,s){t.exports=s.p+"assets/img/DeveloperManual_html_17298a48a6d250c5.fbefb96e.png"},945:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"plugin-advanced"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#plugin-advanced"}},[t._v("#")]),t._v(" Plugin Advanced")]),t._v(" "),a("h2",{attrs:{id:"writing-asterics-plugin-code"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-asterics-plugin-code"}},[t._v("#")]),t._v(" Writing AsTeRICS Plugin Code")]),t._v(" "),a("h3",{attrs:{id:"are-coding-guidelines"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#are-coding-guidelines"}},[t._v("#")]),t._v(" ARE Coding Guidelines")]),t._v(" "),a("p",[t._v("Coding guidelines are necessary to allow new developers to quickly find their through the code of the ARE. They are created in such a way to provide means for developers to understand code of each other but they also make sure that non-technical users can find their way through a model in ACS.")]),t._v(" "),a("p",[t._v("If you use Eclipse as IDE, "),a("strong",[t._v("you can import predefined clean up, code template and formatting settings")]),t._v(", which cover some of the coding guidelines (see 4.1.1).")]),t._v(" "),a("p",[t._v("The basic coding guidelines are:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Plugins, ports and properties should be named intuitively in the bundle descriptor. Only if necessary, the corresponding variables in the plugin code should be named differently. However they should adhere to the naming conventions stated in section 4.1.3 and different names should be commented in the code sections which translate the name into the variable (getInputPort(), getRuntimeProperty() …)")])]),t._v(" "),a("li",[a("p",[t._v("Variable names should always use the Java naming conventions")])]),t._v(" "),a("li",[a("p",[t._v("Every method should be preceded by a JavaDoc compatible header in order to allow new developer to grasp what is going on in it")])]),t._v(" "),a("li",[a("p",[t._v("Where reasonable code comments should be added to improve understanding of code internals")])]),t._v(" "),a("li",[a("p",[t._v("Code should be indented by four spaces per indentations stage. Indentations should be done using space and "),a("strong",[t._v("not tabs")]),t._v(". Tabs should be converted to spaces.")])]),t._v(" "),a("li",[a("p",[t._v("Opening parentheses should be placed in the same line")])])]),t._v(" "),a("h2",{attrs:{id:"eclipse-code-style-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#eclipse-code-style-settings"}},[t._v("#")]),t._v(" Eclipse Code Style Settings")]),t._v(" "),a("p",[t._v("If you use Eclipse as IDE, you can import predefined clean up, code template and formatting settings. The files are located in the AsTeRICS/ARE folder of the checkout github repository.")]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("Eclipse - Code Style - Clean Up.xml")]),t._v(": Definitions for cleanup, e.g. remove unused imports and unused variables")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("Eclipse - Code Style - Code Templates.xml")]),t._v(": Contains default file header including license information (see 4.1.5) and default class comment (see 4.1.6).")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("Eclipse - Code Style - Formatter.xml")]),t._v(": Contains code formatting definitions e.g. 4 spaces instead of tabs.")])])]),t._v(" "),a("p",[t._v("You can import the settings by")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("selecting the project folder and clicking right mouse button")])]),t._v(" "),a("li",[a("p",[t._v("opening ‘Properties’ entry of popup menu")])]),t._v(" "),a("li",[a("p",[t._v("Opening ‘Java Code Style’/Clean Up|Code Templates|Formatter respectively")])])]),t._v(" "),a("h2",{attrs:{id:"port-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#port-naming-conventions"}},[t._v("#")]),t._v(" Port Naming Conventions")]),t._v(" "),a("p",[t._v("Variables of port instances should be named with a prefix indicating what kind of port it is. The rest of the port name should indicate the port’s use and adhere to the standard Java variable naming conventions. The available prefixes are:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("ip: indicates that the port is an instance of IRuntimeInputPort")])]),t._v(" "),a("li",[a("p",[t._v("op: indicates that the port is an instance of IRuntimeOutputPort")])]),t._v(" "),a("li",[a("p",[t._v("elp: indicates that the port is an instance of IRuntimeEventListenerPort")])]),t._v(" "),a("li",[a("p",[t._v("etp: indicates that the port is an instance of IRuntimeEventTriggererPort")])])]),t._v(" "),a("p",[t._v("A variable holding an event listener port could therefore be named "),a("em",[t._v("elpKeyPressed")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"property-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-naming-conventions"}},[t._v("#")]),t._v(" Property Naming Conventions")]),t._v(" "),a("p",[t._v("Plugin properties should be directly mapped to a variable in the plugin code. The variable’s should be prepended with the prefix "),a("em",[t._v("prop")]),t._v(" and adhere to standard Java naming conventions. Thus a property could be named "),a("em",[t._v("InputGainValue")]),t._v(" and the corresponding variable should be named "),a("em",[t._v("propInputGainValue")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"bundle-descriptor-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundle-descriptor-naming-conventions"}},[t._v("#")]),t._v(" Bundle Descriptor Naming Conventions")]),t._v(" "),a("p",[t._v("The bundle descriptor should serve as an abstraction layer between the user who creates models in the ACS and the developer. Thus the names for plugins, ports and properties in the bundle descriptor should be as intuitive as possible. Names in the bundle descriptor should not include prefixes because the added information is also conveyed in the presentation of plugins in the ACS.")]),t._v(" "),a("p",[t._v("The bundle descriptor can translate intuitive names (e.g. input.switch) to the canonical names of plugins (e.g. GpioInputInstance) allowing coexistence of a user and a developer language. This method of name translation can be applied for plugin names, port names and property names.")]),t._v(" "),a("h2",{attrs:{id:"asterics-are-service-and-plugin-source-file-header"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#asterics-are-service-and-plugin-source-file-header"}},[t._v("#")]),t._v(" AsTeRICS ARE, service and plugin source file header")]),t._v(" "),a("p",[t._v("Each source file of ARE, of ARE services, ARE plugins and tools which will be released as open source should have the following header:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/*\n * AsTeRICS - Assistive Technology Rapid Integration and Construction Set\n * \n * \n * d8888 88888888888 8888888b. 8888888 .d8888b. .d8888b. \n * d88888 888 888 Y88b 888 d88P Y88b d88P Y88b\n * d88P888 888 888 888 888 888 888 Y88b. \n * d88P 888 .d8888b 888 .d88b. 888 d88P 888 888 "Y888b. \n * d88P 888 88K 888 d8P Y8b 8888888P" 888 888 "Y88b.\n * d88P 888 "Y8888b. 888 88888888 888 T88b 888 888 888 "888\n * d8888888888 X88 888 Y8b. 888 T88b 888 Y88b d88P Y88b d88P\n * d88P 888 88888P\' 888 "Y8888 888 T88b 8888888 "Y8888P" "Y8888P" \n *\n *\n * homepage: http://www.asterics.org \n *\n * This project has been partly funded by the European Commission, \n * Grant Agreement Number 247730\n * \n * \n * Dual License: MIT or GPL v3.0 with "CLASSPATH" exception\n * (please refer to the folder LICENSE)\n * \n */')]),t._v("\n")])])]),a("h2",{attrs:{id:"javadoc-compatible-comments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javadoc-compatible-comments"}},[t._v("#")]),t._v(" JavaDoc compatible comments")]),t._v(" "),a("p",[t._v("JavaDoc compatible comments should be used to indicate the author of a source file, and to describe the purpose of a function/method/class and the respective parameters and return values.")]),t._v(" "),a("p",[t._v("Example for a source file header info:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Bardisplayinstance.java\n * Purpose of this module:\n * Implements the Bardisplay actuator plugin\n * \n * @author Chris Veigl [veigl@technikum-wien.at]\n * Date: Mar 7, 2011\n */")]),t._v("\n")])])]),a("p",[t._v("Example for a method of a class:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n* Returns the value of the given property\n* @param propertyName the name of the property\n* @return the property value\n*/")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("h2",{attrs:{id:"implementing-asterics-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementing-asterics-components"}},[t._v("#")]),t._v(" Implementing AsTeRICS components")]),t._v(" "),a("p",[t._v("This section describes the basic steps required for implementing an AsTeRICS component including a brief introduction to OSGi. To illustrate the implementation steps, we take a walk-through with the implementation of a simple processor component.")]),t._v(" "),a("p",[t._v("The AsTeRICS schemata of the XML descriptors include two concepts: the "),a("em",[t._v("bundle descriptors")]),t._v(" and the "),a("em",[t._v("deployment descriptors")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"the-bundle-descriptors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-bundle-descriptors"}},[t._v("#")]),t._v(" The Bundle Descriptors")]),t._v(" "),a("p",[t._v("Bundle descriptors are used to describe the content of an individual bundle (typically encapsulating one or more components). As such, they contain information about the included "),a("em",[t._v("components")]),t._v(", their "),a("em",[t._v("ports")]),t._v(", their customizable "),a("em",[t._v("properties")]),t._v(" and optionally their GUI.")]),t._v(" "),a("p",[t._v("The following shows a bundle descriptor of a simple processor-plugin (subtype for the ACS components menu is “Basic Math”). The plugin provides an averaging function for n values (property “buffer-size”) and has one input port and one output port for integer values:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentTypes")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bundle_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentType")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.averager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("canonical_name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("eu.asterics.component.processor.averager.AveragerComponent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("subtype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Basic Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("processor"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Linked list-based averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Input port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("multiplicity")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("one-to-one"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mustBeConnected")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("true"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("out_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Output port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("buffer-size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("50"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("The size of the averager's buffer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-deployment-descriptor"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-deployment-descriptor"}},[t._v("#")]),t._v(" The Deployment Descriptor")]),t._v(" "),a("p",[t._v("Deployment descriptors instruct the ARE of the desired application deployment structure. The deployment descriptor is typically composed in the AsTeRICS Configuration Suite (ACS) but can also be written with a text editor (as the bundle descriptor). Basically the deployment descriptor contains several component descriptions (copied from the corresponding bundle descriptors), actual property values and the channel connection between input- and output ports of the components.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The "),a("em",[t._v("type_id")]),t._v(" argument of the "),a("em",[t._v("component")]),t._v(" element in the deployment descriptor must match the "),a("em",[t._v("id")]),t._v(" argument of the "),a("em",[t._v("componentType")]),t._v(" element on the bundle descriptor. This is how the ARE detects the referred plugin type in the deployment model.")])]),t._v(" "),a("p",[t._v("The following demo deployment descriptor describes a simple model containing two plugins and one channel:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("model")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("deployment_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("components")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Source of two signal cahnnels "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Signal Target"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channels")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("channel.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Connects SignalSource.1 (outport 1) \n to SignalTarget.1 (in_x)"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("source")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-manifest-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-manifest-file"}},[t._v("#")]),t._v(" The Manifest file")]),t._v(" "),a("p",[t._v("The Manifest file tells the bundle name and other informations like import packages and .dlls to the OSGi. A typical Manifest looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-processors.averager\nBundle-SymbolicName: eu.asterics.component.processor.averager\nBundle-Version: 0.1.0\nDynamicImport-Package: *\n\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The empty line at the end of the Manifest file. It seems that OSGi needs that empty line in order to work properly.")])]),t._v(" "),a("h2",{attrs:{id:"structure-of-osgi-bundles-containing-are-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-osgi-bundles-containing-are-components"}},[t._v("#")]),t._v(" Structure of OSGi bundles containing ARE components")]),t._v(" "),a("p",[t._v("As a common OSGi bundle, an AsTeRICS component must be packaged in a JAR file, containing the class files (object code) and the Manifest file. In addition to these, the AsTeRICS middleware expects the "),a("em",[t._v("bundle descriptor")]),t._v(". At this point, it should be noted that it is possible to include "),a("em",[t._v("multiple")]),t._v(" AsTeRICS components in a single OSGi bundle, as long as the bundle descriptor describes all of them.")]),t._v(" "),a("p",[t._v("Overall, the file structure in a typical AsTeRICS bundle looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("/\n+- eu/\n +- asterics/\n +- component/\n +- ...\n+- lib/\n +- native/\n +- my_library.dll\n+- META-INF/\n +- MANIFEST.MF\n+- bundle_descriptor.xml\n")])])]),a("p",[t._v("The Java object code is included in the corresponding folders representing the package structure (e.g., “/eu/asterics/component/…” etc). Optionally, if libraries are needed - native or not-, then they are included in the “/lib” folder. The Manifest is included in the “META-INF” folder as per the standard Java/OSGi practice. Finally, the AsTeRICS bundle descriptor is included directly in the root of the JAR file (i.e. “/”).")]),t._v(" "),a("h2",{attrs:{id:"component-lifecyle"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#component-lifecyle"}},[t._v("#")]),t._v(" Component lifecyle")]),t._v(" "),a("p",[t._v("An ARE component implementation needs to realise the actual component with its lifecycle (i.e., ways to access its ports and properties, and methods realizing its lifecycle). This is illustrated in the following code:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Lifecycle support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("pause")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resume")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Component support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeOutputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOutputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventListenerPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventListenerPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventTriggererPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventTriggererPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" newValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" syncedValuesReceived "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[a("img",{attrs:{src:s(296),alt:""}})]),t._v(" "),a("p",[t._v("The lifecycle support methods are used to intercept AsTeRICS events concerning the component’s lifecycle. In principle, a component can be any of the following:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("READY,")])]),t._v(" "),a("li",[a("p",[t._v("ACTIVE,")])]),t._v(" "),a("li",[a("p",[t._v("SUSPENDED and")])]),t._v(" "),a("li",[a("p",[t._v("STOPPED")])])]),t._v(" "),a("p",[t._v("These states and their possible transitions are illustrated in the figure on the right:")]),t._v(" "),a("p",[t._v("The rest of the methods are used for supporting the component operations, namely accessing the input/output ports of the component, as well as getting/setting its supported properties.")]),t._v(" "),a("h2",{attrs:{id:"threading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#threading"}},[t._v("#")]),t._v(" Threading")]),t._v(" "),a("p",[t._v("For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"writing-plugins-using-swing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-plugins-using-swing"}},[t._v("#")]),t._v(" Writing plugins using Swing")]),t._v(" "),a("p",[t._v("If a plugin provides a Swing GUI it should only use the asynchronous method")]),t._v(" "),a("p",[a("code",[t._v("SwingUtilities.invokeLater(…)")])]),t._v(" "),a("p",[t._v("(and not the synchronous one) to perform the GUI updates. This is to prevent a potential thread deadlock if an action was originally triggered by a Swing GUI event e.g. by a button click in the ARE GUI. For detailed information about the ARE threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"long-lasting-method-calls"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#long-lasting-method-calls"}},[t._v("#")]),t._v(" Long lasting method calls")]),t._v(" "),a("p",[t._v("If a method call performs a long lasting task and there is no need to await the termination of it, the task should be handed over to a worker thread (see 5.9) to not block ModelExecutor thread. For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"sensor-callbacks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sensor-callbacks"}},[t._v("#")]),t._v(" Sensor callbacks")]),t._v(" "),a("p",[t._v("In case you write a plugin that uses a separate thread to generate data (e.g. FrameGrabber, Timer,…) you should explicitly use the method")]),t._v(" "),a("p",[a("code",[t._v("AstericsModelExecutionThreadPool.instance.execute(…)")])]),t._v(" "),a("p",[t._v("This is to ensure that corresponding data will be delivered within the same task execution. For detailed information about the threading concept see 9. Below is an example of the FacetrackerLK plugin in the callback method for new arriving coordinates:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("newCoordinates_callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsModelExecutionThreadPool")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("execute")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Runnable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n opNoseX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opNoseY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"contributing-a-developed-plugin-git-pull-request"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contributing-a-developed-plugin-git-pull-request"}},[t._v("#")]),t._v(" Contributing a developed plugin (git pull request)")]),t._v(" "),a("p",[t._v("The AsTeRICS platform is designed as an open and modular platform. The idea is to make it easy for others to develop assistive plugins any end-user in the world could benefit from. Hence, we would love to get your contribution back to the github repository to be able to ship the new plugin with future releases. For this purpose, please send a pull request.")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://help.github.com/articles/using-pull-requests/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://help.github.com/articles/using-pull-requests/"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{296:function(t,a,s){t.exports=s.p+"assets/img/DeveloperManual_html_17298a48a6d250c5.fbefb96e.png"},946:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"plugin-advanced"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#plugin-advanced"}},[t._v("#")]),t._v(" Plugin Advanced")]),t._v(" "),a("h2",{attrs:{id:"writing-asterics-plugin-code"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-asterics-plugin-code"}},[t._v("#")]),t._v(" Writing AsTeRICS Plugin Code")]),t._v(" "),a("h3",{attrs:{id:"are-coding-guidelines"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#are-coding-guidelines"}},[t._v("#")]),t._v(" ARE Coding Guidelines")]),t._v(" "),a("p",[t._v("Coding guidelines are necessary to allow new developers to quickly find their through the code of the ARE. They are created in such a way to provide means for developers to understand code of each other but they also make sure that non-technical users can find their way through a model in ACS.")]),t._v(" "),a("p",[t._v("If you use Eclipse as IDE, "),a("strong",[t._v("you can import predefined clean up, code template and formatting settings")]),t._v(", which cover some of the coding guidelines (see 4.1.1).")]),t._v(" "),a("p",[t._v("The basic coding guidelines are:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Plugins, ports and properties should be named intuitively in the bundle descriptor. Only if necessary, the corresponding variables in the plugin code should be named differently. However they should adhere to the naming conventions stated in section 4.1.3 and different names should be commented in the code sections which translate the name into the variable (getInputPort(), getRuntimeProperty() …)")])]),t._v(" "),a("li",[a("p",[t._v("Variable names should always use the Java naming conventions")])]),t._v(" "),a("li",[a("p",[t._v("Every method should be preceded by a JavaDoc compatible header in order to allow new developer to grasp what is going on in it")])]),t._v(" "),a("li",[a("p",[t._v("Where reasonable code comments should be added to improve understanding of code internals")])]),t._v(" "),a("li",[a("p",[t._v("Code should be indented by four spaces per indentations stage. Indentations should be done using space and "),a("strong",[t._v("not tabs")]),t._v(". Tabs should be converted to spaces.")])]),t._v(" "),a("li",[a("p",[t._v("Opening parentheses should be placed in the same line")])])]),t._v(" "),a("h2",{attrs:{id:"eclipse-code-style-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#eclipse-code-style-settings"}},[t._v("#")]),t._v(" Eclipse Code Style Settings")]),t._v(" "),a("p",[t._v("If you use Eclipse as IDE, you can import predefined clean up, code template and formatting settings. The files are located in the AsTeRICS/ARE folder of the checkout github repository.")]),t._v(" "),a("ul",[a("li",[a("p",[a("strong",[t._v("Eclipse - Code Style - Clean Up.xml")]),t._v(": Definitions for cleanup, e.g. remove unused imports and unused variables")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("Eclipse - Code Style - Code Templates.xml")]),t._v(": Contains default file header including license information (see 4.1.5) and default class comment (see 4.1.6).")])]),t._v(" "),a("li",[a("p",[a("strong",[t._v("Eclipse - Code Style - Formatter.xml")]),t._v(": Contains code formatting definitions e.g. 4 spaces instead of tabs.")])])]),t._v(" "),a("p",[t._v("You can import the settings by")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("selecting the project folder and clicking right mouse button")])]),t._v(" "),a("li",[a("p",[t._v("opening ‘Properties’ entry of popup menu")])]),t._v(" "),a("li",[a("p",[t._v("Opening ‘Java Code Style’/Clean Up|Code Templates|Formatter respectively")])])]),t._v(" "),a("h2",{attrs:{id:"port-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#port-naming-conventions"}},[t._v("#")]),t._v(" Port Naming Conventions")]),t._v(" "),a("p",[t._v("Variables of port instances should be named with a prefix indicating what kind of port it is. The rest of the port name should indicate the port’s use and adhere to the standard Java variable naming conventions. The available prefixes are:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("ip: indicates that the port is an instance of IRuntimeInputPort")])]),t._v(" "),a("li",[a("p",[t._v("op: indicates that the port is an instance of IRuntimeOutputPort")])]),t._v(" "),a("li",[a("p",[t._v("elp: indicates that the port is an instance of IRuntimeEventListenerPort")])]),t._v(" "),a("li",[a("p",[t._v("etp: indicates that the port is an instance of IRuntimeEventTriggererPort")])])]),t._v(" "),a("p",[t._v("A variable holding an event listener port could therefore be named "),a("em",[t._v("elpKeyPressed")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"property-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-naming-conventions"}},[t._v("#")]),t._v(" Property Naming Conventions")]),t._v(" "),a("p",[t._v("Plugin properties should be directly mapped to a variable in the plugin code. The variable’s should be prepended with the prefix "),a("em",[t._v("prop")]),t._v(" and adhere to standard Java naming conventions. Thus a property could be named "),a("em",[t._v("InputGainValue")]),t._v(" and the corresponding variable should be named "),a("em",[t._v("propInputGainValue")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"bundle-descriptor-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundle-descriptor-naming-conventions"}},[t._v("#")]),t._v(" Bundle Descriptor Naming Conventions")]),t._v(" "),a("p",[t._v("The bundle descriptor should serve as an abstraction layer between the user who creates models in the ACS and the developer. Thus the names for plugins, ports and properties in the bundle descriptor should be as intuitive as possible. Names in the bundle descriptor should not include prefixes because the added information is also conveyed in the presentation of plugins in the ACS.")]),t._v(" "),a("p",[t._v("The bundle descriptor can translate intuitive names (e.g. input.switch) to the canonical names of plugins (e.g. GpioInputInstance) allowing coexistence of a user and a developer language. This method of name translation can be applied for plugin names, port names and property names.")]),t._v(" "),a("h2",{attrs:{id:"asterics-are-service-and-plugin-source-file-header"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#asterics-are-service-and-plugin-source-file-header"}},[t._v("#")]),t._v(" AsTeRICS ARE, service and plugin source file header")]),t._v(" "),a("p",[t._v("Each source file of ARE, of ARE services, ARE plugins and tools which will be released as open source should have the following header:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/*\n * AsTeRICS - Assistive Technology Rapid Integration and Construction Set\n * \n * \n * d8888 88888888888 8888888b. 8888888 .d8888b. .d8888b. \n * d88888 888 888 Y88b 888 d88P Y88b d88P Y88b\n * d88P888 888 888 888 888 888 888 Y88b. \n * d88P 888 .d8888b 888 .d88b. 888 d88P 888 888 "Y888b. \n * d88P 888 88K 888 d8P Y8b 8888888P" 888 888 "Y88b.\n * d88P 888 "Y8888b. 888 88888888 888 T88b 888 888 888 "888\n * d8888888888 X88 888 Y8b. 888 T88b 888 Y88b d88P Y88b d88P\n * d88P 888 88888P\' 888 "Y8888 888 T88b 8888888 "Y8888P" "Y8888P" \n *\n *\n * homepage: http://www.asterics.org \n *\n * This project has been partly funded by the European Commission, \n * Grant Agreement Number 247730\n * \n * \n * Dual License: MIT or GPL v3.0 with "CLASSPATH" exception\n * (please refer to the folder LICENSE)\n * \n */')]),t._v("\n")])])]),a("h2",{attrs:{id:"javadoc-compatible-comments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javadoc-compatible-comments"}},[t._v("#")]),t._v(" JavaDoc compatible comments")]),t._v(" "),a("p",[t._v("JavaDoc compatible comments should be used to indicate the author of a source file, and to describe the purpose of a function/method/class and the respective parameters and return values.")]),t._v(" "),a("p",[t._v("Example for a source file header info:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Bardisplayinstance.java\n * Purpose of this module:\n * Implements the Bardisplay actuator plugin\n * \n * @author Chris Veigl [veigl@technikum-wien.at]\n * Date: Mar 7, 2011\n */")]),t._v("\n")])])]),a("p",[t._v("Example for a method of a class:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n* Returns the value of the given property\n* @param propertyName the name of the property\n* @return the property value\n*/")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("h2",{attrs:{id:"implementing-asterics-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementing-asterics-components"}},[t._v("#")]),t._v(" Implementing AsTeRICS components")]),t._v(" "),a("p",[t._v("This section describes the basic steps required for implementing an AsTeRICS component including a brief introduction to OSGi. To illustrate the implementation steps, we take a walk-through with the implementation of a simple processor component.")]),t._v(" "),a("p",[t._v("The AsTeRICS schemata of the XML descriptors include two concepts: the "),a("em",[t._v("bundle descriptors")]),t._v(" and the "),a("em",[t._v("deployment descriptors")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"the-bundle-descriptors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-bundle-descriptors"}},[t._v("#")]),t._v(" The Bundle Descriptors")]),t._v(" "),a("p",[t._v("Bundle descriptors are used to describe the content of an individual bundle (typically encapsulating one or more components). As such, they contain information about the included "),a("em",[t._v("components")]),t._v(", their "),a("em",[t._v("ports")]),t._v(", their customizable "),a("em",[t._v("properties")]),t._v(" and optionally their GUI.")]),t._v(" "),a("p",[t._v("The following shows a bundle descriptor of a simple processor-plugin (subtype for the ACS components menu is “Basic Math”). The plugin provides an averaging function for n values (property “buffer-size”) and has one input port and one output port for integer values:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentTypes")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bundle_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentType")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.averager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("canonical_name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("eu.asterics.component.processor.averager.AveragerComponent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("subtype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Basic Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("processor"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Linked list-based averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Input port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("multiplicity")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("one-to-one"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mustBeConnected")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("true"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("out_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Output port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("buffer-size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("50"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("The size of the averager's buffer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-deployment-descriptor"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-deployment-descriptor"}},[t._v("#")]),t._v(" The Deployment Descriptor")]),t._v(" "),a("p",[t._v("Deployment descriptors instruct the ARE of the desired application deployment structure. The deployment descriptor is typically composed in the AsTeRICS Configuration Suite (ACS) but can also be written with a text editor (as the bundle descriptor). Basically the deployment descriptor contains several component descriptions (copied from the corresponding bundle descriptors), actual property values and the channel connection between input- and output ports of the components.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The "),a("em",[t._v("type_id")]),t._v(" argument of the "),a("em",[t._v("component")]),t._v(" element in the deployment descriptor must match the "),a("em",[t._v("id")]),t._v(" argument of the "),a("em",[t._v("componentType")]),t._v(" element on the bundle descriptor. This is how the ARE detects the referred plugin type in the deployment model.")])]),t._v(" "),a("p",[t._v("The following demo deployment descriptor describes a simple model containing two plugins and one channel:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("model")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("deployment_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("components")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Source of two signal cahnnels "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Signal Target"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channels")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("channel.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Connects SignalSource.1 (outport 1) \n to SignalTarget.1 (in_x)"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("source")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-manifest-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-manifest-file"}},[t._v("#")]),t._v(" The Manifest file")]),t._v(" "),a("p",[t._v("The Manifest file tells the bundle name and other informations like import packages and .dlls to the OSGi. A typical Manifest looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-processors.averager\nBundle-SymbolicName: eu.asterics.component.processor.averager\nBundle-Version: 0.1.0\nDynamicImport-Package: *\n\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The empty line at the end of the Manifest file. It seems that OSGi needs that empty line in order to work properly.")])]),t._v(" "),a("h2",{attrs:{id:"structure-of-osgi-bundles-containing-are-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-osgi-bundles-containing-are-components"}},[t._v("#")]),t._v(" Structure of OSGi bundles containing ARE components")]),t._v(" "),a("p",[t._v("As a common OSGi bundle, an AsTeRICS component must be packaged in a JAR file, containing the class files (object code) and the Manifest file. In addition to these, the AsTeRICS middleware expects the "),a("em",[t._v("bundle descriptor")]),t._v(". At this point, it should be noted that it is possible to include "),a("em",[t._v("multiple")]),t._v(" AsTeRICS components in a single OSGi bundle, as long as the bundle descriptor describes all of them.")]),t._v(" "),a("p",[t._v("Overall, the file structure in a typical AsTeRICS bundle looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("/\n+- eu/\n +- asterics/\n +- component/\n +- ...\n+- lib/\n +- native/\n +- my_library.dll\n+- META-INF/\n +- MANIFEST.MF\n+- bundle_descriptor.xml\n")])])]),a("p",[t._v("The Java object code is included in the corresponding folders representing the package structure (e.g., “/eu/asterics/component/…” etc). Optionally, if libraries are needed - native or not-, then they are included in the “/lib” folder. The Manifest is included in the “META-INF” folder as per the standard Java/OSGi practice. Finally, the AsTeRICS bundle descriptor is included directly in the root of the JAR file (i.e. “/”).")]),t._v(" "),a("h2",{attrs:{id:"component-lifecyle"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#component-lifecyle"}},[t._v("#")]),t._v(" Component lifecyle")]),t._v(" "),a("p",[t._v("An ARE component implementation needs to realise the actual component with its lifecycle (i.e., ways to access its ports and properties, and methods realizing its lifecycle). This is illustrated in the following code:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Lifecycle support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("pause")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resume")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Component support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeOutputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOutputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventListenerPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventListenerPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventTriggererPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventTriggererPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" newValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" syncedValuesReceived "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[a("img",{attrs:{src:s(296),alt:""}})]),t._v(" "),a("p",[t._v("The lifecycle support methods are used to intercept AsTeRICS events concerning the component’s lifecycle. In principle, a component can be any of the following:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("READY,")])]),t._v(" "),a("li",[a("p",[t._v("ACTIVE,")])]),t._v(" "),a("li",[a("p",[t._v("SUSPENDED and")])]),t._v(" "),a("li",[a("p",[t._v("STOPPED")])])]),t._v(" "),a("p",[t._v("These states and their possible transitions are illustrated in the figure on the right:")]),t._v(" "),a("p",[t._v("The rest of the methods are used for supporting the component operations, namely accessing the input/output ports of the component, as well as getting/setting its supported properties.")]),t._v(" "),a("h2",{attrs:{id:"threading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#threading"}},[t._v("#")]),t._v(" Threading")]),t._v(" "),a("p",[t._v("For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"writing-plugins-using-swing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-plugins-using-swing"}},[t._v("#")]),t._v(" Writing plugins using Swing")]),t._v(" "),a("p",[t._v("If a plugin provides a Swing GUI it should only use the asynchronous method")]),t._v(" "),a("p",[a("code",[t._v("SwingUtilities.invokeLater(…)")])]),t._v(" "),a("p",[t._v("(and not the synchronous one) to perform the GUI updates. This is to prevent a potential thread deadlock if an action was originally triggered by a Swing GUI event e.g. by a button click in the ARE GUI. For detailed information about the ARE threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"long-lasting-method-calls"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#long-lasting-method-calls"}},[t._v("#")]),t._v(" Long lasting method calls")]),t._v(" "),a("p",[t._v("If a method call performs a long lasting task and there is no need to await the termination of it, the task should be handed over to a worker thread (see 5.9) to not block ModelExecutor thread. For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"sensor-callbacks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sensor-callbacks"}},[t._v("#")]),t._v(" Sensor callbacks")]),t._v(" "),a("p",[t._v("In case you write a plugin that uses a separate thread to generate data (e.g. FrameGrabber, Timer,…) you should explicitly use the method")]),t._v(" "),a("p",[a("code",[t._v("AstericsModelExecutionThreadPool.instance.execute(…)")])]),t._v(" "),a("p",[t._v("This is to ensure that corresponding data will be delivered within the same task execution. For detailed information about the threading concept see 9. Below is an example of the FacetrackerLK plugin in the callback method for new arriving coordinates:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("newCoordinates_callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsModelExecutionThreadPool")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("execute")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Runnable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n opNoseX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opNoseY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"contributing-a-developed-plugin-git-pull-request"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contributing-a-developed-plugin-git-pull-request"}},[t._v("#")]),t._v(" Contributing a developed plugin (git pull request)")]),t._v(" "),a("p",[t._v("The AsTeRICS platform is designed as an open and modular platform. The idea is to make it easy for others to develop assistive plugins any end-user in the world could benefit from. Hence, we would love to get your contribution back to the github repository to be able to ship the new plugin with future releases. For this purpose, please send a pull request.")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://help.github.com/articles/using-pull-requests/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://help.github.com/articles/using-pull-requests/"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/111.aa000995.js b/assets/js/111.80188e5b.js similarity index 99% rename from assets/js/111.aa000995.js rename to assets/js/111.80188e5b.js index 18f7861fbb..33ef18badd 100644 --- a/assets/js/111.aa000995.js +++ b/assets/js/111.80188e5b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{422:function(t,s,a){t.exports=a.p+"assets/img/Websocket-echo-connection.441c16d0.jpg"},960:function(t,s,a){"use strict";a.r(s);var n=a(2),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"websocket-tutorial"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#websocket-tutorial"}},[t._v("#")]),t._v(" Websocket Tutorial")]),t._v(" "),s("p",[t._v("In this tutorial you will learn how to use the AsTeRICS websocket functionality with Javascript from within a web client.")]),t._v(" "),s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("A web socket is defined as a two-way communication between the servers and the clients, which mean both the parties communicate and exchange data at the same time. The Websocket protocol is specified in the "),s("a",{attrs:{href:"https://tools.ietf.org/html/rfc6455",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC6455"),s("OutboundLink")],1),t._v(" and the corresponding client-side "),s("a",{attrs:{href:"https://www.w3.org/TR/websockets/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Websocket API"),s("OutboundLink")],1),t._v(" is defined by the W3C.\nFor more information about web sockets see the following tutorials")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mozilla - web sockets tutorial"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://www.tutorialspoint.com/websockets/websockets_overview.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tutorialspoint - web sockets tutorial"),s("OutboundLink")],1)])]),t._v(" "),s("p",[t._v("The AsTeRICS Runtime Environment (ARE) provides a websocket at "),s("code",[t._v("ws://localhost:8082/ws/astericsData")]),t._v(" which can be used to send data from a running AsTeRICS model to a web client or vice versa.")]),t._v(" "),s("h2",{attrs:{id:"example-1-web-socket-echo"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-1-web-socket-echo"}},[t._v("#")]),t._v(" Example 1 - Web socket echo")]),t._v(" "),s("p",[t._v("Sends a text message to the ARE model and echoes the sent message back to the web client.")]),t._v(" "),s("h3",{attrs:{id:"prerequisites"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed and ARE running"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&processors/WebSocket.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebSocket plugin"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"create-model-with-websocket-plugin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-model-with-websocket-plugin"}},[t._v("#")]),t._v(" Create model with WebSocket plugin")]),t._v(" "),s("ol",[s("li",[t._v("Open the "),s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/?areBaseURI=http://localhost:8081",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebACS"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("Add a WebSocket plugin (Components tab, Processors/Web/WebSocket)")]),t._v(" "),s("li",[t._v("Connect the output port "),s("code",[t._v("OutA")]),t._v(" to its input port "),s("code",[t._v("InA")]),t._v(": This sends messages received from a websocket client back to the client.")]),t._v(" "),s("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),s("li",[t._v("Deploy model to ARE by clicking "),s("code",[t._v("Connect to ARE")]),t._v(" and "),s("code",[t._v("Upload Model")])]),t._v(" "),s("li",[t._v("Start model by clicking "),s("code",[t._v("Start Model")])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(422),alt:"Websocket plugin with output port OutA connected to input port InA"}})]),t._v(" "),s("h3",{attrs:{id:"create-web-page-with-web-socket-client"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-web-page-with-web-socket-client"}},[t._v("#")]),t._v(" Create web page with web socket client")]),t._v(" "),s("p",[t._v("Using a text editor, copy the following code and save it as websocket.html somewhere on your hard drive. Then simply open it in a browser. The page will automatically connect, send a message, display the response, and close the connection.")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token doctype"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("WebSocket Test"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("language")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("javascript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Set URI of AsTERICS websocket.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" wsUri "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ws://localhost:8082/ws/astericsData"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n This method is called on page load.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n output "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"output"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("testWebSocket")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Opens a connection to the specified web socket and defines callback functions.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("testWebSocket")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Instantiates and opens web socket. ")]),t._v("\n websocket "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("WebSocket")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wsUri"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onopen")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onOpen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onclose")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onClose")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onmessage")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onMessage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onerror")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onError")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called as soon as the web socket was opened successfully.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onOpen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CONNECTED"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSend")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"WebSocket rocks"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called as soon as the web socket was closed.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onClose")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DISCONNECTED"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called in case of a received message from the web socket server.\n */")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onMessage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'RESPONSE: '")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("close")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called in case of an error during connect or send.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onError")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ERROR: '")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSend")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("message")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SENT: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Actually sends the message to the web socket.")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("message")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" pre "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createElement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"p"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n pre"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("style"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wordWrap "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"break-word"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n pre"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("innerHTML "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("appendChild")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pre"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Register function init to be called on page load.")]),t._v("\n window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"load"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" init"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n ")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("WebSocket Test"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"resulting-output"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resulting-output"}},[t._v("#")]),t._v(" Resulting output")]),t._v(" "),s("p",[t._v("In case of success you should see something like this:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("WebSocket Test\n\nCONNECTED\n\nSENT: WebSocket rocks\n\nRESPONSE: WebSocket rocks\n\nDISCONNECTED\n")])])]),s("p",[t._v("In case of an error check if the ARE is running and the model with the WebSocket plugin is deployed and started.")]),t._v(" "),s("h2",{attrs:{id:"example-2-web-socket-demo-with-signal-data-live-chart"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-2-web-socket-demo-with-signal-data-live-chart"}},[t._v("#")]),t._v(" Example 2 - Web socket demo with signal data live chart")]),t._v(" "),s("p",[t._v("To try a more advanced web socket demo receiving signal data and visualizing it, please visit this "),s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/index.html#submenuSolutionDemos:asterics-networkio-websocket",target:"_blank",rel:"noopener noreferrer"}},[t._v("web socket demo"),s("OutboundLink")],1),t._v(" to see how it works.\nYou can also clone and edit the corresponding "),s("a",{attrs:{href:"https://github.com/asterics/asterics-networkio-websocket",target:"_blank",rel:"noopener noreferrer"}},[t._v("git repository"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"references"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&processors/WebSocket.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebSocket plugin"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mozilla - web sockets tutorial"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://www.tutorialspoint.com/websockets/websockets_overview.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tutorialspoint - web sockets tutorial"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://tools.ietf.org/html/rfc6455",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC6455"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://www.w3.org/TR/websockets/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Websocket API"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{422:function(t,s,a){t.exports=a.p+"assets/img/Websocket-echo-connection.441c16d0.jpg"},961:function(t,s,a){"use strict";a.r(s);var n=a(2),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"websocket-tutorial"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#websocket-tutorial"}},[t._v("#")]),t._v(" Websocket Tutorial")]),t._v(" "),s("p",[t._v("In this tutorial you will learn how to use the AsTeRICS websocket functionality with Javascript from within a web client.")]),t._v(" "),s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("A web socket is defined as a two-way communication between the servers and the clients, which mean both the parties communicate and exchange data at the same time. The Websocket protocol is specified in the "),s("a",{attrs:{href:"https://tools.ietf.org/html/rfc6455",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC6455"),s("OutboundLink")],1),t._v(" and the corresponding client-side "),s("a",{attrs:{href:"https://www.w3.org/TR/websockets/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Websocket API"),s("OutboundLink")],1),t._v(" is defined by the W3C.\nFor more information about web sockets see the following tutorials")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mozilla - web sockets tutorial"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://www.tutorialspoint.com/websockets/websockets_overview.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tutorialspoint - web sockets tutorial"),s("OutboundLink")],1)])]),t._v(" "),s("p",[t._v("The AsTeRICS Runtime Environment (ARE) provides a websocket at "),s("code",[t._v("ws://localhost:8082/ws/astericsData")]),t._v(" which can be used to send data from a running AsTeRICS model to a web client or vice versa.")]),t._v(" "),s("h2",{attrs:{id:"example-1-web-socket-echo"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-1-web-socket-echo"}},[t._v("#")]),t._v(" Example 1 - Web socket echo")]),t._v(" "),s("p",[t._v("Sends a text message to the ARE model and echoes the sent message back to the web client.")]),t._v(" "),s("h3",{attrs:{id:"prerequisites"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed and ARE running"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&processors/WebSocket.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebSocket plugin"),s("OutboundLink")],1)])]),t._v(" "),s("h3",{attrs:{id:"create-model-with-websocket-plugin"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-model-with-websocket-plugin"}},[t._v("#")]),t._v(" Create model with WebSocket plugin")]),t._v(" "),s("ol",[s("li",[t._v("Open the "),s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/?areBaseURI=http://localhost:8081",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebACS"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("Add a WebSocket plugin (Components tab, Processors/Web/WebSocket)")]),t._v(" "),s("li",[t._v("Connect the output port "),s("code",[t._v("OutA")]),t._v(" to its input port "),s("code",[t._v("InA")]),t._v(": This sends messages received from a websocket client back to the client.")]),t._v(" "),s("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),s("li",[t._v("Deploy model to ARE by clicking "),s("code",[t._v("Connect to ARE")]),t._v(" and "),s("code",[t._v("Upload Model")])]),t._v(" "),s("li",[t._v("Start model by clicking "),s("code",[t._v("Start Model")])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(422),alt:"Websocket plugin with output port OutA connected to input port InA"}})]),t._v(" "),s("h3",{attrs:{id:"create-web-page-with-web-socket-client"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-web-page-with-web-socket-client"}},[t._v("#")]),t._v(" Create web page with web socket client")]),t._v(" "),s("p",[t._v("Using a text editor, copy the following code and save it as websocket.html somewhere on your hard drive. Then simply open it in a browser. The page will automatically connect, send a message, display the response, and close the connection.")]),t._v(" "),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[s("span",{pre:!0,attrs:{class:"token doctype"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("WebSocket Test"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("language")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("javascript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Set URI of AsTERICS websocket.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" wsUri "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ws://localhost:8082/ws/astericsData"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n This method is called on page load.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n output "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"output"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("testWebSocket")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Opens a connection to the specified web socket and defines callback functions.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("testWebSocket")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Instantiates and opens web socket. ")]),t._v("\n websocket "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("WebSocket")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wsUri"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onopen")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onOpen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onclose")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onClose")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onmessage")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onMessage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("onerror")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onError")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called as soon as the web socket was opened successfully.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onOpen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CONNECTED"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSend")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"WebSocket rocks"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called as soon as the web socket was closed.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onClose")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DISCONNECTED"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called in case of a received message from the web socket server.\n */")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onMessage")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'RESPONSE: '")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("close")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n Called in case of an error during connect or send.\n */")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("onError")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("evt")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ERROR: '")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" evt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("doSend")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("message")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SENT: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Actually sends the message to the web socket.")]),t._v("\n websocket"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("send")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeToScreen")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("message")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" pre "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("createElement")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"p"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n pre"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("style"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wordWrap "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"break-word"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n pre"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("innerHTML "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" message"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("appendChild")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pre"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Register function init to be called on page load.")]),t._v("\n window"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"load"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" init"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n ")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("WebSocket Test"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"resulting-output"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resulting-output"}},[t._v("#")]),t._v(" Resulting output")]),t._v(" "),s("p",[t._v("In case of success you should see something like this:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("WebSocket Test\n\nCONNECTED\n\nSENT: WebSocket rocks\n\nRESPONSE: WebSocket rocks\n\nDISCONNECTED\n")])])]),s("p",[t._v("In case of an error check if the ARE is running and the model with the WebSocket plugin is deployed and started.")]),t._v(" "),s("h2",{attrs:{id:"example-2-web-socket-demo-with-signal-data-live-chart"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-2-web-socket-demo-with-signal-data-live-chart"}},[t._v("#")]),t._v(" Example 2 - Web socket demo with signal data live chart")]),t._v(" "),s("p",[t._v("To try a more advanced web socket demo receiving signal data and visualizing it, please visit this "),s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/index.html#submenuSolutionDemos:asterics-networkio-websocket",target:"_blank",rel:"noopener noreferrer"}},[t._v("web socket demo"),s("OutboundLink")],1),t._v(" to see how it works.\nYou can also clone and edit the corresponding "),s("a",{attrs:{href:"https://github.com/asterics/asterics-networkio-websocket",target:"_blank",rel:"noopener noreferrer"}},[t._v("git repository"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"references"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&processors/WebSocket.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebSocket plugin"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mozilla - web sockets tutorial"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://www.tutorialspoint.com/websockets/websockets_overview.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Tutorialspoint - web sockets tutorial"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://tools.ietf.org/html/rfc6455",target:"_blank",rel:"noopener noreferrer"}},[t._v("RFC6455"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://www.w3.org/TR/websockets/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Websocket API"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/112.6cb9c5a9.js b/assets/js/112.4dce625e.js similarity index 98% rename from assets/js/112.6cb9c5a9.js rename to assets/js/112.4dce625e.js index 3c6a988314..66247578fe 100644 --- a/assets/js/112.6cb9c5a9.js +++ b/assets/js/112.4dce625e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{423:function(e,t,r){e.exports=r.p+"assets/img/grid_default_en.e1d52b18.jpg"},962:function(e,t,r){"use strict";r.r(t);var i=r(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"dynamic-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-grid"}},[e._v("#")]),e._v(" Dynamic grid")]),e._v(" "),t("p",[e._v("This chapter is about the technical background of the dynamic grid system which visualizes grids and grid elements in AsTeRICS Grid.")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html#general"}},[e._v("General")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html#gridlist-and-gridjs"}},[e._v("GridList and grid.js")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html#repositioning-and-resizing-of-elements"}},[e._v("Repositioning and resizing of elements")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"general"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[e._v("#")]),e._v(" General")]),e._v(" "),t("p",[e._v("When opening AsTeRICS Grid in the main view the latest used grid is shown:")]),e._v(" "),t("p",[t("img",{attrs:{src:r(423),alt:"default grid"}})]),e._v(" "),t("p",[e._v("From a technical perspective this grid is a unordered list ("),t("code",[e._v("
    ")]),e._v(") where each list element ("),t("code",[e._v("
  • ")]),e._v(") represents a grid element. HTML representations for these grid elements are generated in "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/templates.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("templates.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"gridlist-and-grid-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gridlist-and-grid-js"}},[e._v("#")]),e._v(" GridList and grid.js")]),e._v(" "),t("p",[e._v("Positioning of the grid elements is done by the "),t("a",{attrs:{href:"https://github.com/klues/grid",target:"_blank",rel:"noopener noreferrer"}},[e._v("GridList library"),t("OutboundLink")],1),e._v(". It is initialized and used in the file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/grid.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("grid.js"),t("OutboundLink")],1),e._v(". All relevant code for functionalities like repositioning or resizing can be found there. Styling of the grid and it’s elements is done by the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/css/gridlist.css",target:"_blank",rel:"noopener noreferrer"}},[e._v("gridlist.css"),t("OutboundLink")],1),e._v(" stylesheet.")]),e._v(" "),t("p",[e._v("For undo and redo functionalities of the edit view "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/grid.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("grid.js"),t("OutboundLink")],1),e._v(" uses the functions of the file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/service/data/undoService.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("undoService.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"repositioning-and-resizing-of-elements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repositioning-and-resizing-of-elements"}},[e._v("#")]),e._v(" Repositioning and resizing of elements")]),e._v(" "),t("p",[e._v("Repositioning of elements is already supported by default by the "),t("a",{attrs:{href:"https://github.com/klues/grid",target:"_blank",rel:"noopener noreferrer"}},[e._v("GridList library"),t("OutboundLink")],1),e._v(". For resizing of elements the "),t("a",{attrs:{href:"https://jqueryui.com/resizable/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Resizable"),t("OutboundLink")],1),e._v(" functionality of jQueryUI is used. The code for connecting jQueryUI Resizable with GridList can be found in the function "),t("code",[e._v("getResizeOptions()")]),e._v(" in the "),t("code",[e._v("resize")]),e._v(" handler about at "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/grid.js#L151",target:"_blank",rel:"noopener noreferrer"}},[e._v("grid.js:151"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/02_tools.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{423:function(e,t,r){e.exports=r.p+"assets/img/grid_default_en.e1d52b18.jpg"},964:function(e,t,r){"use strict";r.r(t);var i=r(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"dynamic-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-grid"}},[e._v("#")]),e._v(" Dynamic grid")]),e._v(" "),t("p",[e._v("This chapter is about the technical background of the dynamic grid system which visualizes grids and grid elements in AsTeRICS Grid.")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html#general"}},[e._v("General")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html#gridlist-and-gridjs"}},[e._v("GridList and grid.js")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html#repositioning-and-resizing-of-elements"}},[e._v("Repositioning and resizing of elements")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"general"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[e._v("#")]),e._v(" General")]),e._v(" "),t("p",[e._v("When opening AsTeRICS Grid in the main view the latest used grid is shown:")]),e._v(" "),t("p",[t("img",{attrs:{src:r(423),alt:"default grid"}})]),e._v(" "),t("p",[e._v("From a technical perspective this grid is a unordered list ("),t("code",[e._v("
      ")]),e._v(") where each list element ("),t("code",[e._v("
    • ")]),e._v(") represents a grid element. HTML representations for these grid elements are generated in "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/templates.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("templates.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"gridlist-and-grid-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gridlist-and-grid-js"}},[e._v("#")]),e._v(" GridList and grid.js")]),e._v(" "),t("p",[e._v("Positioning of the grid elements is done by the "),t("a",{attrs:{href:"https://github.com/klues/grid",target:"_blank",rel:"noopener noreferrer"}},[e._v("GridList library"),t("OutboundLink")],1),e._v(". It is initialized and used in the file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/grid.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("grid.js"),t("OutboundLink")],1),e._v(". All relevant code for functionalities like repositioning or resizing can be found there. Styling of the grid and it’s elements is done by the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/css/gridlist.css",target:"_blank",rel:"noopener noreferrer"}},[e._v("gridlist.css"),t("OutboundLink")],1),e._v(" stylesheet.")]),e._v(" "),t("p",[e._v("For undo and redo functionalities of the edit view "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/grid.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("grid.js"),t("OutboundLink")],1),e._v(" uses the functions of the file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/service/data/undoService.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("undoService.js"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"repositioning-and-resizing-of-elements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repositioning-and-resizing-of-elements"}},[e._v("#")]),e._v(" Repositioning and resizing of elements")]),e._v(" "),t("p",[e._v("Repositioning of elements is already supported by default by the "),t("a",{attrs:{href:"https://github.com/klues/grid",target:"_blank",rel:"noopener noreferrer"}},[e._v("GridList library"),t("OutboundLink")],1),e._v(". For resizing of elements the "),t("a",{attrs:{href:"https://jqueryui.com/resizable/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Resizable"),t("OutboundLink")],1),e._v(" functionality of jQueryUI is used. The code for connecting jQueryUI Resizable with GridList can be found in the function "),t("code",[e._v("getResizeOptions()")]),e._v(" in the "),t("code",[e._v("resize")]),e._v(" handler about at "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/grid.js#L151",target:"_blank",rel:"noopener noreferrer"}},[e._v("grid.js:151"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/02_tools.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/113.821c8369.js b/assets/js/113.2687132e.js similarity index 99% rename from assets/js/113.821c8369.js rename to assets/js/113.2687132e.js index c5a68fff53..b45b2034ad 100644 --- a/assets/js/113.821c8369.js +++ b/assets/js/113.2687132e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{424:function(e,t,n){e.exports=n.p+"assets/img/main.a269c26b.png"},963:function(e,t,n){"use strict";n.r(t);var r=n(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"vue-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue-js"}},[e._v("#")]),e._v(" Vue.js")]),e._v(" "),t("p",[e._v("This chapter is about "),t("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue.js"),t("OutboundLink")],1),e._v(", the single-page application framework used for AsTeRICS Grid.")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#general"}},[e._v("General")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#component-structure"}},[e._v("Component structure")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#used-components"}},[e._v("Used components")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"general"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[e._v("#")]),e._v(" General")]),e._v(" "),t("p",[e._v("In AsTeRICS Grid "),t("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue.js"),t("OutboundLink")],1),e._v(" is used in order to manage views and it’s elements in components and to create all kinds of interactivity in the UI. In Vue.js components can be organized in single "),t("code",[e._v(".vue")]),e._v(" files, containing the HTML, Javascript and CSS needed for this component. These are the files and folders that are important regarding the usage of Vue.js:")]),e._v(" "),t("ul",[t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/master/src/vue-components",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/vue-components"),t("OutboundLink")],1)]),e._v(": contains all Vue.js single-file components ("),t("code",[e._v(".vue")]),e._v(" files)")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/index.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("index.html"),t("OutboundLink")],1)]),e._v(": contains the HTML for the main Vue wrapper component consisting of the navigation sidebar and a placeholder for the currently show view")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/mainVue.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/js/vue/mainVue.js"),t("OutboundLink")],1)]),e._v(": Javascript part for the main Vue component in "),t("code",[e._v("index.html")])]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/vuePluginManager.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/js/vue/vuePluginManager.js"),t("OutboundLink")],1)]),e._v(": defines custom Vue directives and filters that can be used globally, e.g. a "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/07_i18n.html#vuejs-filter"}},[e._v("translate filter")]),e._v(".")],1)]),e._v(" "),t("h2",{attrs:{id:"component-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-structure"}},[e._v("#")]),e._v(" Component structure")]),e._v(" "),t("p",[e._v("The main Vue wrapper component is defined in "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/index.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("index.html"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/mainVue.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("mainVue.js"),t("OutboundLink")],1),e._v(". This line in "),t("code",[e._v("index.html")]),e._v(" is a placeholder for the currently shown view of the application:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('\n')])])]),t("p",[e._v("The method "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/mainVue.js",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("MainVue.setViewComponent()")]),t("OutboundLink")],1),e._v(" is used in order to change the currently shown view. This method is primarily used by "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/router.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("router.js"),t("OutboundLink")],1),e._v(" which chooses the correct view based on the current "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Fragment_identifier",target:"_blank",rel:"noopener noreferrer"}},[e._v("URL hash"),t("OutboundLink")],1),e._v(" in the address. For instance "),t("code",[e._v("https://grid.asterics.eu/#grids")]),e._v(" has the hash "),t("code",[e._v("#grids")]),e._v(" and therefore will render the "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#manage-grids-view"}},[e._v("manage grids")]),e._v(" component which is defined in file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/vue-components/views/allGridsView.vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("allGridsView.vue"),t("OutboundLink")],1),e._v(".")],1),e._v(" "),t("p",[e._v("Figure 1 highlights the Vue.js components that are used for the main view:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(424),alt:""}}),e._v(" "),t("em",[e._v("Fig. 1: Vue component structure of the main view, red part is replaced depending on the current navigation")])]),e._v(" "),t("h2",{attrs:{id:"used-components"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#used-components"}},[e._v("#")]),e._v(" Used components")]),e._v(" "),t("p",[e._v("The used Vue components can be found in the folder "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/master/src/vue-components",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/vue-components"),t("OutboundLink")],1),e._v(" which contains the following folders:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("components")]),e._v(": generic components that can be used in various places across the application:\n"),t("ul",[t("li",[t("strong",[e._v("comparisonComponent.vue")]),e._v(": accordion component showing a comparison between online and offline users (information only)")]),e._v(" "),t("li",[t("strong",[e._v("headerIcon.vue")]),e._v(": component used in the header of different views which shows a hamburger menu and the AsTeRICS Grid logo")])])]),e._v(" "),t("li",[t("strong",[e._v("modals")]),e._v(": contains all kinds of modals (popup dialogs):\n"),t("ul",[t("li",[t("strong",[e._v("addMultipleModal.vue")]),e._v(": modal for importing multiple new grid elements at once, used in "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#edit-view"}},[e._v("edit view")])],1),e._v(" "),t("li",[t("strong",[e._v("editActionsModal.vue")]),e._v(": action edit modal for a grid element, see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/05_actions.html#edit-actions-modal"}},[e._v("Actions")]),e._v(" chapter in user documentation. The file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/vue-components/modals/editActionsSub/editAREAction.vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("editAREAction.vue"),t("OutboundLink")],1),e._v(" is a sub-component of this modal containing the configuration of an "),t("RouterLink",{attrs:{to:"/develop/documentation_user/05_actions.html#asterics-action"}},[e._v("AsTeRICS action")]),e._v(".")],1),e._v(" "),t("li",[t("strong",[e._v("editGridModal.vue")]),e._v(": edit modal for a grid element (label and image), see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/03_appearance_layout.html#edit-modal"}},[e._v("Grid appearance and layout")]),e._v(" in user documentation")],1),e._v(" "),t("li",[t("strong",[e._v("importDictionaryModal.vue")]),e._v(": modal for importing new words to a dictionary, see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/07_dictionaries.html#add-words"}},[e._v("Dictionaries")]),e._v(" in user documentation")],1),e._v(" "),t("li",[t("strong",[e._v("inputOptionsModal.vue")]),e._v(": modal for setting input options like e.g. scanning, see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/04_input_options.html"}},[e._v("Input Options")]),e._v(" in user documentation")],1)])]),e._v(" "),t("li",[t("strong",[e._v("views")]),e._v(": contains different views which are rendered into the component placeholder described in "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#component-structure"}},[e._v("component structure")]),e._v(":\n"),t("ul",[t("li",[t("strong",[e._v("aboutView.vue")]),e._v(": view containing general information about AsTeRICS Grid")]),e._v(" "),t("li",[t("strong",[e._v("addOfflineView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/06_users.html#offline-users"}},[e._v("Offline users")])],1),e._v(" "),t("li",[t("strong",[e._v("allGridsView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#manage-grids-view"}},[e._v("Manage grids view")])],1),e._v(" "),t("li",[t("strong",[e._v("dictionariesView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#manage-dictionaries-view"}},[e._v("Manage dictionaries view")])],1),e._v(" "),t("li",[t("strong",[e._v("gridEditView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#edit-view"}},[e._v("Edit view")])],1),e._v(" "),t("li",[t("strong",[e._v("gridView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#main-view"}},[e._v("Main view")])],1),e._v(" "),t("li",[t("strong",[e._v("loginView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#change-user-view"}},[e._v("Change user view")])],1),e._v(" "),t("li",[t("strong",[e._v("registerView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/06_users.html#online-users"}},[e._v("Online users")])],1),e._v(" "),t("li",[t("strong",[e._v("welcomeView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#welcome-view"}})],1)])],1)]),e._v(" "),t("p",[e._v("For general information about the structure and usage of Vue.js components, see the official documentation, for instance "),t("a",{attrs:{href:"https://vuejs.org/v2/guide/components.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Component Basics"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/05_datamodel.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{424:function(e,t,n){e.exports=n.p+"assets/img/main.a269c26b.png"},965:function(e,t,n){"use strict";n.r(t);var r=n(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"vue-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue-js"}},[e._v("#")]),e._v(" Vue.js")]),e._v(" "),t("p",[e._v("This chapter is about "),t("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue.js"),t("OutboundLink")],1),e._v(", the single-page application framework used for AsTeRICS Grid.")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#general"}},[e._v("General")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#component-structure"}},[e._v("Component structure")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#used-components"}},[e._v("Used components")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"general"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[e._v("#")]),e._v(" General")]),e._v(" "),t("p",[e._v("In AsTeRICS Grid "),t("a",{attrs:{href:"https://vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue.js"),t("OutboundLink")],1),e._v(" is used in order to manage views and it’s elements in components and to create all kinds of interactivity in the UI. In Vue.js components can be organized in single "),t("code",[e._v(".vue")]),e._v(" files, containing the HTML, Javascript and CSS needed for this component. These are the files and folders that are important regarding the usage of Vue.js:")]),e._v(" "),t("ul",[t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/master/src/vue-components",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/vue-components"),t("OutboundLink")],1)]),e._v(": contains all Vue.js single-file components ("),t("code",[e._v(".vue")]),e._v(" files)")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/index.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("index.html"),t("OutboundLink")],1)]),e._v(": contains the HTML for the main Vue wrapper component consisting of the navigation sidebar and a placeholder for the currently show view")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/mainVue.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/js/vue/mainVue.js"),t("OutboundLink")],1)]),e._v(": Javascript part for the main Vue component in "),t("code",[e._v("index.html")])]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/vuePluginManager.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/js/vue/vuePluginManager.js"),t("OutboundLink")],1)]),e._v(": defines custom Vue directives and filters that can be used globally, e.g. a "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/07_i18n.html#vuejs-filter"}},[e._v("translate filter")]),e._v(".")],1)]),e._v(" "),t("h2",{attrs:{id:"component-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-structure"}},[e._v("#")]),e._v(" Component structure")]),e._v(" "),t("p",[e._v("The main Vue wrapper component is defined in "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/index.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("index.html"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/mainVue.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("mainVue.js"),t("OutboundLink")],1),e._v(". This line in "),t("code",[e._v("index.html")]),e._v(" is a placeholder for the currently shown view of the application:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('\n')])])]),t("p",[e._v("The method "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/vue/mainVue.js",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("MainVue.setViewComponent()")]),t("OutboundLink")],1),e._v(" is used in order to change the currently shown view. This method is primarily used by "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/router.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("router.js"),t("OutboundLink")],1),e._v(" which chooses the correct view based on the current "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Fragment_identifier",target:"_blank",rel:"noopener noreferrer"}},[e._v("URL hash"),t("OutboundLink")],1),e._v(" in the address. For instance "),t("code",[e._v("https://grid.asterics.eu/#grids")]),e._v(" has the hash "),t("code",[e._v("#grids")]),e._v(" and therefore will render the "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#manage-grids-view"}},[e._v("manage grids")]),e._v(" component which is defined in file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/vue-components/views/allGridsView.vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("allGridsView.vue"),t("OutboundLink")],1),e._v(".")],1),e._v(" "),t("p",[e._v("Figure 1 highlights the Vue.js components that are used for the main view:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(424),alt:""}}),e._v(" "),t("em",[e._v("Fig. 1: Vue component structure of the main view, red part is replaced depending on the current navigation")])]),e._v(" "),t("h2",{attrs:{id:"used-components"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#used-components"}},[e._v("#")]),e._v(" Used components")]),e._v(" "),t("p",[e._v("The used Vue components can be found in the folder "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/master/src/vue-components",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/vue-components"),t("OutboundLink")],1),e._v(" which contains the following folders:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("components")]),e._v(": generic components that can be used in various places across the application:\n"),t("ul",[t("li",[t("strong",[e._v("comparisonComponent.vue")]),e._v(": accordion component showing a comparison between online and offline users (information only)")]),e._v(" "),t("li",[t("strong",[e._v("headerIcon.vue")]),e._v(": component used in the header of different views which shows a hamburger menu and the AsTeRICS Grid logo")])])]),e._v(" "),t("li",[t("strong",[e._v("modals")]),e._v(": contains all kinds of modals (popup dialogs):\n"),t("ul",[t("li",[t("strong",[e._v("addMultipleModal.vue")]),e._v(": modal for importing multiple new grid elements at once, used in "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#edit-view"}},[e._v("edit view")])],1),e._v(" "),t("li",[t("strong",[e._v("editActionsModal.vue")]),e._v(": action edit modal for a grid element, see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/05_actions.html#edit-actions-modal"}},[e._v("Actions")]),e._v(" chapter in user documentation. The file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/vue-components/modals/editActionsSub/editAREAction.vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("editAREAction.vue"),t("OutboundLink")],1),e._v(" is a sub-component of this modal containing the configuration of an "),t("RouterLink",{attrs:{to:"/develop/documentation_user/05_actions.html#asterics-action"}},[e._v("AsTeRICS action")]),e._v(".")],1),e._v(" "),t("li",[t("strong",[e._v("editGridModal.vue")]),e._v(": edit modal for a grid element (label and image), see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/03_appearance_layout.html#edit-modal"}},[e._v("Grid appearance and layout")]),e._v(" in user documentation")],1),e._v(" "),t("li",[t("strong",[e._v("importDictionaryModal.vue")]),e._v(": modal for importing new words to a dictionary, see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/07_dictionaries.html#add-words"}},[e._v("Dictionaries")]),e._v(" in user documentation")],1),e._v(" "),t("li",[t("strong",[e._v("inputOptionsModal.vue")]),e._v(": modal for setting input options like e.g. scanning, see chapter "),t("RouterLink",{attrs:{to:"/develop/documentation_user/04_input_options.html"}},[e._v("Input Options")]),e._v(" in user documentation")],1)])]),e._v(" "),t("li",[t("strong",[e._v("views")]),e._v(": contains different views which are rendered into the component placeholder described in "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/04_vuejs.html#component-structure"}},[e._v("component structure")]),e._v(":\n"),t("ul",[t("li",[t("strong",[e._v("aboutView.vue")]),e._v(": view containing general information about AsTeRICS Grid")]),e._v(" "),t("li",[t("strong",[e._v("addOfflineView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/06_users.html#offline-users"}},[e._v("Offline users")])],1),e._v(" "),t("li",[t("strong",[e._v("allGridsView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#manage-grids-view"}},[e._v("Manage grids view")])],1),e._v(" "),t("li",[t("strong",[e._v("dictionariesView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#manage-dictionaries-view"}},[e._v("Manage dictionaries view")])],1),e._v(" "),t("li",[t("strong",[e._v("gridEditView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#edit-view"}},[e._v("Edit view")])],1),e._v(" "),t("li",[t("strong",[e._v("gridView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#main-view"}},[e._v("Main view")])],1),e._v(" "),t("li",[t("strong",[e._v("loginView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#change-user-view"}},[e._v("Change user view")])],1),e._v(" "),t("li",[t("strong",[e._v("registerView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/06_users.html#online-users"}},[e._v("Online users")])],1),e._v(" "),t("li",[t("strong",[e._v("welcomeView.vue")]),e._v(": see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/02_navigation.html#welcome-view"}})],1)])],1)]),e._v(" "),t("p",[e._v("For general information about the structure and usage of Vue.js components, see the official documentation, for instance "),t("a",{attrs:{href:"https://vuejs.org/v2/guide/components.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Component Basics"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/03_grid.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/05_datamodel.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/114.a5910d07.js b/assets/js/114.ba45231f.js similarity index 99% rename from assets/js/114.a5910d07.js rename to assets/js/114.ba45231f.js index a46040afcc..c021f46f23 100644 --- a/assets/js/114.a5910d07.js +++ b/assets/js/114.ba45231f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{425:function(e,t,a){e.exports=a.p+"assets/img/data_storage_layers_en.f40ca1cb.png"},965:function(e,t,a){"use strict";a.r(t);var r=a(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"data-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#data-storage"}},[e._v("#")]),e._v(" Data storage")]),e._v(" "),t("p",[e._v("This chapter is about the data storage concept used in AsTeRICS Grid, meaning where and how user configuration and application data is stored.")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#introduction"}},[e._v("Introduction")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#data-storage-abstraction-layers"}},[e._v("Abstraction layers")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#one-database-per-user"}},[e._v("One database per user")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#authentication-layer"}},[e._v("Authentication layer")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#inspecting-locally-saved-data"}},[e._v("Inspecting locally saved data")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),t("p",[e._v("Since AsTeRICS Grid is designed to work offline, all configuration and user data have to be accessible without internet connection. There are the following possibilities for providing a data storage for an offline web-application:")]),e._v(" "),t("ol",[t("li",[e._v("Any external locally running storage service, e.g. any locally running database like MySQL or MariaDB. This possibility has the downside that users would have to install additional Software in order to use AsTeRICS Grid.")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage",target:"_blank",rel:"noopener noreferrer"}},[e._v("LocalStorage"),t("OutboundLink")],1),e._v(", a browser internal storage which is capable to store key-value pairs of string values. However the amount of data is "),t("a",{attrs:{href:"https://www.html5rocks.com/en/tutorials/offline/quota-research/",target:"_blank",rel:"noopener noreferrer"}},[e._v("limited to about 5-10MB"),t("OutboundLink")],1),e._v(" in many browsers which is often too little to store all grids in AsTeRICS Grid.")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),t("OutboundLink")],1),e._v(", a browser internal storage for big amounts of structured data")])]),e._v(" "),t("p",[e._v("AsTeRICS Grid uses LocalStorage for temporary data which should not synchronized with the cloud (e.g. hashed encryption password) and IndexedDB for the majority of configuration like e.g. data of stored grids. For online users all data that is stored in IndexedDB is synchronized with the cloud, for offline users (see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/06_users.html"}},[e._v("Users")]),e._v(") data is only stored locally on the device.")],1),e._v(" "),t("p",[e._v("For accessing IndexedDB in a more comfortable manner and making synchronization with a remote "),t("a",{attrs:{href:"http://couchdb.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CouchDB"),t("OutboundLink")],1),e._v(" possible, the Javascript library "),t("a",{attrs:{href:"https://pouchdb.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("PouchDB"),t("OutboundLink")],1),e._v(" is used.")]),e._v(" "),t("h2",{attrs:{id:"data-storage-abstraction-layers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#data-storage-abstraction-layers"}},[e._v("#")]),e._v(" Data storage abstraction layers")]),e._v(" "),t("p",[e._v("All Javascript modules regarding storage of data in AsTeRICS Grid can be found in the folder "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/master/src/js/service/data",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/js/service/data"),t("OutboundLink")],1),e._v(". Figure 1 shows the relevant files and their relationships:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(425),alt:"Concept of data storage layers"}})]),e._v(" "),t("p",[t("em",[e._v("Figure 1: Concept of data storage layers")])]),e._v(" "),t("p",[e._v("These are the responsibilities and functions of the different modules:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("dataService.js")]),e._v(": provides access to data objects on an application based abstraction level; implements methods that make it possible to get and save the objects described in chapter "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/05_datamodel.html"}},[e._v("Data model")]),e._v(", e.g. "),t("code",[e._v("GridData")]),e._v(" objects.")],1),e._v(" "),t("li",[t("strong",[e._v("databaseService.js")]),e._v(": implements "),t("a",{attrs:{href:"https://de.wikipedia.org/wiki/CRUD",target:"_blank",rel:"noopener noreferrer"}},[e._v("CRUD"),t("OutboundLink")],1),e._v(" methods for generic data model objects, methods for switching databases (users) and initializes databases with default data. This layer also does encryption and decryption of data using "),t("code",[e._v("convertServiceDb.js")]),e._v(". This level of abstraction is still quite independent of "),t("a",{attrs:{href:"https://pouchdb.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("PouchDB"),t("OutboundLink")],1),e._v(" or "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),t("OutboundLink")],1),e._v(" and theoretically could also use a different backend.")]),e._v(" "),t("li",[t("strong",[e._v("pouchDbService.js")]),e._v(": performs queries and actions on a PouchDB instance actually accessing the IndexedDB or CouchDB databases. It also caches queries for performance optimizations and broadcasts events if updates from the remote database are recognized.")]),e._v(" "),t("li",[t("strong",[e._v("pouchDBAdapter.js")]),e._v(": manages which actual database should be used, a local PouchDB instance or a remote CouchDB. Also sets up synchronization between both.")]),e._v(" "),t("li",[t("strong",[e._v("undoService.js")]),e._v(": is used by "),t("code",[e._v("grid.js")]),e._v(" in order to pass updates on grids to "),t("code",[e._v("dataService.js")]),e._v(" while keeping track of changes and providing an undo and redo functionality")]),e._v(" "),t("li",[t("strong",[e._v("convertServiceDb.js")]),e._v(": provides methods in order to convert objects used in the application to (encrypted) objects that should be saved to database and vice versa. If an object with an outdated data model version passes these methods, additional filter functions are inserted in order to upgrade the data model.")]),e._v(" "),t("li",[t("strong",[e._v("encryptionService.js")]),e._v(": provides methods for AES encryption and decryption and hasing of data objects and strings using the "),t("a",{attrs:{href:"https://github.com/bitwiseshiftleft/sjcl",target:"_blank",rel:"noopener noreferrer"}},[e._v("sjcl"),t("OutboundLink")],1),e._v(" library")]),e._v(" "),t("li",[t("strong",[e._v("localStorageService.js")]),e._v(": accesses the browser internal "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage",target:"_blank",rel:"noopener noreferrer"}},[e._v("LocalStorage"),t("OutboundLink")],1),e._v(" for saving data like the last active user or hashed user passwords - in general data which should not be synchronized to cloud or aren’t suitable for a user’s database.")])]),e._v(" "),t("h2",{attrs:{id:"one-database-per-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-database-per-user"}},[e._v("#")]),e._v(" One database per user")]),e._v(" "),t("p",[e._v("AsTeRICS Grid implements the idea of "),t("a",{attrs:{href:"https://www.joshmorony.com/creating-a-multiple-user-app-with-pouchdb-couchdb/",target:"_blank",rel:"noopener noreferrer"}},[e._v("one database per user"),t("OutboundLink")],1),e._v(". For each user a new database is created. Offline users have an own IndexedDB database within the browser and online users have both a local IndexedDB database and an online CouchDB database which are kept in sync by "),t("a",{attrs:{href:"https://pouchdb.com/guides/replication.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("replication features"),t("OutboundLink")],1),e._v(" of the PouchDB library. Advantages of this approach are:")]),e._v(" "),t("ul",[t("li",[e._v("access rights are easy to manage, each user can access their own database and nothing else")]),e._v(" "),t("li",[e._v("it’s easy to delete all data of a user, just delete their database")]),e._v(" "),t("li",[e._v("replication and synchronizing is simple, the whole user database can be replicated on the local device")])]),e._v(" "),t("h2",{attrs:{id:"authentication-layer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#authentication-layer"}},[e._v("#")]),e._v(" Authentication layer")]),e._v(" "),t("p",[e._v("The one-database-per-user approach needs a layer for managing user accounts and the corresponding CouchDB user databases (only for online users). For AsTeRICS Grid the framework "),t("a",{attrs:{href:"https://github.com/sen-su/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin"),t("OutboundLink")],1),e._v(" is used. It provides an API in order to register and login users and creates the corresponding CouchDB databases in the background. However the "),t("a",{attrs:{href:"https://github.com/colinskow/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("original superlogin project"),t("OutboundLink")],1),e._v(" seems to be no longer maintained and therefore AsTeRICS Grid uses a more up-to-date "),t("a",{attrs:{href:"https://github.com/sen-su/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("fork"),t("OutboundLink")],1),e._v(" of it.")]),e._v(" "),t("p",[e._v("The file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/superlogin/start.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin/start.js"),t("OutboundLink")],1),e._v(" starts superlogin and contains it’s configuration (= server side). The file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/service/loginService.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("loginService.js"),t("OutboundLink")],1),e._v(" is the client-side counterpart which uses the library "),t("a",{attrs:{href:"https://www.npmjs.com/package/superlogin-client",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin-client"),t("OutboundLink")],1),e._v(" in order to connect to and make use of the superlogin server.")]),e._v(" "),t("p",[e._v("In order to start superlogin a CouchDB instance must be running on the same machine and the correct CouchDB parameters have to be inserted in "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/superlogin/start.js#L43",target:"_blank",rel:"noopener noreferrer"}},[e._v("start.js:43"),t("OutboundLink")],1),e._v(". Then use "),t("code",[e._v("npm run start-superlogin-dev")]),e._v(" or "),t("code",[e._v("npm run start-superlogin-prod")]),e._v(" in order to start superlogin in development or production mode.")]),e._v(" "),t("h2",{attrs:{id:"inspecting-locally-saved-data"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#inspecting-locally-saved-data"}},[e._v("#")]),e._v(" Inspecting locally saved data")]),e._v(" "),t("p",[e._v("For examining the locally saved data of AsTeRICS Grid do the following (e.g. in Firefox or Chrome browser):")]),e._v(" "),t("ol",[t("li",[e._v("open developer tools ("),t("code",[e._v("Ctrl + Shift + I")]),e._v(" or "),t("code",[e._v("right click -> Inspect")]),e._v(")")]),e._v(" "),t("li",[e._v("go to "),t("code",[e._v("Application")]),e._v(" (Chrome) or "),t("code",[e._v("Web-Storage")]),e._v(" (Firefox)")]),e._v(" "),t("li",[e._v("open "),t("code",[e._v("LocalStorage")]),e._v(" or "),t("code",[e._v("IndexedDB")]),e._v(" to inspect the data saved in these storages")])]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/05_datamodel.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/07_i18n.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{425:function(e,t,a){e.exports=a.p+"assets/img/data_storage_layers_en.f40ca1cb.png"},968:function(e,t,a){"use strict";a.r(t);var r=a(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"data-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#data-storage"}},[e._v("#")]),e._v(" Data storage")]),e._v(" "),t("p",[e._v("This chapter is about the data storage concept used in AsTeRICS Grid, meaning where and how user configuration and application data is stored.")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#introduction"}},[e._v("Introduction")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#data-storage-abstraction-layers"}},[e._v("Abstraction layers")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#one-database-per-user"}},[e._v("One database per user")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#authentication-layer"}},[e._v("Authentication layer")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/06_data_storage.html#inspecting-locally-saved-data"}},[e._v("Inspecting locally saved data")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),t("p",[e._v("Since AsTeRICS Grid is designed to work offline, all configuration and user data have to be accessible without internet connection. There are the following possibilities for providing a data storage for an offline web-application:")]),e._v(" "),t("ol",[t("li",[e._v("Any external locally running storage service, e.g. any locally running database like MySQL or MariaDB. This possibility has the downside that users would have to install additional Software in order to use AsTeRICS Grid.")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage",target:"_blank",rel:"noopener noreferrer"}},[e._v("LocalStorage"),t("OutboundLink")],1),e._v(", a browser internal storage which is capable to store key-value pairs of string values. However the amount of data is "),t("a",{attrs:{href:"https://www.html5rocks.com/en/tutorials/offline/quota-research/",target:"_blank",rel:"noopener noreferrer"}},[e._v("limited to about 5-10MB"),t("OutboundLink")],1),e._v(" in many browsers which is often too little to store all grids in AsTeRICS Grid.")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),t("OutboundLink")],1),e._v(", a browser internal storage for big amounts of structured data")])]),e._v(" "),t("p",[e._v("AsTeRICS Grid uses LocalStorage for temporary data which should not synchronized with the cloud (e.g. hashed encryption password) and IndexedDB for the majority of configuration like e.g. data of stored grids. For online users all data that is stored in IndexedDB is synchronized with the cloud, for offline users (see "),t("RouterLink",{attrs:{to:"/develop/documentation_user/06_users.html"}},[e._v("Users")]),e._v(") data is only stored locally on the device.")],1),e._v(" "),t("p",[e._v("For accessing IndexedDB in a more comfortable manner and making synchronization with a remote "),t("a",{attrs:{href:"http://couchdb.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CouchDB"),t("OutboundLink")],1),e._v(" possible, the Javascript library "),t("a",{attrs:{href:"https://pouchdb.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("PouchDB"),t("OutboundLink")],1),e._v(" is used.")]),e._v(" "),t("h2",{attrs:{id:"data-storage-abstraction-layers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#data-storage-abstraction-layers"}},[e._v("#")]),e._v(" Data storage abstraction layers")]),e._v(" "),t("p",[e._v("All Javascript modules regarding storage of data in AsTeRICS Grid can be found in the folder "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/master/src/js/service/data",target:"_blank",rel:"noopener noreferrer"}},[e._v("src/js/service/data"),t("OutboundLink")],1),e._v(". Figure 1 shows the relevant files and their relationships:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(425),alt:"Concept of data storage layers"}})]),e._v(" "),t("p",[t("em",[e._v("Figure 1: Concept of data storage layers")])]),e._v(" "),t("p",[e._v("These are the responsibilities and functions of the different modules:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("dataService.js")]),e._v(": provides access to data objects on an application based abstraction level; implements methods that make it possible to get and save the objects described in chapter "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/05_datamodel.html"}},[e._v("Data model")]),e._v(", e.g. "),t("code",[e._v("GridData")]),e._v(" objects.")],1),e._v(" "),t("li",[t("strong",[e._v("databaseService.js")]),e._v(": implements "),t("a",{attrs:{href:"https://de.wikipedia.org/wiki/CRUD",target:"_blank",rel:"noopener noreferrer"}},[e._v("CRUD"),t("OutboundLink")],1),e._v(" methods for generic data model objects, methods for switching databases (users) and initializes databases with default data. This layer also does encryption and decryption of data using "),t("code",[e._v("convertServiceDb.js")]),e._v(". This level of abstraction is still quite independent of "),t("a",{attrs:{href:"https://pouchdb.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("PouchDB"),t("OutboundLink")],1),e._v(" or "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),t("OutboundLink")],1),e._v(" and theoretically could also use a different backend.")]),e._v(" "),t("li",[t("strong",[e._v("pouchDbService.js")]),e._v(": performs queries and actions on a PouchDB instance actually accessing the IndexedDB or CouchDB databases. It also caches queries for performance optimizations and broadcasts events if updates from the remote database are recognized.")]),e._v(" "),t("li",[t("strong",[e._v("pouchDBAdapter.js")]),e._v(": manages which actual database should be used, a local PouchDB instance or a remote CouchDB. Also sets up synchronization between both.")]),e._v(" "),t("li",[t("strong",[e._v("undoService.js")]),e._v(": is used by "),t("code",[e._v("grid.js")]),e._v(" in order to pass updates on grids to "),t("code",[e._v("dataService.js")]),e._v(" while keeping track of changes and providing an undo and redo functionality")]),e._v(" "),t("li",[t("strong",[e._v("convertServiceDb.js")]),e._v(": provides methods in order to convert objects used in the application to (encrypted) objects that should be saved to database and vice versa. If an object with an outdated data model version passes these methods, additional filter functions are inserted in order to upgrade the data model.")]),e._v(" "),t("li",[t("strong",[e._v("encryptionService.js")]),e._v(": provides methods for AES encryption and decryption and hasing of data objects and strings using the "),t("a",{attrs:{href:"https://github.com/bitwiseshiftleft/sjcl",target:"_blank",rel:"noopener noreferrer"}},[e._v("sjcl"),t("OutboundLink")],1),e._v(" library")]),e._v(" "),t("li",[t("strong",[e._v("localStorageService.js")]),e._v(": accesses the browser internal "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage",target:"_blank",rel:"noopener noreferrer"}},[e._v("LocalStorage"),t("OutboundLink")],1),e._v(" for saving data like the last active user or hashed user passwords - in general data which should not be synchronized to cloud or aren’t suitable for a user’s database.")])]),e._v(" "),t("h2",{attrs:{id:"one-database-per-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-database-per-user"}},[e._v("#")]),e._v(" One database per user")]),e._v(" "),t("p",[e._v("AsTeRICS Grid implements the idea of "),t("a",{attrs:{href:"https://www.joshmorony.com/creating-a-multiple-user-app-with-pouchdb-couchdb/",target:"_blank",rel:"noopener noreferrer"}},[e._v("one database per user"),t("OutboundLink")],1),e._v(". For each user a new database is created. Offline users have an own IndexedDB database within the browser and online users have both a local IndexedDB database and an online CouchDB database which are kept in sync by "),t("a",{attrs:{href:"https://pouchdb.com/guides/replication.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("replication features"),t("OutboundLink")],1),e._v(" of the PouchDB library. Advantages of this approach are:")]),e._v(" "),t("ul",[t("li",[e._v("access rights are easy to manage, each user can access their own database and nothing else")]),e._v(" "),t("li",[e._v("it’s easy to delete all data of a user, just delete their database")]),e._v(" "),t("li",[e._v("replication and synchronizing is simple, the whole user database can be replicated on the local device")])]),e._v(" "),t("h2",{attrs:{id:"authentication-layer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#authentication-layer"}},[e._v("#")]),e._v(" Authentication layer")]),e._v(" "),t("p",[e._v("The one-database-per-user approach needs a layer for managing user accounts and the corresponding CouchDB user databases (only for online users). For AsTeRICS Grid the framework "),t("a",{attrs:{href:"https://github.com/sen-su/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin"),t("OutboundLink")],1),e._v(" is used. It provides an API in order to register and login users and creates the corresponding CouchDB databases in the background. However the "),t("a",{attrs:{href:"https://github.com/colinskow/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("original superlogin project"),t("OutboundLink")],1),e._v(" seems to be no longer maintained and therefore AsTeRICS Grid uses a more up-to-date "),t("a",{attrs:{href:"https://github.com/sen-su/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("fork"),t("OutboundLink")],1),e._v(" of it.")]),e._v(" "),t("p",[e._v("The file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/superlogin/start.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin/start.js"),t("OutboundLink")],1),e._v(" starts superlogin and contains it’s configuration (= server side). The file "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/src/js/service/loginService.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("loginService.js"),t("OutboundLink")],1),e._v(" is the client-side counterpart which uses the library "),t("a",{attrs:{href:"https://www.npmjs.com/package/superlogin-client",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin-client"),t("OutboundLink")],1),e._v(" in order to connect to and make use of the superlogin server.")]),e._v(" "),t("p",[e._v("In order to start superlogin a CouchDB instance must be running on the same machine and the correct CouchDB parameters have to be inserted in "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/blob/master/superlogin/start.js#L43",target:"_blank",rel:"noopener noreferrer"}},[e._v("start.js:43"),t("OutboundLink")],1),e._v(". Then use "),t("code",[e._v("npm run start-superlogin-dev")]),e._v(" or "),t("code",[e._v("npm run start-superlogin-prod")]),e._v(" in order to start superlogin in development or production mode.")]),e._v(" "),t("h2",{attrs:{id:"inspecting-locally-saved-data"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#inspecting-locally-saved-data"}},[e._v("#")]),e._v(" Inspecting locally saved data")]),e._v(" "),t("p",[e._v("For examining the locally saved data of AsTeRICS Grid do the following (e.g. in Firefox or Chrome browser):")]),e._v(" "),t("ol",[t("li",[e._v("open developer tools ("),t("code",[e._v("Ctrl + Shift + I")]),e._v(" or "),t("code",[e._v("right click -> Inspect")]),e._v(")")]),e._v(" "),t("li",[e._v("go to "),t("code",[e._v("Application")]),e._v(" (Chrome) or "),t("code",[e._v("Web-Storage")]),e._v(" (Firefox)")]),e._v(" "),t("li",[e._v("open "),t("code",[e._v("LocalStorage")]),e._v(" or "),t("code",[e._v("IndexedDB")]),e._v(" to inspect the data saved in these storages")])]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/05_datamodel.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/develop/asterics-grid/07_i18n.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/115.04cbdea2.js b/assets/js/115.4ef81a79.js similarity index 99% rename from assets/js/115.04cbdea2.js rename to assets/js/115.4ef81a79.js index 7e5f307029..4d01347b53 100644 --- a/assets/js/115.04cbdea2.js +++ b/assets/js/115.4ef81a79.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{426:function(t,a,s){t.exports=s.p+"assets/img/Computer-Vision-BuildPath.ccb70d21.jpg"},982:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"computer-vision-using-javacv"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#computer-vision-using-javacv"}},[t._v("#")]),t._v(" Computer Vision using JavaCV")]),t._v(" "),a("h2",{attrs:{id:"objective"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[t._v("#")]),t._v(" Objective")]),t._v(" "),a("p",[t._v("This tutorial demonstrates how to use the APIs for computer vision tasks in AsTeRICS. The tutorial does not show how to create an "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Plugin-Development",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS plugin"),a("OutboundLink")],1),t._v(" where the API would be used normally.")]),t._v(" "),a("h2",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[t._v("AsTeRICS has several computer vision plugins (e.g. "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&sensors/XFacetrackerLK.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("XFacetrackerLK"),a("OutboundLink")],1),t._v(" for face tracking).")]),t._v(" "),a("p",[t._v("To simplify the development of such plugins and adding crossplatform support easily, AsTeRICS 3.0 uses a subset of "),a("a",{attrs:{href:"https://github.com/bytedeco/javacv/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV 1.3"),a("OutboundLink")],1),t._v(". Additionally, the "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE/services/ComputerVision/src/main/java/eu/asterics/mw/computervision",target:"_blank",rel:"noopener noreferrer"}},[t._v("computervision service"),a("OutboundLink")],1),t._v(" provides helper classes for frame grabbing, face detection and frame visualization.")]),t._v(" "),a("h2",{attrs:{id:"javacv"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javacv"}},[t._v("#")]),t._v(" JavaCV")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV"),a("OutboundLink")],1),t._v(" is a Java wrapper for commonly used computer vision libraries and uses "),a("a",{attrs:{href:"https://github.com/bytedeco/javacpp",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCPP technology"),a("OutboundLink")],1),t._v(" for the binding of native libraries (based on JNI). "),a("a",{attrs:{href:"https://github.com/bytedeco/javacpp-presets/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCPP Presets"),a("OutboundLink")],1),t._v(" define the respective bindings (e.g. OpenCV, FFmpeg, OpenKinect, videoInput, flandmark, ARToolkitPlus, …) that can then be used within Java.")]),t._v(" "),a("h2",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed"),a("OutboundLink")],1)]),t._v(" "),a("li",[t._v("Java IDE ("),a("a",{attrs:{href:"http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neon3",target:"_blank",rel:"noopener noreferrer"}},[t._v("Eclipse"),a("OutboundLink")],1),t._v(" recommended)")]),t._v(" "),a("li",[a("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java Development Kit 8"),a("OutboundLink")],1)]),t._v(" "),a("li",[t._v("Webcam or USB camera or RaspiCam")])]),t._v(" "),a("h2",{attrs:{id:"preparation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#preparation"}},[t._v("#")]),t._v(" Preparation")]),t._v(" "),a("ol",[a("li",[t._v("Start Eclipse")]),t._v(" "),a("li",[t._v("Create a new Java project ("),a("code",[t._v("File/New/Java Project")]),t._v(")")]),t._v(" "),a("li",[t._v("Add the following libraries to the build configuration ("),a("code",[t._v("Project/Properties/Java Build Path/Libraries")]),t._v(")")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("/asterics.ARE.jar")])]),t._v(" "),a("li",[a("code",[t._v("/asterics.mw.computervision.jar")])]),t._v(" "),a("li",[a("code",[t._v("/javacv-1.3.0-basic-windows.jar")]),t._v(" (on Linux/Mac OSX use "),a("code",[t._v("javacv-1.3.0-basic-linux|macosx.jar")]),t._v(")")]),t._v(" "),a("li",[a("code",[t._v("/../APE/lib/commons-io-2.4.jar")])]),t._v(" "),a("li",[a("code",[t._v("/../APE/lib/commons-codec-1.11.jar")])])]),t._v(" "),a("ol",{attrs:{start:"4"}},[a("li",[t._v("Copy the directory "),a("code",[t._v("/data/service.computervision")]),t._v(" to "),a("code",[t._v("/data/")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(426),alt:"Build path dialog with external libraries"}})]),t._v(" "),a("ol",{attrs:{start:"4"}},[a("li",[t._v("Create a main class "),a("code",[t._v("FaceDetectionExample")]),t._v(" and copy and paste the following template code into it")])]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("awt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Dimension")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("awt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Point")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Imports OpenCV wrapper (classes, methods and constants)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import static"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bytedeco"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("javacpp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("opencv_core"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import static"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bytedeco"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("javacpp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("opencv_imgproc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bytedeco"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("javacv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FrameGrabber")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetection")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GrabbedImageListener")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GrabbedImageListener")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Utility class which simplifies face detection and drawing.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetection")]),t._v(" faceDetection"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Define camera device and id for frame display window.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" camDeviceKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"FaceDetectionExample"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//CvPoint is an OpenCV structure for describing point: https://docs.opencv.org/3.2.0/dc/dd1/structCvPoint.html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//We can allocate native arrays using constructors taking an integer as argument.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvPoint")]),t._v(" hatPoints "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvPoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throws")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),t._v(" faceDetectionExample"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n faceDetectionExample"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throws")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Listener method which is called for each grabbed frame.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("imageGrabbed")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IplImage")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"example-1-face-detection-and-face-rectangle"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-1-face-detection-and-face-rectangle"}},[t._v("#")]),t._v(" Example 1 - Face detection and face rectangle")]),t._v(" "),a("p",[t._v("The computer vision service in AsTeRICS provides convinience methods that facilitate the task of frame grabbing ("),a("code",[t._v("class SharedFrameGrabber")]),t._v(") and visualization ("),a("code",[t._v("SharedCanvasFrame")]),t._v(").")]),t._v(" "),a("h3",{attrs:{id:"init-and-start-grabbing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#init-and-start-grabbing"}},[t._v("#")]),t._v(" Init and Start grabbing")]),t._v(" "),a("ol",[a("li",[t._v("Create a "),a("a",{attrs:{href:"https://github.com/bytedeco/javacv/wiki/Video-Preview-and-Video-Recording-Classes",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("FrameGrabber")]),a("OutboundLink")],1),t._v(" instance, which is an abstraction of a frame grabbing functionality implemented by a computer vision library (e.g. videoInput, OpenCV). Using the method "),a("code",[t._v("getFrameGrabber(...)")]),t._v(" returns the default frame grabber ("),a("strong",[t._v("Windows")]),t._v(": videoInput, "),a("strong",[t._v("Linux")]),t._v(": FFmpeg, "),a("strong",[t._v("Mac OSX")]),t._v(": OpenCV) for the platform the program is running on.")]),t._v(" "),a("li",[t._v("Register a "),a("code",[t._v("GrabbedImageListener")]),t._v(" which receives grabbed frames")]),t._v(" "),a("li",[t._v("Create window for displaying video frames.")]),t._v(" "),a("li",[t._v("Start grabbing.")])]),t._v(" "),a("p",[t._v("Copy and paste the following code into the method "),a("code",[t._v("public void start()")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Get a frame grabber for the device with the given key (either a number e.g. 0 or a device path e.g. /dev/video0)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//This is dependent on the used frame grabber (e.g. FFMpeg only supports device paths)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FrameGrabber")]),t._v(" grabber "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Register a listener to receive the grabbed images of type IplImage.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("registerGrabbedImageListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Create a window which is used to display the video frame.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Face Detection Example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" grabber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGamma")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Point")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Dimension")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Starts grabbing in a dedicated thread and notifies all registered listeners with the IplImage frame grabbed.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("startGrabbing")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h3",{attrs:{id:"face-detection-and-drawing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#face-detection-and-drawing"}},[t._v("#")]),t._v(" Face detection and drawing")]),t._v(" "),a("p",[t._v("The class "),a("code",[t._v("FaceDetection")]),t._v(" provides convinience methods for face detection using a "),a("a",{attrs:{href:"https://docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Haar cascade for the face"),a("OutboundLink")],1),t._v(" and drawing with typical parameters.")]),t._v(" "),a("p",[t._v("Copy and paste the following code into the method "),a("code",[t._v("public void imageGrabbed(IplImage frame)")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Utility method which does face detection with standard parameters.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvRect")]),t._v(" faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceDetection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("detectFace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n faceDetection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("drawFaceRect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Finally show the image with added drawings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("showImage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h3",{attrs:{id:"stop-grabbing-cleanup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stop-grabbing-cleanup"}},[t._v("#")]),t._v(" Stop grabbing & cleanup")]),t._v(" "),a("p",[t._v("Finally you must stop grabbing, deregister the "),a("code",[t._v("GrabbedImageListener")]),t._v(" and dispose the window showing the video frame.")]),t._v(" "),a("p",[t._v("Copy and paste the following code into the method "),a("code",[t._v("public void stop()")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Stop the grabber thread.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stopGrabbing")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Deregister this as listener.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deregisterGrabbedImageListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Dispose the window for frame visualization. ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("disposeFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"example-2-drawing-a-hat-on-top-of-the-face"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-2-drawing-a-hat-on-top-of-the-face"}},[t._v("#")]),t._v(" Example 2 - Drawing a hat on top of the face")]),t._v(" "),a("p",[t._v("This example shows how to use the "),a("a",{attrs:{href:"https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("drawing functions"),a("OutboundLink")],1),t._v(" of OpenCV to draw a hat on top of the facial position. Generally you can use both the C-API or the C+±API of OpenCV with similar syntax. Nevertheless, there are some rules of how to "),a("a",{attrs:{href:"https://github.com/bytedeco/javacv/wiki/Converting-OpenCV",target:"_blank",rel:"noopener noreferrer"}},[t._v("convert OpenCV code to JavaCV code"),a("OutboundLink")],1),t._v(".\nYou can draw a rectangle with "),a("code",[t._v("cvRectangle(...)")]),t._v(" and draw a filled polygon with "),a("code",[t._v("cvFillConvexPoly(...)")]),t._v(".")]),t._v(" "),a("p",[t._v("Use the code of "),a("a",{attrs:{href:"#example-1---face-detection-and-face-rectangle"}},[t._v("Example 1")]),t._v(" and overwrite the implementation of the method "),a("code",[t._v("public void imageGrabbed(...)")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Utility method which does face detection with standard parameters.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvRect")]),t._v(" faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceDetection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("detectFace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Draw a red face rectangle with cvRectangle")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvRectangle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvPoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvPoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("w"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvScalar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RED")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CV_AA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Draw a green hat on top of the face.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//To access or pass as argument the elements of a native array, ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//call position() before. --\x3e position(0) refers to the first element.")]),t._v("\n hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvFillConvexPoly")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvScalar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GREEN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CV_AA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Finally show the image with added drawings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("showImage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/v3.0/ARE/components/sensor.XfacetrackerLK/src/main/java/eu/asterics/component/sensor/XfacetrackerLK/XFacetrackerLKInstance.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Source code of class XFacetrackerLK"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE/services/ComputerVision/src/main/java/eu/asterics/mw/computervision",target:"_blank",rel:"noopener noreferrer"}},[t._v("computervision service"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV 1.3"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv/wiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV 1.3 Wiki"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"groups.google.com/group/javacv"}},[t._v("JavaCV google group")])]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv-examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV examples including OpenCV Cookbook"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/MasteringOpenCV/code",target:"_blank",rel:"noopener noreferrer"}},[t._v("OpenCV examples for HCI (ch6, ch7): Mastering OpenCV with Practical Computer Vision Projects"),a("OutboundLink")],1)])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{426:function(t,a,s){t.exports=s.p+"assets/img/Computer-Vision-BuildPath.ccb70d21.jpg"},985:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"computer-vision-using-javacv"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#computer-vision-using-javacv"}},[t._v("#")]),t._v(" Computer Vision using JavaCV")]),t._v(" "),a("h2",{attrs:{id:"objective"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[t._v("#")]),t._v(" Objective")]),t._v(" "),a("p",[t._v("This tutorial demonstrates how to use the APIs for computer vision tasks in AsTeRICS. The tutorial does not show how to create an "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Plugin-Development",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS plugin"),a("OutboundLink")],1),t._v(" where the API would be used normally.")]),t._v(" "),a("h2",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[t._v("AsTeRICS has several computer vision plugins (e.g. "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&sensors/XFacetrackerLK.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("XFacetrackerLK"),a("OutboundLink")],1),t._v(" for face tracking).")]),t._v(" "),a("p",[t._v("To simplify the development of such plugins and adding crossplatform support easily, AsTeRICS 3.0 uses a subset of "),a("a",{attrs:{href:"https://github.com/bytedeco/javacv/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV 1.3"),a("OutboundLink")],1),t._v(". Additionally, the "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE/services/ComputerVision/src/main/java/eu/asterics/mw/computervision",target:"_blank",rel:"noopener noreferrer"}},[t._v("computervision service"),a("OutboundLink")],1),t._v(" provides helper classes for frame grabbing, face detection and frame visualization.")]),t._v(" "),a("h2",{attrs:{id:"javacv"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javacv"}},[t._v("#")]),t._v(" JavaCV")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV"),a("OutboundLink")],1),t._v(" is a Java wrapper for commonly used computer vision libraries and uses "),a("a",{attrs:{href:"https://github.com/bytedeco/javacpp",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCPP technology"),a("OutboundLink")],1),t._v(" for the binding of native libraries (based on JNI). "),a("a",{attrs:{href:"https://github.com/bytedeco/javacpp-presets/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCPP Presets"),a("OutboundLink")],1),t._v(" define the respective bindings (e.g. OpenCV, FFmpeg, OpenKinect, videoInput, flandmark, ARToolkitPlus, …) that can then be used within Java.")]),t._v(" "),a("h2",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed"),a("OutboundLink")],1)]),t._v(" "),a("li",[t._v("Java IDE ("),a("a",{attrs:{href:"http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neon3",target:"_blank",rel:"noopener noreferrer"}},[t._v("Eclipse"),a("OutboundLink")],1),t._v(" recommended)")]),t._v(" "),a("li",[a("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java Development Kit 8"),a("OutboundLink")],1)]),t._v(" "),a("li",[t._v("Webcam or USB camera or RaspiCam")])]),t._v(" "),a("h2",{attrs:{id:"preparation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#preparation"}},[t._v("#")]),t._v(" Preparation")]),t._v(" "),a("ol",[a("li",[t._v("Start Eclipse")]),t._v(" "),a("li",[t._v("Create a new Java project ("),a("code",[t._v("File/New/Java Project")]),t._v(")")]),t._v(" "),a("li",[t._v("Add the following libraries to the build configuration ("),a("code",[t._v("Project/Properties/Java Build Path/Libraries")]),t._v(")")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("/asterics.ARE.jar")])]),t._v(" "),a("li",[a("code",[t._v("/asterics.mw.computervision.jar")])]),t._v(" "),a("li",[a("code",[t._v("/javacv-1.3.0-basic-windows.jar")]),t._v(" (on Linux/Mac OSX use "),a("code",[t._v("javacv-1.3.0-basic-linux|macosx.jar")]),t._v(")")]),t._v(" "),a("li",[a("code",[t._v("/../APE/lib/commons-io-2.4.jar")])]),t._v(" "),a("li",[a("code",[t._v("/../APE/lib/commons-codec-1.11.jar")])])]),t._v(" "),a("ol",{attrs:{start:"4"}},[a("li",[t._v("Copy the directory "),a("code",[t._v("/data/service.computervision")]),t._v(" to "),a("code",[t._v("/data/")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(426),alt:"Build path dialog with external libraries"}})]),t._v(" "),a("ol",{attrs:{start:"4"}},[a("li",[t._v("Create a main class "),a("code",[t._v("FaceDetectionExample")]),t._v(" and copy and paste the following template code into it")])]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("awt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Dimension")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("awt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Point")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Imports OpenCV wrapper (classes, methods and constants)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import static"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bytedeco"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("javacpp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("opencv_core"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import static"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bytedeco"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("javacpp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("opencv_imgproc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bytedeco"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("javacv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FrameGrabber")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetection")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GrabbedImageListener")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token import"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("computervision"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GrabbedImageListener")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Utility class which simplifies face detection and drawing.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetection")]),t._v(" faceDetection"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetection")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Define camera device and id for frame display window.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" camDeviceKey"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"FaceDetectionExample"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//CvPoint is an OpenCV structure for describing point: https://docs.opencv.org/3.2.0/dc/dd1/structCvPoint.html")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//We can allocate native arrays using constructors taking an integer as argument.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvPoint")]),t._v(" hatPoints "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvPoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throws")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),t._v(" faceDetectionExample"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n faceDetectionExample"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FaceDetectionExample")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throws")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Listener method which is called for each grabbed frame.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("imageGrabbed")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IplImage")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"example-1-face-detection-and-face-rectangle"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-1-face-detection-and-face-rectangle"}},[t._v("#")]),t._v(" Example 1 - Face detection and face rectangle")]),t._v(" "),a("p",[t._v("The computer vision service in AsTeRICS provides convinience methods that facilitate the task of frame grabbing ("),a("code",[t._v("class SharedFrameGrabber")]),t._v(") and visualization ("),a("code",[t._v("SharedCanvasFrame")]),t._v(").")]),t._v(" "),a("h3",{attrs:{id:"init-and-start-grabbing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#init-and-start-grabbing"}},[t._v("#")]),t._v(" Init and Start grabbing")]),t._v(" "),a("ol",[a("li",[t._v("Create a "),a("a",{attrs:{href:"https://github.com/bytedeco/javacv/wiki/Video-Preview-and-Video-Recording-Classes",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("FrameGrabber")]),a("OutboundLink")],1),t._v(" instance, which is an abstraction of a frame grabbing functionality implemented by a computer vision library (e.g. videoInput, OpenCV). Using the method "),a("code",[t._v("getFrameGrabber(...)")]),t._v(" returns the default frame grabber ("),a("strong",[t._v("Windows")]),t._v(": videoInput, "),a("strong",[t._v("Linux")]),t._v(": FFmpeg, "),a("strong",[t._v("Mac OSX")]),t._v(": OpenCV) for the platform the program is running on.")]),t._v(" "),a("li",[t._v("Register a "),a("code",[t._v("GrabbedImageListener")]),t._v(" which receives grabbed frames")]),t._v(" "),a("li",[t._v("Create window for displaying video frames.")]),t._v(" "),a("li",[t._v("Start grabbing.")])]),t._v(" "),a("p",[t._v("Copy and paste the following code into the method "),a("code",[t._v("public void start()")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Get a frame grabber for the device with the given key (either a number e.g. 0 or a device path e.g. /dev/video0)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//This is dependent on the used frame grabber (e.g. FFMpeg only supports device paths)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FrameGrabber")]),t._v(" grabber "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Register a listener to receive the grabbed images of type IplImage.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("registerGrabbedImageListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Create a window which is used to display the video frame.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Face Detection Example"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" grabber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getGamma")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Point")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Dimension")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Starts grabbing in a dedicated thread and notifies all registered listeners with the IplImage frame grabbed.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("startGrabbing")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h3",{attrs:{id:"face-detection-and-drawing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#face-detection-and-drawing"}},[t._v("#")]),t._v(" Face detection and drawing")]),t._v(" "),a("p",[t._v("The class "),a("code",[t._v("FaceDetection")]),t._v(" provides convinience methods for face detection using a "),a("a",{attrs:{href:"https://docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Haar cascade for the face"),a("OutboundLink")],1),t._v(" and drawing with typical parameters.")]),t._v(" "),a("p",[t._v("Copy and paste the following code into the method "),a("code",[t._v("public void imageGrabbed(IplImage frame)")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Utility method which does face detection with standard parameters.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvRect")]),t._v(" faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceDetection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("detectFace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n faceDetection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("drawFaceRect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Finally show the image with added drawings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("showImage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h3",{attrs:{id:"stop-grabbing-cleanup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stop-grabbing-cleanup"}},[t._v("#")]),t._v(" Stop grabbing & cleanup")]),t._v(" "),a("p",[t._v("Finally you must stop grabbing, deregister the "),a("code",[t._v("GrabbedImageListener")]),t._v(" and dispose the window showing the video frame.")]),t._v(" "),a("p",[t._v("Copy and paste the following code into the method "),a("code",[t._v("public void stop()")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Stop the grabber thread.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stopGrabbing")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Deregister this as listener.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedFrameGrabber")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("deregisterGrabbedImageListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("camDeviceKey"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Dispose the window for frame visualization. ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("disposeFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"example-2-drawing-a-hat-on-top-of-the-face"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-2-drawing-a-hat-on-top-of-the-face"}},[t._v("#")]),t._v(" Example 2 - Drawing a hat on top of the face")]),t._v(" "),a("p",[t._v("This example shows how to use the "),a("a",{attrs:{href:"https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("drawing functions"),a("OutboundLink")],1),t._v(" of OpenCV to draw a hat on top of the facial position. Generally you can use both the C-API or the C+±API of OpenCV with similar syntax. Nevertheless, there are some rules of how to "),a("a",{attrs:{href:"https://github.com/bytedeco/javacv/wiki/Converting-OpenCV",target:"_blank",rel:"noopener noreferrer"}},[t._v("convert OpenCV code to JavaCV code"),a("OutboundLink")],1),t._v(".\nYou can draw a rectangle with "),a("code",[t._v("cvRectangle(...)")]),t._v(" and draw a filled polygon with "),a("code",[t._v("cvFillConvexPoly(...)")]),t._v(".")]),t._v(" "),a("p",[t._v("Use the code of "),a("a",{attrs:{href:"#example-1---face-detection-and-face-rectangle"}},[t._v("Example 1")]),t._v(" and overwrite the implementation of the method "),a("code",[t._v("public void imageGrabbed(...)")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Utility method which does face detection with standard parameters.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvRect")]),t._v(" faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceDetection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("detectFace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("faceRect "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" faceRect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Draw a red face rectangle with cvRectangle")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvRectangle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvPoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvPoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("w"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("h"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvScalar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RED")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CV_AA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Draw a green hat on top of the face.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//To access or pass as argument the elements of a native array, ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//call position() before. --\x3e position(0) refers to the first element.")]),t._v("\n hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("x")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" w "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("y")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" h "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("cvFillConvexPoly")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hatPoints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("position")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CvScalar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("GREEN")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CV_AA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Finally show the image with added drawings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SharedCanvasFrame")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("showImage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("canvasInstanceId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/v3.0/ARE/components/sensor.XfacetrackerLK/src/main/java/eu/asterics/component/sensor/XfacetrackerLK/XFacetrackerLKInstance.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Source code of class XFacetrackerLK"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE/services/ComputerVision/src/main/java/eu/asterics/mw/computervision",target:"_blank",rel:"noopener noreferrer"}},[t._v("computervision service"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv/tree/1.3",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV 1.3"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv/wiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV 1.3 Wiki"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"groups.google.com/group/javacv"}},[t._v("JavaCV google group")])]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bytedeco/javacv-examples",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaCV examples including OpenCV Cookbook"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/MasteringOpenCV/code",target:"_blank",rel:"noopener noreferrer"}},[t._v("OpenCV examples for HCI (ch6, ch7): Mastering OpenCV with Practical Computer Vision Projects"),a("OutboundLink")],1)])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/116.5b94955f.js b/assets/js/116.d63730ba.js similarity index 99% rename from assets/js/116.5b94955f.js rename to assets/js/116.d63730ba.js index 8c014919c4..07003cb8fe 100644 --- a/assets/js/116.5b94955f.js +++ b/assets/js/116.d63730ba.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{296:function(t,a,s){t.exports=s.p+"assets/img/DeveloperManual_html_17298a48a6d250c5.fbefb96e.png"},985:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"plugin-development-advanced"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#plugin-development-advanced"}},[t._v("#")]),t._v(" Plugin Development Advanced")]),t._v(" "),a("p",[t._v("In this manual some advanced topics of plugin development are listed.")]),t._v(" "),a("h2",{attrs:{id:"port-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#port-naming-conventions"}},[t._v("#")]),t._v(" Port Naming Conventions")]),t._v(" "),a("p",[t._v("Variables of port instances should be named with a prefix indicating what kind of port it is. The rest of the port name should indicate the port’s use and adhere to the standard Java variable naming conventions. The available prefixes are:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("ip: indicates that the port is an instance of IRuntimeInputPort")])]),t._v(" "),a("li",[a("p",[t._v("op: indicates that the port is an instance of IRuntimeOutputPort")])]),t._v(" "),a("li",[a("p",[t._v("elp: indicates that the port is an instance of IRuntimeEventListenerPort")])]),t._v(" "),a("li",[a("p",[t._v("etp: indicates that the port is an instance of IRuntimeEventTriggererPort")])])]),t._v(" "),a("p",[t._v("A variable holding an event listener port could therefore be named "),a("em",[t._v("elpKeyPressed")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"property-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-naming-conventions"}},[t._v("#")]),t._v(" Property Naming Conventions")]),t._v(" "),a("p",[t._v("Plugin properties should be directly mapped to a variable in the plugin code. The variable’s should be prepended with the prefix "),a("em",[t._v("prop")]),t._v(" and adhere to standard Java naming conventions. Thus a property could be named "),a("em",[t._v("InputGainValue")]),t._v(" and the corresponding variable should be named "),a("em",[t._v("propInputGainValue")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"bundle-descriptor-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundle-descriptor-naming-conventions"}},[t._v("#")]),t._v(" Bundle Descriptor Naming Conventions")]),t._v(" "),a("p",[t._v("The bundle descriptor should serve as an abstraction layer between the user who creates models in the ACS and the developer. Thus the names for plugins, ports and properties in the bundle descriptor should be as intuitive as possible. Names in the bundle descriptor should not include prefixes because the added information is also conveyed in the presentation of plugins in the ACS.")]),t._v(" "),a("p",[t._v("The bundle descriptor can translate intuitive names (e.g. input.switch) to the canonical names of plugins (e.g. GpioInputInstance) allowing coexistence of a user and a developer language. This method of name translation can be applied for plugin names, port names and property names.")]),t._v(" "),a("h2",{attrs:{id:"asterics-are-service-and-plugin-source-file-header"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#asterics-are-service-and-plugin-source-file-header"}},[t._v("#")]),t._v(" AsTeRICS ARE, service and plugin source file header")]),t._v(" "),a("p",[t._v("Each source file of ARE, of ARE services, ARE plugins and tools which will be released as open source should have the following header:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/*\n * AsTeRICS - Assistive Technology Rapid Integration and Construction Set\n * \n * \n * d8888 88888888888 8888888b. 8888888 .d8888b. .d8888b. \n * d88888 888 888 Y88b 888 d88P Y88b d88P Y88b\n * d88P888 888 888 888 888 888 888 Y88b. \n * d88P 888 .d8888b 888 .d88b. 888 d88P 888 888 "Y888b. \n * d88P 888 88K 888 d8P Y8b 8888888P" 888 888 "Y88b.\n * d88P 888 "Y8888b. 888 88888888 888 T88b 888 888 888 "888\n * d8888888888 X88 888 Y8b. 888 T88b 888 Y88b d88P Y88b d88P\n * d88P 888 88888P\' 888 "Y8888 888 T88b 8888888 "Y8888P" "Y8888P" \n *\n *\n * homepage: http://www.asterics.org \n *\n * This project has been partly funded by the European Commission, \n * Grant Agreement Number 247730\n * \n * \n * Dual License: MIT or GPL v3.0 with "CLASSPATH" exception\n * (please refer to the folder LICENSE)\n * \n */')]),t._v("\n")])])]),a("h2",{attrs:{id:"javadoc-compatible-comments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javadoc-compatible-comments"}},[t._v("#")]),t._v(" JavaDoc compatible comments")]),t._v(" "),a("p",[t._v("JavaDoc compatible comments should be used to indicate the author of a source file, and to describe the purpose of a function/method/class and the respective parameters and return values.")]),t._v(" "),a("p",[t._v("Example for a source file header info:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Bardisplayinstance.java\n * Purpose of this module:\n * Implements the Bardisplay actuator plugin\n * \n * @author Chris Veigl [veigl@technikum-wien.at]\n * Date: Mar 7, 2011\n */")]),t._v("\n")])])]),a("p",[t._v("Example for a method of a class:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n* Returns the value of the given property\n* @param propertyName the name of the property\n* @return the property value\n*/")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("h2",{attrs:{id:"implementing-asterics-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementing-asterics-components"}},[t._v("#")]),t._v(" Implementing AsTeRICS components")]),t._v(" "),a("p",[t._v("This section describes the basic steps required for implementing an AsTeRICS component including a brief introduction to OSGi. To illustrate the implementation steps, we take a walk-through with the implementation of a simple processor component.")]),t._v(" "),a("p",[t._v("The AsTeRICS schemata of the XML descriptors include two concepts: the "),a("em",[t._v("bundle descriptors")]),t._v(" and the "),a("em",[t._v("deployment descriptors")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"the-bundle-descriptors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-bundle-descriptors"}},[t._v("#")]),t._v(" The Bundle Descriptors")]),t._v(" "),a("p",[t._v("Bundle descriptors are used to describe the content of an individual bundle (typically encapsulating one or more components). As such, they contain information about the included "),a("em",[t._v("components")]),t._v(", their "),a("em",[t._v("ports")]),t._v(", their customizable "),a("em",[t._v("properties")]),t._v(" and optionally their GUI.")]),t._v(" "),a("p",[t._v("The following shows a bundle descriptor of a simple processor-plugin (subtype for the ACS components menu is “Basic Math”). The plugin provides an averaging function for n values (property “buffer-size”) and has one input port and one output port for integer values:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentTypes")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bundle_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentType")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.averager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("canonical_name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("eu.asterics.component.processor.averager.AveragerComponent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("subtype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Basic Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("processor"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Linked list-based averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Input port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("multiplicity")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("one-to-one"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mustBeConnected")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("true"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("out_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Output port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("buffer-size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("50"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("The size of the averager's buffer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-deployment-descriptor"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-deployment-descriptor"}},[t._v("#")]),t._v(" The Deployment Descriptor")]),t._v(" "),a("p",[t._v("Deployment descriptors instruct the ARE of the desired application deployment structure. The deployment descriptor is typically composed in the AsTeRICS Configuration Suite (ACS) but can also be written with a text editor (as the bundle descriptor). Basically the deployment descriptor contains several component descriptions (copied from the corresponding bundle descriptors), actual property values and the channel connection between input- and output ports of the components.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The "),a("em",[t._v("type_id")]),t._v(" argument of the "),a("em",[t._v("component")]),t._v(" element in the deployment descriptor must match the "),a("em",[t._v("id")]),t._v(" argument of the "),a("em",[t._v("componentType")]),t._v(" element on the bundle descriptor. This is how the ARE detects the referred plugin type in the deployment model.")])]),t._v(" "),a("p",[t._v("The following demo deployment descriptor describes a simple model containing two plugins and one channel:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("model")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("deployment_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("components")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Source of two signal cahnnels "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Signal Target"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channels")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("channel.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Connects SignalSource.1 (outport 1) \n to SignalTarget.1 (in_x)"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("source")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-manifest-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-manifest-file"}},[t._v("#")]),t._v(" The Manifest file")]),t._v(" "),a("p",[t._v("The Manifest file tells the bundle name and other informations like import packages and .dlls to the OSGi. A typical Manifest looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-processors.averager\nBundle-SymbolicName: eu.asterics.component.processor.averager\nBundle-Version: 0.1.0\nDynamicImport-Package: *\n\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The empty line at the end of the Manifest file. It seems that OSGi needs that empty line in order to work properly.")])]),t._v(" "),a("h2",{attrs:{id:"structure-of-osgi-bundles-containing-are-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-osgi-bundles-containing-are-components"}},[t._v("#")]),t._v(" Structure of OSGi bundles containing ARE components")]),t._v(" "),a("p",[t._v("As a common OSGi bundle, an AsTeRICS component must be packaged in a JAR file, containing the class files (object code) and the Manifest file. In addition to these, the AsTeRICS middleware expects the "),a("em",[t._v("bundle descriptor")]),t._v(". At this point, it should be noted that it is possible to include "),a("em",[t._v("multiple")]),t._v(" AsTeRICS components in a single OSGi bundle, as long as the bundle descriptor describes all of them.")]),t._v(" "),a("p",[t._v("Overall, the file structure in a typical AsTeRICS bundle looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("/\n+- eu/\n +- asterics/\n +- component/\n +- ...\n+- lib/\n +- native/\n +- my_library.dll\n+- META-INF/\n +- MANIFEST.MF\n+- bundle_descriptor.xml\n")])])]),a("p",[t._v("The Java object code is included in the corresponding folders representing the package structure (e.g., “/eu/asterics/component/…” etc). Optionally, if libraries are needed - native or not-, then they are included in the “/lib” folder. The Manifest is included in the “META-INF” folder as per the standard Java/OSGi practice. Finally, the AsTeRICS bundle descriptor is included directly in the root of the JAR file (i.e. “/”).")]),t._v(" "),a("h2",{attrs:{id:"component-lifecyle"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#component-lifecyle"}},[t._v("#")]),t._v(" Component lifecyle")]),t._v(" "),a("p",[t._v("An ARE component implementation needs to realise the actual component with its lifecycle (i.e., ways to access its ports and properties, and methods realizing its lifecycle). This is illustrated in the following code:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Lifecycle support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("pause")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resume")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Component support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeOutputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOutputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventListenerPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventListenerPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventTriggererPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventTriggererPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" newValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" syncedValuesReceived "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[a("img",{attrs:{src:s(296),alt:""}})]),t._v(" "),a("p",[t._v("The lifecycle support methods are used to intercept AsTeRICS events concerning the component’s lifecycle. In principle, a component can be any of the following:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("READY,")])]),t._v(" "),a("li",[a("p",[t._v("ACTIVE,")])]),t._v(" "),a("li",[a("p",[t._v("SUSPENDED and")])]),t._v(" "),a("li",[a("p",[t._v("STOPPED")])])]),t._v(" "),a("p",[t._v("These states and their possible transitions are illustrated in the figure on the right:")]),t._v(" "),a("p",[t._v("The rest of the methods are used for supporting the component operations, namely accessing the input/output ports of the component, as well as getting/setting its supported properties.")]),t._v(" "),a("h2",{attrs:{id:"threading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#threading"}},[t._v("#")]),t._v(" Threading")]),t._v(" "),a("p",[t._v("For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"writing-plugins-using-swing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-plugins-using-swing"}},[t._v("#")]),t._v(" Writing plugins using Swing")]),t._v(" "),a("p",[t._v("If a plugin provides a Swing GUI it should only use the asynchronous method")]),t._v(" "),a("p",[a("code",[t._v("SwingUtilities.invokeLater(…)")])]),t._v(" "),a("p",[t._v("(and not the synchronous one) to perform the GUI updates. This is to prevent a potential thread deadlock if an action was originally triggered by a Swing GUI event e.g. by a button click in the ARE GUI. For detailed information about the ARE threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"long-lasting-method-calls"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#long-lasting-method-calls"}},[t._v("#")]),t._v(" Long lasting method calls")]),t._v(" "),a("p",[t._v("If a method call performs a long lasting task and there is no need to await the termination of it, the task should be handed over to a worker thread (see 5.9) to not block ModelExecutor thread. For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"sensor-callbacks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sensor-callbacks"}},[t._v("#")]),t._v(" Sensor callbacks")]),t._v(" "),a("p",[t._v("In case you write a plugin that uses a separate thread to generate data (e.g. FrameGrabber, Timer,…) you should explicitly use the method")]),t._v(" "),a("p",[a("code",[t._v("AstericsModelExecutionThreadPool.instance.execute(…)")])]),t._v(" "),a("p",[t._v("This is to ensure that corresponding data will be delivered within the same task execution. For detailed information about the threading concept see 9. Below is an example of the FacetrackerLK plugin in the callback method for new arriving coordinates:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("newCoordinates_callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsModelExecutionThreadPool")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("execute")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Runnable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n opNoseX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opNoseY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"contributing-a-developed-plugin-git-pull-request"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contributing-a-developed-plugin-git-pull-request"}},[t._v("#")]),t._v(" Contributing a developed plugin (git pull request)")]),t._v(" "),a("p",[t._v("The AsTeRICS platform is designed as an open and modular platform. The idea is to make it easy for others to develop assistive plugins any end-user in the world could benefit from. Hence, we would love to get your contribution back to the github repository to be able to ship the new plugin with future releases. For this purpose, please send a pull request.")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://help.github.com/articles/using-pull-requests/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://help.github.com/articles/using-pull-requests/"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{296:function(t,a,s){t.exports=s.p+"assets/img/DeveloperManual_html_17298a48a6d250c5.fbefb96e.png"},986:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"plugin-development-advanced"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#plugin-development-advanced"}},[t._v("#")]),t._v(" Plugin Development Advanced")]),t._v(" "),a("p",[t._v("In this manual some advanced topics of plugin development are listed.")]),t._v(" "),a("h2",{attrs:{id:"port-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#port-naming-conventions"}},[t._v("#")]),t._v(" Port Naming Conventions")]),t._v(" "),a("p",[t._v("Variables of port instances should be named with a prefix indicating what kind of port it is. The rest of the port name should indicate the port’s use and adhere to the standard Java variable naming conventions. The available prefixes are:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("ip: indicates that the port is an instance of IRuntimeInputPort")])]),t._v(" "),a("li",[a("p",[t._v("op: indicates that the port is an instance of IRuntimeOutputPort")])]),t._v(" "),a("li",[a("p",[t._v("elp: indicates that the port is an instance of IRuntimeEventListenerPort")])]),t._v(" "),a("li",[a("p",[t._v("etp: indicates that the port is an instance of IRuntimeEventTriggererPort")])])]),t._v(" "),a("p",[t._v("A variable holding an event listener port could therefore be named "),a("em",[t._v("elpKeyPressed")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"property-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#property-naming-conventions"}},[t._v("#")]),t._v(" Property Naming Conventions")]),t._v(" "),a("p",[t._v("Plugin properties should be directly mapped to a variable in the plugin code. The variable’s should be prepended with the prefix "),a("em",[t._v("prop")]),t._v(" and adhere to standard Java naming conventions. Thus a property could be named "),a("em",[t._v("InputGainValue")]),t._v(" and the corresponding variable should be named "),a("em",[t._v("propInputGainValue")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"bundle-descriptor-naming-conventions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bundle-descriptor-naming-conventions"}},[t._v("#")]),t._v(" Bundle Descriptor Naming Conventions")]),t._v(" "),a("p",[t._v("The bundle descriptor should serve as an abstraction layer between the user who creates models in the ACS and the developer. Thus the names for plugins, ports and properties in the bundle descriptor should be as intuitive as possible. Names in the bundle descriptor should not include prefixes because the added information is also conveyed in the presentation of plugins in the ACS.")]),t._v(" "),a("p",[t._v("The bundle descriptor can translate intuitive names (e.g. input.switch) to the canonical names of plugins (e.g. GpioInputInstance) allowing coexistence of a user and a developer language. This method of name translation can be applied for plugin names, port names and property names.")]),t._v(" "),a("h2",{attrs:{id:"asterics-are-service-and-plugin-source-file-header"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#asterics-are-service-and-plugin-source-file-header"}},[t._v("#")]),t._v(" AsTeRICS ARE, service and plugin source file header")]),t._v(" "),a("p",[t._v("Each source file of ARE, of ARE services, ARE plugins and tools which will be released as open source should have the following header:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/*\n * AsTeRICS - Assistive Technology Rapid Integration and Construction Set\n * \n * \n * d8888 88888888888 8888888b. 8888888 .d8888b. .d8888b. \n * d88888 888 888 Y88b 888 d88P Y88b d88P Y88b\n * d88P888 888 888 888 888 888 888 Y88b. \n * d88P 888 .d8888b 888 .d88b. 888 d88P 888 888 "Y888b. \n * d88P 888 88K 888 d8P Y8b 8888888P" 888 888 "Y88b.\n * d88P 888 "Y8888b. 888 88888888 888 T88b 888 888 888 "888\n * d8888888888 X88 888 Y8b. 888 T88b 888 Y88b d88P Y88b d88P\n * d88P 888 88888P\' 888 "Y8888 888 T88b 8888888 "Y8888P" "Y8888P" \n *\n *\n * homepage: http://www.asterics.org \n *\n * This project has been partly funded by the European Commission, \n * Grant Agreement Number 247730\n * \n * \n * Dual License: MIT or GPL v3.0 with "CLASSPATH" exception\n * (please refer to the folder LICENSE)\n * \n */')]),t._v("\n")])])]),a("h2",{attrs:{id:"javadoc-compatible-comments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javadoc-compatible-comments"}},[t._v("#")]),t._v(" JavaDoc compatible comments")]),t._v(" "),a("p",[t._v("JavaDoc compatible comments should be used to indicate the author of a source file, and to describe the purpose of a function/method/class and the respective parameters and return values.")]),t._v(" "),a("p",[t._v("Example for a source file header info:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Bardisplayinstance.java\n * Purpose of this module:\n * Implements the Bardisplay actuator plugin\n * \n * @author Chris Veigl [veigl@technikum-wien.at]\n * Date: Mar 7, 2011\n */")]),t._v("\n")])])]),a("p",[t._v("Example for a method of a class:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n* Returns the value of the given property\n* @param propertyName the name of the property\n* @return the property value\n*/")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("h2",{attrs:{id:"implementing-asterics-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementing-asterics-components"}},[t._v("#")]),t._v(" Implementing AsTeRICS components")]),t._v(" "),a("p",[t._v("This section describes the basic steps required for implementing an AsTeRICS component including a brief introduction to OSGi. To illustrate the implementation steps, we take a walk-through with the implementation of a simple processor component.")]),t._v(" "),a("p",[t._v("The AsTeRICS schemata of the XML descriptors include two concepts: the "),a("em",[t._v("bundle descriptors")]),t._v(" and the "),a("em",[t._v("deployment descriptors")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"the-bundle-descriptors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-bundle-descriptors"}},[t._v("#")]),t._v(" The Bundle Descriptors")]),t._v(" "),a("p",[t._v("Bundle descriptors are used to describe the content of an individual bundle (typically encapsulating one or more components). As such, they contain information about the included "),a("em",[t._v("components")]),t._v(", their "),a("em",[t._v("ports")]),t._v(", their customizable "),a("em",[t._v("properties")]),t._v(" and optionally their GUI.")]),t._v(" "),a("p",[t._v("The following shows a bundle descriptor of a simple processor-plugin (subtype for the ACS components menu is “Basic Math”). The plugin provides an averaging function for n values (property “buffer-size”) and has one input port and one output port for integer values:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentTypes")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bundle_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("componentType")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.averager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("canonical_name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("eu.asterics.component.processor.averager.AveragerComponent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("type")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("subtype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Basic Math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("processor"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Linked list-based averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Input port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("multiplicity")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("one-to-one"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mustBeConnected")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("true"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("out_1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Output port of averager"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dataType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("buffer-size"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("50"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("The size of the averager's buffer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-deployment-descriptor"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-deployment-descriptor"}},[t._v("#")]),t._v(" The Deployment Descriptor")]),t._v(" "),a("p",[t._v("Deployment descriptors instruct the ARE of the desired application deployment structure. The deployment descriptor is typically composed in the AsTeRICS Configuration Suite (ACS) but can also be written with a text editor (as the bundle descriptor). Basically the deployment descriptor contains several component descriptions (copied from the corresponding bundle descriptors), actual property values and the channel connection between input- and output ports of the components.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The "),a("em",[t._v("type_id")]),t._v(" argument of the "),a("em",[t._v("component")]),t._v(" element in the deployment descriptor must match the "),a("em",[t._v("id")]),t._v(" argument of the "),a("em",[t._v("componentType")]),t._v(" element on the bundle descriptor. This is how the ARE detects the referred plugin type in the deployment model.")])]),t._v(" "),a("p",[t._v("The following demo deployment descriptor describes a simple model containing two plugins and one channel:")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("model")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xmlns:")]),t._v("xsi")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.w3.org/2001/XMLSchema-instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("xsi:")]),t._v("noNamespaceSchemaLocation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("deployment_model.xsd"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("components")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Source of two signal cahnnels "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("outputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("properties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type_id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("A Signal Target"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ports")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("inputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("portTypeID")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channels")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("channel")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("channel.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("description")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Connects SignalSource.1 (outport 1) \n to SignalTarget.1 (in_x)"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("source")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sensor.SignalSource.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("outport1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("component")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("actuator.SignalTarget.1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("port")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("in_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"the-manifest-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-manifest-file"}},[t._v("#")]),t._v(" The Manifest file")]),t._v(" "),a("p",[t._v("The Manifest file tells the bundle name and other informations like import packages and .dlls to the OSGi. A typical Manifest looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-processors.averager\nBundle-SymbolicName: eu.asterics.component.processor.averager\nBundle-Version: 0.1.0\nDynamicImport-Package: *\n\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("The empty line at the end of the Manifest file. It seems that OSGi needs that empty line in order to work properly.")])]),t._v(" "),a("h2",{attrs:{id:"structure-of-osgi-bundles-containing-are-components"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-osgi-bundles-containing-are-components"}},[t._v("#")]),t._v(" Structure of OSGi bundles containing ARE components")]),t._v(" "),a("p",[t._v("As a common OSGi bundle, an AsTeRICS component must be packaged in a JAR file, containing the class files (object code) and the Manifest file. In addition to these, the AsTeRICS middleware expects the "),a("em",[t._v("bundle descriptor")]),t._v(". At this point, it should be noted that it is possible to include "),a("em",[t._v("multiple")]),t._v(" AsTeRICS components in a single OSGi bundle, as long as the bundle descriptor describes all of them.")]),t._v(" "),a("p",[t._v("Overall, the file structure in a typical AsTeRICS bundle looks as follows:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("/\n+- eu/\n +- asterics/\n +- component/\n +- ...\n+- lib/\n +- native/\n +- my_library.dll\n+- META-INF/\n +- MANIFEST.MF\n+- bundle_descriptor.xml\n")])])]),a("p",[t._v("The Java object code is included in the corresponding folders representing the package structure (e.g., “/eu/asterics/component/…” etc). Optionally, if libraries are needed - native or not-, then they are included in the “/lib” folder. The Manifest is included in the “META-INF” folder as per the standard Java/OSGi practice. Finally, the AsTeRICS bundle descriptor is included directly in the root of the JAR file (i.e. “/”).")]),t._v(" "),a("h2",{attrs:{id:"component-lifecyle"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#component-lifecyle"}},[t._v("#")]),t._v(" Component lifecyle")]),t._v(" "),a("p",[t._v("An ARE component implementation needs to realise the actual component with its lifecycle (i.e., ways to access its ports and properties, and methods realizing its lifecycle). This is illustrated in the following code:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("runtime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("interface")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Lifecycle support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("start")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("pause")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resume")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stop")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ------------------ Component support methods ------------------------- //")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeOutputPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOutputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventListenerPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventListenerPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeEventTriggererPort")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEventTriggererPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" eventPortID"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRuntimePropertyValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" propertyName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" newValue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" syncedValuesReceived "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[a("img",{attrs:{src:s(296),alt:""}})]),t._v(" "),a("p",[t._v("The lifecycle support methods are used to intercept AsTeRICS events concerning the component’s lifecycle. In principle, a component can be any of the following:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("READY,")])]),t._v(" "),a("li",[a("p",[t._v("ACTIVE,")])]),t._v(" "),a("li",[a("p",[t._v("SUSPENDED and")])]),t._v(" "),a("li",[a("p",[t._v("STOPPED")])])]),t._v(" "),a("p",[t._v("These states and their possible transitions are illustrated in the figure on the right:")]),t._v(" "),a("p",[t._v("The rest of the methods are used for supporting the component operations, namely accessing the input/output ports of the component, as well as getting/setting its supported properties.")]),t._v(" "),a("h2",{attrs:{id:"threading"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#threading"}},[t._v("#")]),t._v(" Threading")]),t._v(" "),a("p",[t._v("For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"writing-plugins-using-swing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#writing-plugins-using-swing"}},[t._v("#")]),t._v(" Writing plugins using Swing")]),t._v(" "),a("p",[t._v("If a plugin provides a Swing GUI it should only use the asynchronous method")]),t._v(" "),a("p",[a("code",[t._v("SwingUtilities.invokeLater(…)")])]),t._v(" "),a("p",[t._v("(and not the synchronous one) to perform the GUI updates. This is to prevent a potential thread deadlock if an action was originally triggered by a Swing GUI event e.g. by a button click in the ARE GUI. For detailed information about the ARE threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"long-lasting-method-calls"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#long-lasting-method-calls"}},[t._v("#")]),t._v(" Long lasting method calls")]),t._v(" "),a("p",[t._v("If a method call performs a long lasting task and there is no need to await the termination of it, the task should be handed over to a worker thread (see 5.9) to not block ModelExecutor thread. For detailed information about the threading concept see 9.")]),t._v(" "),a("h2",{attrs:{id:"sensor-callbacks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sensor-callbacks"}},[t._v("#")]),t._v(" Sensor callbacks")]),t._v(" "),a("p",[t._v("In case you write a plugin that uses a separate thread to generate data (e.g. FrameGrabber, Timer,…) you should explicitly use the method")]),t._v(" "),a("p",[a("code",[t._v("AstericsModelExecutionThreadPool.instance.execute(…)")])]),t._v(" "),a("p",[t._v("This is to ensure that corresponding data will be delivered within the same task execution. For detailed information about the threading concept see 9. Below is an example of the FacetrackerLK plugin in the callback method for new arriving coordinates:")]),t._v(" "),a("div",{staticClass:"language-java extra-class"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("newCoordinates_callback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsModelExecutionThreadPool")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("execute")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Runnable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n opNoseX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opNoseY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point1_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinX"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n opChinY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConversionUtils")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("intToBytes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("point2_y"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"contributing-a-developed-plugin-git-pull-request"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contributing-a-developed-plugin-git-pull-request"}},[t._v("#")]),t._v(" Contributing a developed plugin (git pull request)")]),t._v(" "),a("p",[t._v("The AsTeRICS platform is designed as an open and modular platform. The idea is to make it easy for others to develop assistive plugins any end-user in the world could benefit from. Hence, we would love to get your contribution back to the github repository to be able to ship the new plugin with future releases. For this purpose, please send a pull request.")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://help.github.com/articles/using-pull-requests/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://help.github.com/articles/using-pull-requests/"),a("OutboundLink")],1)])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/117.18a42da2.js b/assets/js/117.0c5d5cd8.js similarity index 99% rename from assets/js/117.18a42da2.js rename to assets/js/117.0c5d5cd8.js index 73e7bae51f..39ad017890 100644 --- a/assets/js/117.18a42da2.js +++ b/assets/js/117.0c5d5cd8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{427:function(t,s,a){t.exports=a.p+"assets/img/Resource-Handling-BuildPath.c215c1df.jpg"},989:function(t,s,a){"use strict";a.r(s);var e=a(2),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"resource-handling-resourceregistry"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resource-handling-resourceregistry"}},[t._v("#")]),t._v(" Resource Handling (ResourceRegistry)")]),t._v(" "),s("h2",{attrs:{id:"objective"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[t._v("#")]),t._v(" Objective")]),t._v(" "),s("p",[t._v("In this tutorial you will learn how to use the class ResourceRegistry, which is a central repository that must be used to compose resource URIs and fetch and store resource contents from within plugins and the whole ARE.")]),t._v(" "),s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("The idea is to generically implement the fetching of resources to enable the same approach for the whole AsTeRICS framework. This way all plugins, services and other classes will be able to also support several URI schemes (e.g. file, http, jar,…). Furthermore base URIs can be reconfigured depending on platform specific or usecase specific requirements (e.g. readonly plugin respository hosted on a webserver). Currently only one file based repository URI ("),s("code",[t._v("ARE baseURI")]),t._v(") is supported. Later maybe the repository URIs could also be an http-URL and the plugin resources directly fetched from there.")]),t._v(" "),s("p",[t._v("The "),s("code",[t._v("ARE baseURI")]),t._v(" is set to the location of the ARE.jar file by default, but can be set to another location by the method "),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L852",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("public void setAREBaseURI(URI areBaseURI)")]),s("OutboundLink")],1),t._v(" programmatically.")]),t._v(" "),s("h2",{attrs:{id:"main-benefits"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#main-benefits"}},[t._v("#")]),t._v(" Main benefits")]),t._v(" "),s("ul",[s("li",[t._v("Abstraction of ARE folder structure: So if folder structure changes models are not affected.")]),t._v(" "),s("li",[t._v("Centralized dealing with platform specific problems ("),s("code",[t._v("\\")]),t._v(", "),s("code",[t._v("/")]),t._v(", conversion between URI encoded path and file path,…)")]),t._v(" "),s("li",[t._v("Dealing with relative and absolute file paths.")]),t._v(" "),s("li",[t._v("By using URI syntax for describing the path of a resource, resources can be of different protocol types (file, http, …)")]),t._v(" "),s("li",[t._v("Many utility methods for checking resource existence and conversion between several types (File, String, URI,…)")]),t._v(" "),s("li",[t._v("Convinience methods for fetching resource contents or storing contents, ensuring proper encoding (UTF-8) and exception handling.")]),t._v(" "),s("li",[t._v("Centralized implementation of searching strategies for resources, e.g. Search in user home directory first and if not found search in ARE installation directory. (not supported yet)")]),t._v(" "),s("li",[t._v("Configurable base URIs depending on resource type (not supported yet)")])]),t._v(" "),s("h2",{attrs:{id:"resource-types"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resource-types"}},[t._v("#")]),t._v(" Resource types")]),t._v(" "),s("p",[t._v("As part of the abstraction, class ResourceRegistry provides several resource types ("),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L482",target:"_blank",rel:"noopener noreferrer"}},[t._v("RES_TYPE enum"),s("OutboundLink")],1),t._v("), which are then mapped to real folders (or maybe later to http-URLs depending on the supported ARE baseURI protocols).")]),t._v(" "),s("p",[t._v("As of AsTeRICS 3.0, these are:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("MODEL")]),t._v(": Mapped to "),s("code",[t._v("/models/")])]),t._v(" "),s("li",[s("strong",[t._v("DATA")]),t._v(": Four step approach to search for a data file in either "),s("code",[t._v("/models/")]),t._v(" or "),s("code",[t._v("/data/")]),t._v(" or a subfolder of it.")]),t._v(" "),s("li",[s("strong",[t._v("JAR")]),t._v(": Mapped to "),s("code",[t._v("/")])]),t._v(" "),s("li",[s("strong",[t._v("PROFILE")]),t._v(": Mapped to "),s("code",[t._v("/profile/")])]),t._v(" "),s("li",[s("strong",[t._v("STORAGE")]),t._v(": Mapped to "),s("code",[t._v("/storage/")])]),t._v(" "),s("li",[s("strong",[t._v("LICENSE")]),t._v(": Mapped to "),s("code",[t._v("/LICENSE/")])]),t._v(" "),s("li",[s("strong",[t._v("IMAGE")]),t._v(": Mapped to "),s("code",[t._v("/images/")])]),t._v(" "),s("li",[s("strong",[t._v("TMP")]),t._v(": Mapped to "),s("code",[t._v("/tmp/")])]),t._v(" "),s("li",[s("strong",[t._v("WEB_DOCUMENT_ROOT")]),t._v(": Mapped to "),s("code",[t._v("/web/")])]),t._v(" "),s("li",[s("strong",[t._v("ANY")]),t._v(": Mapped to "),s("code",[t._v("/")])])]),t._v(" "),s("h2",{attrs:{id:"prerequisites"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("Java IDE ("),s("a",{attrs:{href:"http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neon3",target:"_blank",rel:"noopener noreferrer"}},[t._v("Eclipse"),s("OutboundLink")],1),t._v(" recommended)")]),t._v(" "),s("li",[s("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java Development Kit 8"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"preparation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#preparation"}},[t._v("#")]),t._v(" Preparation")]),t._v(" "),s("p",[t._v("This tutorial demonstrates how to use the API of class ResourceRegistry in general. The tutorial does not show how to create an "),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Plugin-Development",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS plugin"),s("OutboundLink")],1),t._v(" where the API would be used normally.")]),t._v(" "),s("ol",[s("li",[t._v("Start Eclipse")]),t._v(" "),s("li",[t._v("Create a new Java project ("),s("code",[t._v("File/New/Java Project")]),t._v(")")]),t._v(" "),s("li",[t._v("Add the following libraries to the build configuration ("),s("code",[t._v("Project/Properties/Java Build Path/Libraries")]),t._v(")")])]),t._v(" "),s("ul",[s("li",[s("code",[t._v("/asterics.ARE.jar")])]),t._v(" "),s("li",[s("code",[t._v("/../APE/lib/commons-io-2.4.jar")])]),t._v(" "),s("li",[s("code",[t._v("/../APE/lib/commons-codec-1.11.jar")])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(427),alt:"Build path dialog with external libraries"}})]),t._v(" "),s("ol",{attrs:{start:"4"}},[s("li",[t._v("Create a main class "),s("code",[t._v("ResourceRegistryExamples")]),t._v(" and copy and paste the following template code into it")])]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("net"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URI")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("net"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("services"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("services"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RES_TYPE")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistryExamples")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" args"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Don't call these two lines if you are using the class ResourceRegistry from within the ARE (plugin).")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// setOSGIMode(false) defines that we are using it as a library.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setOSGIMode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// setAREBaseURI(URI ...) sets the location of the ARE.jar file, which will be set automatically when used within")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the ARE. If you are on Linux use the respective path of /bin/ARE")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAREBaseURI")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"C:\\\\Program Files (x86)\\\\AsTeRICS\\\\ARE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toURI")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Define variables for our examples.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URI")]),t._v(" myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"example-1-getting-resource-uri"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-1-getting-resource-uri"}},[t._v("#")]),t._v(" Example 1 - Getting resource URI")]),t._v(" "),s("h3",{attrs:{id:"get-model-uri"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-model-uri"}},[t._v("#")]),t._v(" Get model URI")]),t._v(" "),s("p",[t._v("To get the URI of a model file normally located at "),s("code",[t._v("/models/")]),t._v(" or a subpath of it, use")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CameraMouse.acs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MODEL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grids\\\\eyeX_Environment\\\\eyeX_Environment.acs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MODEL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// TODO Auto-generated catch block")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("This returns a valid URI if one can be constructed. The method does not check for resource existence.")]),t._v(" "),s("h3",{attrs:{id:"get-uri-of-a-data-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-uri-of-a-data-file"}},[t._v("#")]),t._v(" Get URI of a data file")]),t._v(" "),s("p",[t._v("To get the URIs of files with resource type data, use")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pictures/slide7.jpg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//slashes may be \\\\ or / and even mixed up. The paths may contain spaces")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pictures\\\\symbols//walk the dog.png"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//To indicate that a data file is in a plugin-specific subpath of the data folder, use the overridden getResource method ")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//and provide the componentTypeId")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"haarcascade_frontalface_alt.xml"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"facetrackerLK"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If you provide an absolute URI/URL it is returned as is, withou resolving it against the ARE baseURI.")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://raw.githubusercontent.com/wiki/asterics/AsTeRICS/Fetching-resources-with-class-ResourceRegistry.md"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"example-2-getting-resource-content"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-2-getting-resource-content"}},[t._v("#")]),t._v(" Example 2 - Getting resource content")]),t._v(" "),s("p",[t._v("To get the contents of a resource as a String, use")]),t._v(" "),s("div",{staticClass:"language-Java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResourceContentAsString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CameraMouse.acs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MODEL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contents"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResourceContentAsString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://raw.githubusercontent.com/wiki/asterics/AsTeRICS/Fetching-resources-with-class-ResourceRegistry.md"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANY")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contents"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// TODO Auto-generated catch block")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("When reading the resource content, character encoding is guessed best effort using the class "),s("a",{attrs:{href:"https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/input/BOMInputStream.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("BOMInputStream"),s("OutboundLink")],1),t._v(", with or without "),s("code",[t._v("ByteOrderMark")])]),t._v(" "),s("h2",{attrs:{id:"example-3-storing-resource-content"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-3-storing-resource-content"}},[t._v("#")]),t._v(" Example 3 - Storing resource content")]),t._v(" "),s("p",[t._v("To store contents to a resource location, use")]),t._v(" "),s("div",{staticClass:"language-Java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My new test data to save."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("storeResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contents"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"saveddata/testFile.txt"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The method automatically creates missing directories in the path (if supported by the used protocol, e.g. file://) and ensures proper "),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/v3.0/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L94",target:"_blank",rel:"noopener noreferrer"}},[t._v("UTF8 character encoding"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"example-4-getting-a-resource-list"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-4-getting-a-resource-list"}},[t._v("#")]),t._v(" Example 4 - Getting a resource list")]),t._v(" "),s("p",[t._v("To get a list of models or data files, use")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Returns the URIs of all model resources")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("URI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" modelList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getModelList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Returns the URIs of all data resources")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("URI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" dataList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDataList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If the element's type must be of String, you can convert it")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" modelListAsStrings"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toStringList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("modelList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("The parameter of "),s("code",[t._v("getModelList")]),t._v(" or "),s("code",[t._v("getDataList")]),t._v(" defines, if the paths should be relative or absolute.")]),t._v(" "),s("h2",{attrs:{id:"references"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L53",target:"_blank",rel:"noopener noreferrer"}},[t._v("Source code of class ResourceRegistry"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/test/java/eu/asterics/mw/services/TestResourceRegistry.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Unit tests with usage examples"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{427:function(t,s,a){t.exports=a.p+"assets/img/Resource-Handling-BuildPath.c215c1df.jpg"},990:function(t,s,a){"use strict";a.r(s);var e=a(2),n=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"resource-handling-resourceregistry"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resource-handling-resourceregistry"}},[t._v("#")]),t._v(" Resource Handling (ResourceRegistry)")]),t._v(" "),s("h2",{attrs:{id:"objective"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[t._v("#")]),t._v(" Objective")]),t._v(" "),s("p",[t._v("In this tutorial you will learn how to use the class ResourceRegistry, which is a central repository that must be used to compose resource URIs and fetch and store resource contents from within plugins and the whole ARE.")]),t._v(" "),s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("The idea is to generically implement the fetching of resources to enable the same approach for the whole AsTeRICS framework. This way all plugins, services and other classes will be able to also support several URI schemes (e.g. file, http, jar,…). Furthermore base URIs can be reconfigured depending on platform specific or usecase specific requirements (e.g. readonly plugin respository hosted on a webserver). Currently only one file based repository URI ("),s("code",[t._v("ARE baseURI")]),t._v(") is supported. Later maybe the repository URIs could also be an http-URL and the plugin resources directly fetched from there.")]),t._v(" "),s("p",[t._v("The "),s("code",[t._v("ARE baseURI")]),t._v(" is set to the location of the ARE.jar file by default, but can be set to another location by the method "),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L852",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("public void setAREBaseURI(URI areBaseURI)")]),s("OutboundLink")],1),t._v(" programmatically.")]),t._v(" "),s("h2",{attrs:{id:"main-benefits"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#main-benefits"}},[t._v("#")]),t._v(" Main benefits")]),t._v(" "),s("ul",[s("li",[t._v("Abstraction of ARE folder structure: So if folder structure changes models are not affected.")]),t._v(" "),s("li",[t._v("Centralized dealing with platform specific problems ("),s("code",[t._v("\\")]),t._v(", "),s("code",[t._v("/")]),t._v(", conversion between URI encoded path and file path,…)")]),t._v(" "),s("li",[t._v("Dealing with relative and absolute file paths.")]),t._v(" "),s("li",[t._v("By using URI syntax for describing the path of a resource, resources can be of different protocol types (file, http, …)")]),t._v(" "),s("li",[t._v("Many utility methods for checking resource existence and conversion between several types (File, String, URI,…)")]),t._v(" "),s("li",[t._v("Convinience methods for fetching resource contents or storing contents, ensuring proper encoding (UTF-8) and exception handling.")]),t._v(" "),s("li",[t._v("Centralized implementation of searching strategies for resources, e.g. Search in user home directory first and if not found search in ARE installation directory. (not supported yet)")]),t._v(" "),s("li",[t._v("Configurable base URIs depending on resource type (not supported yet)")])]),t._v(" "),s("h2",{attrs:{id:"resource-types"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resource-types"}},[t._v("#")]),t._v(" Resource types")]),t._v(" "),s("p",[t._v("As part of the abstraction, class ResourceRegistry provides several resource types ("),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L482",target:"_blank",rel:"noopener noreferrer"}},[t._v("RES_TYPE enum"),s("OutboundLink")],1),t._v("), which are then mapped to real folders (or maybe later to http-URLs depending on the supported ARE baseURI protocols).")]),t._v(" "),s("p",[t._v("As of AsTeRICS 3.0, these are:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("MODEL")]),t._v(": Mapped to "),s("code",[t._v("/models/")])]),t._v(" "),s("li",[s("strong",[t._v("DATA")]),t._v(": Four step approach to search for a data file in either "),s("code",[t._v("/models/")]),t._v(" or "),s("code",[t._v("/data/")]),t._v(" or a subfolder of it.")]),t._v(" "),s("li",[s("strong",[t._v("JAR")]),t._v(": Mapped to "),s("code",[t._v("/")])]),t._v(" "),s("li",[s("strong",[t._v("PROFILE")]),t._v(": Mapped to "),s("code",[t._v("/profile/")])]),t._v(" "),s("li",[s("strong",[t._v("STORAGE")]),t._v(": Mapped to "),s("code",[t._v("/storage/")])]),t._v(" "),s("li",[s("strong",[t._v("LICENSE")]),t._v(": Mapped to "),s("code",[t._v("/LICENSE/")])]),t._v(" "),s("li",[s("strong",[t._v("IMAGE")]),t._v(": Mapped to "),s("code",[t._v("/images/")])]),t._v(" "),s("li",[s("strong",[t._v("TMP")]),t._v(": Mapped to "),s("code",[t._v("/tmp/")])]),t._v(" "),s("li",[s("strong",[t._v("WEB_DOCUMENT_ROOT")]),t._v(": Mapped to "),s("code",[t._v("/web/")])]),t._v(" "),s("li",[s("strong",[t._v("ANY")]),t._v(": Mapped to "),s("code",[t._v("/")])])]),t._v(" "),s("h2",{attrs:{id:"prerequisites"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("Java IDE ("),s("a",{attrs:{href:"http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neon3",target:"_blank",rel:"noopener noreferrer"}},[t._v("Eclipse"),s("OutboundLink")],1),t._v(" recommended)")]),t._v(" "),s("li",[s("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java Development Kit 8"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"preparation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#preparation"}},[t._v("#")]),t._v(" Preparation")]),t._v(" "),s("p",[t._v("This tutorial demonstrates how to use the API of class ResourceRegistry in general. The tutorial does not show how to create an "),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Plugin-Development",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS plugin"),s("OutboundLink")],1),t._v(" where the API would be used normally.")]),t._v(" "),s("ol",[s("li",[t._v("Start Eclipse")]),t._v(" "),s("li",[t._v("Create a new Java project ("),s("code",[t._v("File/New/Java Project")]),t._v(")")]),t._v(" "),s("li",[t._v("Add the following libraries to the build configuration ("),s("code",[t._v("Project/Properties/Java Build Path/Libraries")]),t._v(")")])]),t._v(" "),s("ul",[s("li",[s("code",[t._v("/asterics.ARE.jar")])]),t._v(" "),s("li",[s("code",[t._v("/../APE/lib/commons-io-2.4.jar")])]),t._v(" "),s("li",[s("code",[t._v("/../APE/lib/commons-codec-1.11.jar")])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(427),alt:"Build path dialog with external libraries"}})]),t._v(" "),s("ol",{attrs:{start:"4"}},[s("li",[t._v("Create a main class "),s("code",[t._v("ResourceRegistryExamples")]),t._v(" and copy and paste the following template code into it")])]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("net"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URI")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("net"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("services"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token import"}},[s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("eu"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mw"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("services"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RES_TYPE")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistryExamples")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" args"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Don't call these two lines if you are using the class ResourceRegistry from within the ARE (plugin).")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// setOSGIMode(false) defines that we are using it as a library.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setOSGIMode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// setAREBaseURI(URI ...) sets the location of the ARE.jar file, which will be set automatically when used within")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the ARE. If you are on Linux use the respective path of /bin/ARE")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAREBaseURI")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"C:\\\\Program Files (x86)\\\\AsTeRICS\\\\ARE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toURI")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Define variables for our examples.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URI")]),t._v(" myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"example-1-getting-resource-uri"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-1-getting-resource-uri"}},[t._v("#")]),t._v(" Example 1 - Getting resource URI")]),t._v(" "),s("h3",{attrs:{id:"get-model-uri"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-model-uri"}},[t._v("#")]),t._v(" Get model URI")]),t._v(" "),s("p",[t._v("To get the URI of a model file normally located at "),s("code",[t._v("/models/")]),t._v(" or a subpath of it, use")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CameraMouse.acs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MODEL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grids\\\\eyeX_Environment\\\\eyeX_Environment.acs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MODEL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// TODO Auto-generated catch block")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("This returns a valid URI if one can be constructed. The method does not check for resource existence.")]),t._v(" "),s("h3",{attrs:{id:"get-uri-of-a-data-file"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-uri-of-a-data-file"}},[t._v("#")]),t._v(" Get URI of a data file")]),t._v(" "),s("p",[t._v("To get the URIs of files with resource type data, use")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pictures/slide7.jpg"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//slashes may be \\\\ or / and even mixed up. The paths may contain spaces")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pictures\\\\symbols//walk the dog.png"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//To indicate that a data file is in a plugin-specific subpath of the data folder, use the overridden getResource method ")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//and provide the componentTypeId")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"haarcascade_frontalface_alt.xml"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"facetrackerLK"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If you provide an absolute URI/URL it is returned as is, withou resolving it against the ARE baseURI.")]),t._v("\n myURI "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://raw.githubusercontent.com/wiki/asterics/AsTeRICS/Fetching-resources-with-class-ResourceRegistry.md"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myURI: "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" myURI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"example-2-getting-resource-content"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-2-getting-resource-content"}},[t._v("#")]),t._v(" Example 2 - Getting resource content")]),t._v(" "),s("p",[t._v("To get the contents of a resource as a String, use")]),t._v(" "),s("div",{staticClass:"language-Java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResourceContentAsString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CameraMouse.acs"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("MODEL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contents"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getResourceContentAsString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://raw.githubusercontent.com/wiki/asterics/AsTeRICS/Fetching-resources-with-class-ResourceRegistry.md"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("ANY")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contents"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// TODO Auto-generated catch block")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("When reading the resource content, character encoding is guessed best effort using the class "),s("a",{attrs:{href:"https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/input/BOMInputStream.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("BOMInputStream"),s("OutboundLink")],1),t._v(", with or without "),s("code",[t._v("ByteOrderMark")])]),t._v(" "),s("h2",{attrs:{id:"example-3-storing-resource-content"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-3-storing-resource-content"}},[t._v("#")]),t._v(" Example 3 - Storing resource content")]),t._v(" "),s("p",[t._v("To store contents to a resource location, use")]),t._v(" "),s("div",{staticClass:"language-Java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n contents "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"My new test data to save."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("storeResource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("contents"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"saveddata/testFile.txt"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("RES_TYPE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DATA")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("URISyntaxException")]),t._v(" e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The method automatically creates missing directories in the path (if supported by the used protocol, e.g. file://) and ensures proper "),s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/v3.0/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L94",target:"_blank",rel:"noopener noreferrer"}},[t._v("UTF8 character encoding"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"example-4-getting-a-resource-list"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-4-getting-a-resource-list"}},[t._v("#")]),t._v(" Example 4 - Getting a resource list")]),t._v(" "),s("p",[t._v("To get a list of models or data files, use")]),t._v(" "),s("div",{staticClass:"language-java extra-class"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Returns the URIs of all model resources")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("URI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" modelList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getModelList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Returns the URIs of all data resources")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("URI"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" dataList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDataList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If the element's type must be of String, you can convert it")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" modelListAsStrings"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResourceRegistry")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("toStringList")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("modelList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("The parameter of "),s("code",[t._v("getModelList")]),t._v(" or "),s("code",[t._v("getDataList")]),t._v(" defines, if the paths should be relative or absolute.")]),t._v(" "),s("h2",{attrs:{id:"references"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java#L53",target:"_blank",rel:"noopener noreferrer"}},[t._v("Source code of class ResourceRegistry"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/test/java/eu/asterics/mw/services/TestResourceRegistry.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Unit tests with usage examples"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/118.89d40ea6.js b/assets/js/118.6fd278db.js similarity index 93% rename from assets/js/118.89d40ea6.js rename to assets/js/118.6fd278db.js index d047c2b231..2eb472282e 100644 --- a/assets/js/118.89d40ea6.js +++ b/assets/js/118.6fd278db.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{1001:function(t,o,s){"use strict";s.r(o);var e=s(2),n=Object(e.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"colours-settings"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#colours-settings"}},[t._v("#")]),t._v(" Colours Settings")]),t._v(" "),o("p",[o("img",{attrs:{src:s(448),alt:"Screenshot: Options Dialog, Colours Settings",title:"Screenshot: Options Dialog, Colours Settings"}})]),t._v(" "),o("p",[t._v("Options Dialog, Colours Settings")]),t._v(" "),o("p",[t._v("Within the "),o("em",[t._v("Colours")]),t._v(" tab, the colours of the different parts of a component can be changed. The colour chooser not only allows changing the colour, also the transparency can be changed.")])])}),[],!1,null,null,null);o.default=n.exports},448:function(t,o,s){t.exports=s.p+"assets/img/colour_settings.b6a0614a.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{1004:function(t,o,s){"use strict";s.r(o);var e=s(2),n=Object(e.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"colours-settings"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#colours-settings"}},[t._v("#")]),t._v(" Colours Settings")]),t._v(" "),o("p",[o("img",{attrs:{src:s(448),alt:"Screenshot: Options Dialog, Colours Settings",title:"Screenshot: Options Dialog, Colours Settings"}})]),t._v(" "),o("p",[t._v("Options Dialog, Colours Settings")]),t._v(" "),o("p",[t._v("Within the "),o("em",[t._v("Colours")]),t._v(" tab, the colours of the different parts of a component can be changed. The colour chooser not only allows changing the colour, also the transparency can be changed.")])])}),[],!1,null,null,null);o.default=n.exports},448:function(t,o,s){t.exports=s.p+"assets/img/colour_settings.b6a0614a.png"}}]); \ No newline at end of file diff --git a/assets/js/119.c33392fe.js b/assets/js/119.34307f1b.js similarity index 96% rename from assets/js/119.c33392fe.js rename to assets/js/119.34307f1b.js index 32afa72e64..a95d273f19 100644 --- a/assets/js/119.c33392fe.js +++ b/assets/js/119.34307f1b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{1004:function(e,t,o){"use strict";o.r(t);var n=o(2),l=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"component-collection-manager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-collection-manager"}},[e._v("#")]),e._v(" Component Collection Manager")]),e._v(" "),t("p",[e._v("The Component Collection Manager (see Figure below) is a small tool in which downloaded component collections (the description of the available plugins within the AsTeRICS Runtime Environment) can be saved and administered. Within the component collection manager, the following functionalities are provided:")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Use Default")]),e._v(" sets the default ACS component collection as active component collection")]),e._v(" "),t("li",[t("em",[e._v("Set as Autostart")]),e._v(" sets the active component collection as autostart component collection, which will be loaded at ACS startup.")]),e._v(" "),t("li",[t("em",[e._v("Save Component Collection")]),e._v(" saves the active component collection (e.g. a downloaded component collection from the ARE) into the ACS folder.")]),e._v(" "),t("li",[e._v("The "),t("em",[e._v("Saved Component Collections")]),e._v(" list shows all saved component collections. A component collection can be selected and set active.")])]),e._v(" "),t("p",[t("img",{attrs:{src:o(449),alt:"Bundle Manager",title:"Bundle Manager"}})]),e._v(" "),t("p",[e._v("Component Collection Manager")])])}),[],!1,null,null,null);t.default=l.exports},449:function(e,t,o){e.exports=o.p+"assets/img/bundle-manager.a6a8eed1.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{1005:function(e,t,o){"use strict";o.r(t);var n=o(2),l=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"component-collection-manager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-collection-manager"}},[e._v("#")]),e._v(" Component Collection Manager")]),e._v(" "),t("p",[e._v("The Component Collection Manager (see Figure below) is a small tool in which downloaded component collections (the description of the available plugins within the AsTeRICS Runtime Environment) can be saved and administered. Within the component collection manager, the following functionalities are provided:")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Use Default")]),e._v(" sets the default ACS component collection as active component collection")]),e._v(" "),t("li",[t("em",[e._v("Set as Autostart")]),e._v(" sets the active component collection as autostart component collection, which will be loaded at ACS startup.")]),e._v(" "),t("li",[t("em",[e._v("Save Component Collection")]),e._v(" saves the active component collection (e.g. a downloaded component collection from the ARE) into the ACS folder.")]),e._v(" "),t("li",[e._v("The "),t("em",[e._v("Saved Component Collections")]),e._v(" list shows all saved component collections. A component collection can be selected and set active.")])]),e._v(" "),t("p",[t("img",{attrs:{src:o(449),alt:"Bundle Manager",title:"Bundle Manager"}})]),e._v(" "),t("p",[e._v("Component Collection Manager")])])}),[],!1,null,null,null);t.default=l.exports},449:function(e,t,o){e.exports=o.p+"assets/img/bundle-manager.a6a8eed1.png"}}]); \ No newline at end of file diff --git a/assets/js/12.9cf2fe85.js b/assets/js/12.7015b996.js similarity index 99% rename from assets/js/12.9cf2fe85.js rename to assets/js/12.7015b996.js index 1a58510f18..7d1dc55a4b 100644 --- a/assets/js/12.9cf2fe85.js +++ b/assets/js/12.7015b996.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{303:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_c2213f881cbf5182.abc6a2f0.png"},304:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_ae369b509ff2c0e5.bc1cbc88.png"},305:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_dd4b70e6240040e3.6272921f.png"},306:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a82259165c76b9df.da0379b4.png"},307:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_3d4398abcb45cc73.1ff3242b.png"},308:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_fbbda5b6e8f42820.b9487507.png"},309:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a0117682e4ae2ecc.f3f88992.png"},310:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_4304f99776fb485f.9217fb55.png"},311:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_f35fad4db20b5c1.cc89c5a3.png"},312:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_2672e47f28834257.fa86415c.png"},947:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"plugin-introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-introduction"}},[e._v("#")]),e._v(" Plugin Introduction")]),e._v(" "),t("h2",{attrs:{id:"a-quick-guide-to-asterics-plugin-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-quick-guide-to-asterics-plugin-development"}},[e._v("#")]),e._v(" A Quick Guide to AsTeRICS Plugin Development")]),e._v(" "),t("p",[e._v("This section describes the AsTeRICS Plugin-Creation tool and the plugin-activation process. These tools make it easy to create new plugins and make them available in ACS and ARE. They can be started manually from their location in the "),t("strong",[e._v("AsTeRICS_runtime.zip")]),e._v(" package (folder: “ACS/tools”) – or they can be launched from the “Misc.” – Tab in the main menu of the ACS:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(303),alt:""}})]),e._v(" "),t("p",[e._v("The creation of a new AsTeRICS plugin for the runtime environment involves several steps:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("creating the folder structure to store the plugin files")])]),e._v(" "),t("li",[t("p",[e._v("creating the ANT build script file")])]),e._v(" "),t("li",[t("p",[e._v("creating the manifest file")])]),e._v(" "),t("li",[t("p",[e._v("creating the bundle-descriptor, which specifies the ports and properties of the plugin")])]),e._v(" "),t("li",[t("p",[e._v("creating the source code file of the JavaInstance")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("defining the ports and properties and implementing the get- and set-methods for input-, output-, eventListener- and evenTrigger ports")])]),e._v(" "),t("li",[t("p",[e._v("implementing the get- and set- methods for property values and the input ports receive handlers")])])])]),e._v(" "),t("li",[t("p",[e._v("creating the license files for the plugin and third-party libraries in the "),t("strong",[e._v("LICENSE")]),e._v(" subfolder")])])]),e._v(" "),t("p",[e._v("This process is similar for each plugin, and involves much work and sources of errors, especially for people who work with the AsTeRICS framework for the first time.")]),e._v(" "),t("p",[e._v("Usually, you look for a plugin with similar specifications, copy its folder structure and then rename and change the files as desired. But also this process needs some effort and errors/typos can be introduced very easily.")]),e._v(" "),t("p",[e._v("The purpose of the AsTeRICS Plugin Creation Tools is to make it easy to create new plugins, by providing the necessary folder structure, the bundle descriptor and a template for the JAVA source code.")]),e._v(" "),t("h2",{attrs:{id:"the-plugin-creation-wizard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-plugin-creation-wizard"}},[e._v("#")]),e._v(" The Plugin Creation Wizard")]),e._v(" "),t("p",[e._v("The plugin Creation wizard allows definition of characteristics of a new plugin and creates the needed folders and files for the Eclipse build flow, including the JAVA source code skeleton and the plugin’s bundle descriptor.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(304),alt:""}})]),e._v(" "),t("p",[e._v("As can be seen in the above figure, desired input- and output ports, data types, properties and plugin-features are simply selected and added to list boxes on the screen.")]),e._v(" "),t("p",[e._v("Important Notes:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("the path to the target folder has to exist in the local file system, and must point to the ARE/components directory where all plugin source files are located, e.g.: “C:\\asterics\\bin\\components\\”.")])]),e._v(" "),t("li",[t("p",[e._v("The plugin name must be specified in CamelCase letters (capital first letter), e.g. “MyPlugin”. Type and Subcategory have to be specified - they define the location where the plugin will appear in the ACS Components menu.")])]),e._v(" "),t("li",[t("p",[e._v("It is possible to create a list of possible text-selections in a combo-box in the ACS property editor. The data type for this property must be integer, the property gets the number of the selected item. Text-captions for the combo-box entries must be separated with double slash, e.g: “Mode 1//Mode 2//Mode 3”.")])])]),e._v(" "),t("h2",{attrs:{id:"created-files-and-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#created-files-and-folders"}},[e._v("#")]),e._v(" Created files and folders")]),e._v(" "),t("p",[e._v("After “Create Plugin!” has been pressed and the plugin creation was completed successfully, following sub-folders and files are begin created:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(305),alt:""}})]),e._v(" "),t("p",[e._v("The root folder contains the build script, which can be executed inside Eclipse to compile and build the plugin (.jar) file:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(306),alt:""}})]),e._v(" "),t("p",[e._v("The META-INF folder contains the manifest file")]),e._v(" "),t("p",[t("img",{attrs:{src:n(307),alt:""}})]),e._v(" "),t("p",[e._v("The “resources” folder contains the bundle descriptor (bundle_descriptor.xml):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(308),alt:""}})]),e._v(" "),t("p",[e._v("The source code folder "),t("code",[e._v("src/main/java/eu/asterics/component//")]),e._v(" contains a template for the plugin source code in JAVA, including the definitions of the selected ports and properties and the needed get- and set- methods for ports and property values. The code skeleton complies to the AsTeRICS coding guidelines and contains the AsTeRICS source file header (only a small portion is shown in the following screenshot).")]),e._v(" "),t("p",[t("img",{attrs:{src:n(309),alt:""}})]),e._v(" "),t("p",[e._v("After the Eclipse IDE has been opened, Eclipse must be pushed to refresh the folder structure by pushing F5. Furthermore, the path "),t("code",[e._v("src/main/java")]),e._v(" must be configured as source folder.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(310),alt:""}})]),e._v(" "),t("p",[e._v("The plugin code can be built using the provided build script (right-click build.xml -> RunAs -> Ant Build in the plugin’s folder)")]),e._v(" "),t("p",[t("img",{attrs:{src:n(311),alt:""}})]),e._v(" "),t("p",[e._v("To see the plugin in the ACS editor window and/or start it inside the runtime environment, the Plugin Activation Tool can be used (see section 3).")]),e._v(" "),t("h2",{attrs:{id:"plugin-activation-in-acs-and-are"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-activation-in-acs-and-are"}},[e._v("#")]),e._v(" Plugin Activation in ACS and ARE")]),e._v(" "),t("p",[e._v("To use a new AsTeRICS plugin which has been built using the Eclipse build flow and exists as executable .jar file/OSGI bundle, one step is necessary:")]),e._v(" "),t("ol",[t("li",[e._v("The Plugin has to be "),t("strong",[e._v("announced to the ACS")]),e._v(" – so that it gets visible in the graphical editor and can be used for the creation of deployment models. This is done by adding the bundle descriptor of the new plugin to a component-collection file (extension “.abd”) in the ACS-folder. These component collections contain all bundle-descriptors of components which can be used in the ACS. The new plugin section can be added either manually or can be downloaded from the running ARE via the ACS’ Component-Collection Manager (recommended, see 3.2.1). Using the Component Collection Manger, the downloaded collection can be stored as “default Component Collection” for the ACS, so that all components will be available when the ACS is started next time.")])]),e._v(" "),t("p",[e._v("Subsequently, the plugin can be selected in the “components” menu of the ACS, and the ARE will activate the plugin at startup.")]),e._v(" "),t("h2",{attrs:{id:"component-collection-management-in-the-acs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-collection-management-in-the-acs"}},[e._v("#")]),e._v(" Component-Collection Management in the ACS")]),e._v(" "),t("p",[e._v("The ACS provides a function for downloading the bundle descriptions of all active plugins directly from a running ARE and creating a component collection file from this information. (“System”- tab, Button “Download Component Collection”):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(312),alt:""}})]),e._v(" "),t("p",[e._v("The component collection will be stored as “.abd” – file in the ACS folder, subfolder “componentcollections”. The new component collection can be used right after download, but will not be available after an ACS restart.")]),e._v(" "),t("p",[e._v("Within the ACS Component-Collection Manager (in the “Miscellaneous” tab), component collections can be selected or set as default collection for the ACS startup. For details see the User Manual, ACS section.")]),e._v(" "),t("p",[e._v("Please note that the “loader.ini” – file has to be updated manually in the ARE’s “profile” subfolder, by addition of the new .jar filename. After restart of the ARE and connection to the ACS, the component collection can be downloaded.")]),e._v(" "),t("h2",{attrs:{id:"plugin-license-declaration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-license-declaration"}},[e._v("#")]),e._v(" Plugin License Declaration")]),e._v(" "),t("p",[e._v("Since AsTeRICS version 2.8 the licenses (including licenses of third-party libraries) of a plugin must be provided as .txt files in the LICENSE subfolder. The filenames must follow a defined naming convention, which is:")]),e._v(" "),t("p",[e._v("A contributor must add the respective license file for the component (either "),t("strong",[e._v("LICENSE_MITOrGPLv3WithException.txt")]),e._v(" or one of the two dual license options) to the component/LICENSE folder. Furthermore, for each thirdparty library used, the license file must be added with the following naming convention (Please use CamelCase notation for the library and license names):")]),e._v(" "),t("p",[t("strong",[e._v("THIRDPARTY_NameOfLibrary_LicenseNameInclVersionInfo.txt")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{303:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_c2213f881cbf5182.abc6a2f0.png"},304:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_ae369b509ff2c0e5.bc1cbc88.png"},305:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_dd4b70e6240040e3.6272921f.png"},306:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a82259165c76b9df.da0379b4.png"},307:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_3d4398abcb45cc73.1ff3242b.png"},308:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_fbbda5b6e8f42820.b9487507.png"},309:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a0117682e4ae2ecc.f3f88992.png"},310:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_4304f99776fb485f.9217fb55.png"},311:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_f35fad4db20b5c1.cc89c5a3.png"},312:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_2672e47f28834257.fa86415c.png"},949:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"plugin-introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-introduction"}},[e._v("#")]),e._v(" Plugin Introduction")]),e._v(" "),t("h2",{attrs:{id:"a-quick-guide-to-asterics-plugin-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-quick-guide-to-asterics-plugin-development"}},[e._v("#")]),e._v(" A Quick Guide to AsTeRICS Plugin Development")]),e._v(" "),t("p",[e._v("This section describes the AsTeRICS Plugin-Creation tool and the plugin-activation process. These tools make it easy to create new plugins and make them available in ACS and ARE. They can be started manually from their location in the "),t("strong",[e._v("AsTeRICS_runtime.zip")]),e._v(" package (folder: “ACS/tools”) – or they can be launched from the “Misc.” – Tab in the main menu of the ACS:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(303),alt:""}})]),e._v(" "),t("p",[e._v("The creation of a new AsTeRICS plugin for the runtime environment involves several steps:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("creating the folder structure to store the plugin files")])]),e._v(" "),t("li",[t("p",[e._v("creating the ANT build script file")])]),e._v(" "),t("li",[t("p",[e._v("creating the manifest file")])]),e._v(" "),t("li",[t("p",[e._v("creating the bundle-descriptor, which specifies the ports and properties of the plugin")])]),e._v(" "),t("li",[t("p",[e._v("creating the source code file of the JavaInstance")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("defining the ports and properties and implementing the get- and set-methods for input-, output-, eventListener- and evenTrigger ports")])]),e._v(" "),t("li",[t("p",[e._v("implementing the get- and set- methods for property values and the input ports receive handlers")])])])]),e._v(" "),t("li",[t("p",[e._v("creating the license files for the plugin and third-party libraries in the "),t("strong",[e._v("LICENSE")]),e._v(" subfolder")])])]),e._v(" "),t("p",[e._v("This process is similar for each plugin, and involves much work and sources of errors, especially for people who work with the AsTeRICS framework for the first time.")]),e._v(" "),t("p",[e._v("Usually, you look for a plugin with similar specifications, copy its folder structure and then rename and change the files as desired. But also this process needs some effort and errors/typos can be introduced very easily.")]),e._v(" "),t("p",[e._v("The purpose of the AsTeRICS Plugin Creation Tools is to make it easy to create new plugins, by providing the necessary folder structure, the bundle descriptor and a template for the JAVA source code.")]),e._v(" "),t("h2",{attrs:{id:"the-plugin-creation-wizard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-plugin-creation-wizard"}},[e._v("#")]),e._v(" The Plugin Creation Wizard")]),e._v(" "),t("p",[e._v("The plugin Creation wizard allows definition of characteristics of a new plugin and creates the needed folders and files for the Eclipse build flow, including the JAVA source code skeleton and the plugin’s bundle descriptor.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(304),alt:""}})]),e._v(" "),t("p",[e._v("As can be seen in the above figure, desired input- and output ports, data types, properties and plugin-features are simply selected and added to list boxes on the screen.")]),e._v(" "),t("p",[e._v("Important Notes:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("the path to the target folder has to exist in the local file system, and must point to the ARE/components directory where all plugin source files are located, e.g.: “C:\\asterics\\bin\\components\\”.")])]),e._v(" "),t("li",[t("p",[e._v("The plugin name must be specified in CamelCase letters (capital first letter), e.g. “MyPlugin”. Type and Subcategory have to be specified - they define the location where the plugin will appear in the ACS Components menu.")])]),e._v(" "),t("li",[t("p",[e._v("It is possible to create a list of possible text-selections in a combo-box in the ACS property editor. The data type for this property must be integer, the property gets the number of the selected item. Text-captions for the combo-box entries must be separated with double slash, e.g: “Mode 1//Mode 2//Mode 3”.")])])]),e._v(" "),t("h2",{attrs:{id:"created-files-and-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#created-files-and-folders"}},[e._v("#")]),e._v(" Created files and folders")]),e._v(" "),t("p",[e._v("After “Create Plugin!” has been pressed and the plugin creation was completed successfully, following sub-folders and files are begin created:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(305),alt:""}})]),e._v(" "),t("p",[e._v("The root folder contains the build script, which can be executed inside Eclipse to compile and build the plugin (.jar) file:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(306),alt:""}})]),e._v(" "),t("p",[e._v("The META-INF folder contains the manifest file")]),e._v(" "),t("p",[t("img",{attrs:{src:n(307),alt:""}})]),e._v(" "),t("p",[e._v("The “resources” folder contains the bundle descriptor (bundle_descriptor.xml):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(308),alt:""}})]),e._v(" "),t("p",[e._v("The source code folder "),t("code",[e._v("src/main/java/eu/asterics/component//")]),e._v(" contains a template for the plugin source code in JAVA, including the definitions of the selected ports and properties and the needed get- and set- methods for ports and property values. The code skeleton complies to the AsTeRICS coding guidelines and contains the AsTeRICS source file header (only a small portion is shown in the following screenshot).")]),e._v(" "),t("p",[t("img",{attrs:{src:n(309),alt:""}})]),e._v(" "),t("p",[e._v("After the Eclipse IDE has been opened, Eclipse must be pushed to refresh the folder structure by pushing F5. Furthermore, the path "),t("code",[e._v("src/main/java")]),e._v(" must be configured as source folder.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(310),alt:""}})]),e._v(" "),t("p",[e._v("The plugin code can be built using the provided build script (right-click build.xml -> RunAs -> Ant Build in the plugin’s folder)")]),e._v(" "),t("p",[t("img",{attrs:{src:n(311),alt:""}})]),e._v(" "),t("p",[e._v("To see the plugin in the ACS editor window and/or start it inside the runtime environment, the Plugin Activation Tool can be used (see section 3).")]),e._v(" "),t("h2",{attrs:{id:"plugin-activation-in-acs-and-are"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-activation-in-acs-and-are"}},[e._v("#")]),e._v(" Plugin Activation in ACS and ARE")]),e._v(" "),t("p",[e._v("To use a new AsTeRICS plugin which has been built using the Eclipse build flow and exists as executable .jar file/OSGI bundle, one step is necessary:")]),e._v(" "),t("ol",[t("li",[e._v("The Plugin has to be "),t("strong",[e._v("announced to the ACS")]),e._v(" – so that it gets visible in the graphical editor and can be used for the creation of deployment models. This is done by adding the bundle descriptor of the new plugin to a component-collection file (extension “.abd”) in the ACS-folder. These component collections contain all bundle-descriptors of components which can be used in the ACS. The new plugin section can be added either manually or can be downloaded from the running ARE via the ACS’ Component-Collection Manager (recommended, see 3.2.1). Using the Component Collection Manger, the downloaded collection can be stored as “default Component Collection” for the ACS, so that all components will be available when the ACS is started next time.")])]),e._v(" "),t("p",[e._v("Subsequently, the plugin can be selected in the “components” menu of the ACS, and the ARE will activate the plugin at startup.")]),e._v(" "),t("h2",{attrs:{id:"component-collection-management-in-the-acs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-collection-management-in-the-acs"}},[e._v("#")]),e._v(" Component-Collection Management in the ACS")]),e._v(" "),t("p",[e._v("The ACS provides a function for downloading the bundle descriptions of all active plugins directly from a running ARE and creating a component collection file from this information. (“System”- tab, Button “Download Component Collection”):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(312),alt:""}})]),e._v(" "),t("p",[e._v("The component collection will be stored as “.abd” – file in the ACS folder, subfolder “componentcollections”. The new component collection can be used right after download, but will not be available after an ACS restart.")]),e._v(" "),t("p",[e._v("Within the ACS Component-Collection Manager (in the “Miscellaneous” tab), component collections can be selected or set as default collection for the ACS startup. For details see the User Manual, ACS section.")]),e._v(" "),t("p",[e._v("Please note that the “loader.ini” – file has to be updated manually in the ARE’s “profile” subfolder, by addition of the new .jar filename. After restart of the ARE and connection to the ACS, the component collection can be downloaded.")]),e._v(" "),t("h2",{attrs:{id:"plugin-license-declaration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-license-declaration"}},[e._v("#")]),e._v(" Plugin License Declaration")]),e._v(" "),t("p",[e._v("Since AsTeRICS version 2.8 the licenses (including licenses of third-party libraries) of a plugin must be provided as .txt files in the LICENSE subfolder. The filenames must follow a defined naming convention, which is:")]),e._v(" "),t("p",[e._v("A contributor must add the respective license file for the component (either "),t("strong",[e._v("LICENSE_MITOrGPLv3WithException.txt")]),e._v(" or one of the two dual license options) to the component/LICENSE folder. Furthermore, for each thirdparty library used, the license file must be added with the following naming convention (Please use CamelCase notation for the library and license names):")]),e._v(" "),t("p",[t("strong",[e._v("THIRDPARTY_NameOfLibrary_LicenseNameInclVersionInfo.txt")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/121.408b06cb.js b/assets/js/121.99b0f34f.js similarity index 93% rename from assets/js/121.408b06cb.js rename to assets/js/121.99b0f34f.js index fbfd829e54..40fd45a343 100644 --- a/assets/js/121.408b06cb.js +++ b/assets/js/121.99b0f34f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{1009:function(t,s,e){"use strict";e.r(s);var i=e(2),a=Object(i.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"dialogs-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dialogs-settings"}},[t._v("#")]),t._v(" Dialogs Settings")]),t._v(" "),s("p",[s("img",{attrs:{src:e(457),alt:"Screenshot: Options Dialog, Dialogs Settings",title:"Screenshot: Options Dialog, Dialogs Settings"}})]),t._v(" "),s("p",[t._v("Options Dialog, Dialogs Settings")]),t._v(" "),s("p",[t._v("Within this options tab, dialogs can be activated or deactivated. In the ACS, several dialogs have the option "),s("em",[t._v("Show this dialog every time")]),t._v(" . If a dialog has been deactivated there, it can be reactivated in the options dialog.")])])}),[],!1,null,null,null);s.default=a.exports},457:function(t,s,e){t.exports=e.p+"assets/img/dialogs_settings.ec77262c.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{1010:function(t,s,e){"use strict";e.r(s);var i=e(2),a=Object(i.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"dialogs-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dialogs-settings"}},[t._v("#")]),t._v(" Dialogs Settings")]),t._v(" "),s("p",[s("img",{attrs:{src:e(457),alt:"Screenshot: Options Dialog, Dialogs Settings",title:"Screenshot: Options Dialog, Dialogs Settings"}})]),t._v(" "),s("p",[t._v("Options Dialog, Dialogs Settings")]),t._v(" "),s("p",[t._v("Within this options tab, dialogs can be activated or deactivated. In the ACS, several dialogs have the option "),s("em",[t._v("Show this dialog every time")]),t._v(" . If a dialog has been deactivated there, it can be reactivated in the options dialog.")])])}),[],!1,null,null,null);s.default=a.exports},457:function(t,s,e){t.exports=e.p+"assets/img/dialogs_settings.ec77262c.png"}}]); \ No newline at end of file diff --git a/assets/js/122.6d31a7d1.js b/assets/js/122.8665890b.js similarity index 92% rename from assets/js/122.6d31a7d1.js rename to assets/js/122.8665890b.js index a79c2b4b3c..4e2d25fb53 100644 --- a/assets/js/122.6d31a7d1.js +++ b/assets/js/122.8665890b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{1012:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"events"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[this._v("#")]),this._v(" Events")]),this._v(" "),e("p",[this._v("The AsTeRICS platform knows two concepts of connecting two components to each other. The first one is channels, where data is transported from one component to another. The second one is the events-concept. Events are single or continuous happenings, which should trigger an action at the receiver. After an event channel has been established between a trigger and a listener, the events have to be set in the events tab (which appears in the property area - by default on the right side of the ACS). In this event tab, there is a table with two columns: the left column lists the event listeners, the right column the event triggers. So, with the selection box on the right side (second column), the triggering event for the listener will be set. One component can send and receive events from several other components. The following figure shows the setting of events.")]),this._v(" "),e("p",[e("img",{attrs:{src:n(459),alt:"Screenshot: ACS with Active Events Tab",title:"Screenshot: ACS with Active Events Tab"}})]),this._v(" "),e("p",[this._v("ACS with Active Events Tab")])])}),[],!1,null,null,null);t.default=i.exports},459:function(e,t,n){e.exports=n.p+"assets/img/acs_with_active_events_tab.ae677a1b.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{1012:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"events"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[this._v("#")]),this._v(" Events")]),this._v(" "),e("p",[this._v("The AsTeRICS platform knows two concepts of connecting two components to each other. The first one is channels, where data is transported from one component to another. The second one is the events-concept. Events are single or continuous happenings, which should trigger an action at the receiver. After an event channel has been established between a trigger and a listener, the events have to be set in the events tab (which appears in the property area - by default on the right side of the ACS). In this event tab, there is a table with two columns: the left column lists the event listeners, the right column the event triggers. So, with the selection box on the right side (second column), the triggering event for the listener will be set. One component can send and receive events from several other components. The following figure shows the setting of events.")]),this._v(" "),e("p",[e("img",{attrs:{src:n(458),alt:"Screenshot: ACS with Active Events Tab",title:"Screenshot: ACS with Active Events Tab"}})]),this._v(" "),e("p",[this._v("ACS with Active Events Tab")])])}),[],!1,null,null,null);t.default=i.exports},458:function(e,t,n){e.exports=n.p+"assets/img/acs_with_active_events_tab.ae677a1b.png"}}]); \ No newline at end of file diff --git a/assets/js/123.3d9bc0ec.js b/assets/js/123.3bae29ec.js similarity index 83% rename from assets/js/123.3d9bc0ec.js rename to assets/js/123.3bae29ec.js index db76b1c23e..4cb76801c6 100644 --- a/assets/js/123.3d9bc0ec.js +++ b/assets/js/123.3bae29ec.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{1011:function(t,e,n){"use strict";n.r(e);var o=n(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"external-tools-settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#external-tools-settings"}},[t._v("#")]),t._v(" External Tools Settings")]),t._v(" "),e("p",[e("img",{attrs:{src:n(458),alt:"Screenshot: External Tools Settings",title:"Screenshot: External Tools Settings"}})]),t._v(" "),e("p",[t._v("Options Dialog, External Tools Settings")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("Path to the Plugin Creation Wizard")]),t._v(" sets the path to the plugin creation wizard.")]),t._v(" "),e("li",[e("em",[t._v("Path to the Plugin Activation Wizard")]),t._v(" sets the path to the plugin activation wizard.")])]),t._v(" "),e("p",[t._v("More information about the external tools can be found at the section "),e("em",[t._v("External Tools")]),t._v(".")])])}),[],!1,null,null,null);e.default=s.exports},458:function(t,e,n){t.exports=n.p+"assets/img/external_tools_settings.ca6ac2eb.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{1015:function(t,e,n){"use strict";n.r(e);var o=n(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"external-tools-settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#external-tools-settings"}},[t._v("#")]),t._v(" External Tools Settings")]),t._v(" "),e("p",[e("img",{attrs:{src:n(463),alt:"Screenshot: External Tools Settings",title:"Screenshot: External Tools Settings"}})]),t._v(" "),e("p",[t._v("Options Dialog, External Tools Settings")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("Path to the Plugin Creation Wizard")]),t._v(" sets the path to the plugin creation wizard.")]),t._v(" "),e("li",[e("em",[t._v("Path to the Plugin Activation Wizard")]),t._v(" sets the path to the plugin activation wizard.")])]),t._v(" "),e("p",[t._v("More information about the external tools can be found at the section "),e("em",[t._v("External Tools")]),t._v(".")])])}),[],!1,null,null,null);e.default=s.exports},463:function(t,e,n){t.exports=n.p+"assets/img/external_tools_settings.ca6ac2eb.png"}}]); \ No newline at end of file diff --git a/assets/js/124.67ce29f7.js b/assets/js/124.0c6b4a3a.js similarity index 82% rename from assets/js/124.67ce29f7.js rename to assets/js/124.0c6b4a3a.js index 545ba935e0..058dffaf67 100644 --- a/assets/js/124.67ce29f7.js +++ b/assets/js/124.0c6b4a3a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{1013:function(e,t,s){"use strict";s.r(t);var n=s(2),i=Object(n.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"gui-designer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#gui-designer"}},[this._v("#")]),this._v(" GUI Designer")]),this._v(" "),e("p",[this._v("The GUI Designer allows to arrange the GUI Elements of components with a graphical user interface. These GUI Elements will then be shown on the ARE GUI. All GUI elements will be drawn and deleted automatically, if a component with a GUI is added or deleted. Within the GUI Designer, the size and the position of the GUI Elements can be changed.")]),this._v(" "),e("p",[e("img",{attrs:{src:s(460),alt:"Screenshot: The GUI Designer of the ACS",title:"Screenshot: The GUI Designer of the ACS"}})]),this._v(" "),e("p",[this._v("The GUI Designer")])])}),[],!1,null,null,null);t.default=i.exports},460:function(e,t,s){e.exports=s.p+"assets/img/gui_designer.039c882e.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{1016:function(e,t,s){"use strict";s.r(t);var n=s(2),i=Object(n.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"gui-designer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#gui-designer"}},[this._v("#")]),this._v(" GUI Designer")]),this._v(" "),e("p",[this._v("The GUI Designer allows to arrange the GUI Elements of components with a graphical user interface. These GUI Elements will then be shown on the ARE GUI. All GUI elements will be drawn and deleted automatically, if a component with a GUI is added or deleted. Within the GUI Designer, the size and the position of the GUI Elements can be changed.")]),this._v(" "),e("p",[e("img",{attrs:{src:s(464),alt:"Screenshot: The GUI Designer of the ACS",title:"Screenshot: The GUI Designer of the ACS"}})]),this._v(" "),e("p",[this._v("The GUI Designer")])])}),[],!1,null,null,null);t.default=i.exports},464:function(e,t,s){e.exports=s.p+"assets/img/gui_designer.039c882e.png"}}]); \ No newline at end of file diff --git a/assets/js/125.8d4856f2.js b/assets/js/125.3a160a1d.js similarity index 91% rename from assets/js/125.8d4856f2.js rename to assets/js/125.3a160a1d.js index 2e977225ac..16367062b2 100644 --- a/assets/js/125.8d4856f2.js +++ b/assets/js/125.3a160a1d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{1016:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"general-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general-settings"}},[e._v("#")]),e._v(" General Settings")]),e._v(" "),t("p",[t("img",{attrs:{src:n(469),alt:"Screenshot: Options Dialog, General Settings",title:"Screenshot: Options Dialog, General Settings"}})]),e._v(" "),t("p",[e._v("Options Dialog, General Settings")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Reset Window Arrangement")]),e._v(" resets all layout settings to default values.")]),e._v(" "),t("li",[t("em",[e._v("Language")]),e._v(" gives the possibility to select the ACS language between English, German, Spanish and Polish. The properties of the components will not be affected by this, as they are dependent on the component description. After changing the language, a restart of the ACS is required for the changes to take effect.")]),e._v(" "),t("li",[t("em",[e._v("Connection Data")]),e._v(" is responsible for the connection of the ACS with the ARE. The Host contains the IP-address of the ARE, the Port its IP-port. Default port is 9090. If "),t("em",[e._v("Detect ARE automatically")]),e._v(" is selected, the host information will be ignored and the ACS tries to find the ARE in the network. If more then one ARE will be detected in the network, an ARE selection dialog will appear. "),t("em",[e._v("Connection Timeout")]),e._v(" sets time network timeout time (in milliseconds). If the ARE is not reacting after this time, the connection to the ARE will be closed.")]),e._v(" "),t("li",[t("em",[e._v("ARE Status Update")]),e._v(" enables or disables an automatic update of the ARE status. This status update works while the ACS is in run-mode. The Update Frequency sets the time between two status updates (in milliseconds).")]),e._v(" "),t("li",[t("em",[e._v("Automatic Backup Files")]),e._v(" creates a backup file during each "),t("em",[e._v("Save File")]),e._v(" process. The backup file gets the ending .backup.")])])])}),[],!1,null,null,null);t.default=i.exports},469:function(e,t,n){e.exports=n.p+"assets/img/general_settings.0c251b2d.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{1014:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"general-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general-settings"}},[e._v("#")]),e._v(" General Settings")]),e._v(" "),t("p",[t("img",{attrs:{src:n(462),alt:"Screenshot: Options Dialog, General Settings",title:"Screenshot: Options Dialog, General Settings"}})]),e._v(" "),t("p",[e._v("Options Dialog, General Settings")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Reset Window Arrangement")]),e._v(" resets all layout settings to default values.")]),e._v(" "),t("li",[t("em",[e._v("Language")]),e._v(" gives the possibility to select the ACS language between English, German, Spanish and Polish. The properties of the components will not be affected by this, as they are dependent on the component description. After changing the language, a restart of the ACS is required for the changes to take effect.")]),e._v(" "),t("li",[t("em",[e._v("Connection Data")]),e._v(" is responsible for the connection of the ACS with the ARE. The Host contains the IP-address of the ARE, the Port its IP-port. Default port is 9090. If "),t("em",[e._v("Detect ARE automatically")]),e._v(" is selected, the host information will be ignored and the ACS tries to find the ARE in the network. If more then one ARE will be detected in the network, an ARE selection dialog will appear. "),t("em",[e._v("Connection Timeout")]),e._v(" sets time network timeout time (in milliseconds). If the ARE is not reacting after this time, the connection to the ARE will be closed.")]),e._v(" "),t("li",[t("em",[e._v("ARE Status Update")]),e._v(" enables or disables an automatic update of the ARE status. This status update works while the ACS is in run-mode. The Update Frequency sets the time between two status updates (in milliseconds).")]),e._v(" "),t("li",[t("em",[e._v("Automatic Backup Files")]),e._v(" creates a backup file during each "),t("em",[e._v("Save File")]),e._v(" process. The backup file gets the ending .backup.")])])])}),[],!1,null,null,null);t.default=i.exports},462:function(e,t,n){e.exports=n.p+"assets/img/general_settings.0c251b2d.png"}}]); \ No newline at end of file diff --git a/assets/js/126.e21e1ad7.js b/assets/js/126.87cb7f78.js similarity index 98% rename from assets/js/126.e21e1ad7.js rename to assets/js/126.87cb7f78.js index 57bb248c67..fd7b76cf45 100644 --- a/assets/js/126.e21e1ad7.js +++ b/assets/js/126.87cb7f78.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{1017:function(t,A,e){"use strict";e.r(A);var a=e(2),o=Object(a.a)({},(function(){var t=this,A=t._self._c;return A("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[A("h1",{attrs:{id:"open-and-save-models"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#open-and-save-models"}},[t._v("#")]),t._v(" Open and Save Models")]),t._v(" "),A("p",[t._v("In the system tab, models can be saved on the local file system ("),A("em",[t._v("Save Model")]),t._v(", "),A("em",[t._v("Save Model as")]),t._v("), or loaded from the local file system ("),A("em",[t._v("Open Model")]),t._v("). "),A("em",[t._v("New Model")]),t._v(" cleans up the drawing field, preparing everything for a new model.")]),t._v(" "),A("p",[A("img",{attrs:{src:e(470),alt:"Screenshot: Local Operations Group in Tab System",title:"Screenshot: Local Operations Group in Tab System"}})]),t._v(" "),A("p",[t._v("Local Operations Group in Tab System")])])}),[],!1,null,null,null);A.default=o.exports},470:function(t,A){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{1017:function(t,A,e){"use strict";e.r(A);var a=e(2),o=Object(a.a)({},(function(){var t=this,A=t._self._c;return A("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[A("h1",{attrs:{id:"open-and-save-models"}},[A("a",{staticClass:"header-anchor",attrs:{href:"#open-and-save-models"}},[t._v("#")]),t._v(" Open and Save Models")]),t._v(" "),A("p",[t._v("In the system tab, models can be saved on the local file system ("),A("em",[t._v("Save Model")]),t._v(", "),A("em",[t._v("Save Model as")]),t._v("), or loaded from the local file system ("),A("em",[t._v("Open Model")]),t._v("). "),A("em",[t._v("New Model")]),t._v(" cleans up the drawing field, preparing everything for a new model.")]),t._v(" "),A("p",[A("img",{attrs:{src:e(465),alt:"Screenshot: Local Operations Group in Tab System",title:"Screenshot: Local Operations Group in Tab System"}})]),t._v(" "),A("p",[t._v("Local Operations Group in Tab System")])])}),[],!1,null,null,null);A.default=o.exports},465:function(t,A){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/127.5e261f38.js b/assets/js/127.1bce1fe4.js similarity index 94% rename from assets/js/127.5e261f38.js rename to assets/js/127.1bce1fe4.js index 7bf0380532..bd3ed55d4e 100644 --- a/assets/js/127.5e261f38.js +++ b/assets/js/127.1bce1fe4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{1018:function(e,t,a){"use strict";a.r(t);var n=a(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"miscellaneous"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#miscellaneous"}},[e._v("#")]),e._v(" Miscellaneous")]),e._v(" "),t("p",[e._v("Within the tab "),t("em",[e._v("Miscellaneous")]),e._v(" (Misc.), status reports and logging files can be requested from the connected ARE, options can be set, the "),t("em",[e._v("Component Collection Manager")]),e._v(" can be called and external tools can be launched. The three supported external tools are the "),t("em",[e._v("Plugin Creation Wizard")]),e._v(", the "),t("em",[e._v("Plugin Activation Wizard")]),e._v(" and the "),t("em",[e._v("Language Translation File Creator")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:a(280),alt:"Screenshot: The Miscellaneous Tab",title:"Screenshot: The Miscellaneous Tab"}})]),e._v(" "),t("p",[e._v("The Miscellaneous Tab")])])}),[],!1,null,null,null);t.default=s.exports},280:function(e,t,a){e.exports=a.p+"assets/img/miscellaneous_tab.50018162.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{1019:function(e,t,a){"use strict";a.r(t);var n=a(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"miscellaneous"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#miscellaneous"}},[e._v("#")]),e._v(" Miscellaneous")]),e._v(" "),t("p",[e._v("Within the tab "),t("em",[e._v("Miscellaneous")]),e._v(" (Misc.), status reports and logging files can be requested from the connected ARE, options can be set, the "),t("em",[e._v("Component Collection Manager")]),e._v(" can be called and external tools can be launched. The three supported external tools are the "),t("em",[e._v("Plugin Creation Wizard")]),e._v(", the "),t("em",[e._v("Plugin Activation Wizard")]),e._v(" and the "),t("em",[e._v("Language Translation File Creator")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:a(280),alt:"Screenshot: The Miscellaneous Tab",title:"Screenshot: The Miscellaneous Tab"}})]),e._v(" "),t("p",[e._v("The Miscellaneous Tab")])])}),[],!1,null,null,null);t.default=s.exports},280:function(e,t,a){e.exports=a.p+"assets/img/miscellaneous_tab.50018162.png"}}]); \ No newline at end of file diff --git a/assets/js/128.e1c6745b.js b/assets/js/128.85d645bf.js similarity index 82% rename from assets/js/128.e1c6745b.js rename to assets/js/128.85d645bf.js index 4cdc786f60..3fec95bb92 100644 --- a/assets/js/128.e1c6745b.js +++ b/assets/js/128.85d645bf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{1025:function(n,e,t){"use strict";t.r(e);var s=t(2),i=Object(s.a)({},(function(){var n=this,e=n._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":n.$parent.slotKey}},[e("h1",{attrs:{id:"running"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#running"}},[n._v("#")]),n._v(" Running")]),n._v(" "),e("p",[n._v("After the "),e("em",[n._v("Start Model")]),n._v(" button has been pressed, the ACS is in the "),e("em",[n._v("running")]),n._v(" mode. Within this mode, the drawing area is disabled (indicated by a grey background) and the buttons in the components tab and the edit tab are disabled, so elements can only be selected or moved. The following figure shows a screenshot of the ACS in running mode.")]),n._v(" "),e("p",[e("img",{attrs:{src:t(473),alt:"Screenshot: The ACS in the Running Modus",title:"Screenshot: The ACS in the Running Modus"}})]),n._v(" "),e("p",[n._v("The ACS in the Running Modus")])])}),[],!1,null,null,null);e.default=i.exports},473:function(n,e,t){n.exports=t.p+"assets/img/running_modus.b1736e0d.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{1028:function(n,e,t){"use strict";t.r(e);var s=t(2),i=Object(s.a)({},(function(){var n=this,e=n._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":n.$parent.slotKey}},[e("h1",{attrs:{id:"running"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#running"}},[n._v("#")]),n._v(" Running")]),n._v(" "),e("p",[n._v("After the "),e("em",[n._v("Start Model")]),n._v(" button has been pressed, the ACS is in the "),e("em",[n._v("running")]),n._v(" mode. Within this mode, the drawing area is disabled (indicated by a grey background) and the buttons in the components tab and the edit tab are disabled, so elements can only be selected or moved. The following figure shows a screenshot of the ACS in running mode.")]),n._v(" "),e("p",[e("img",{attrs:{src:t(478),alt:"Screenshot: The ACS in the Running Modus",title:"Screenshot: The ACS in the Running Modus"}})]),n._v(" "),e("p",[n._v("The ACS in the Running Modus")])])}),[],!1,null,null,null);e.default=i.exports},478:function(n,e,t){n.exports=t.p+"assets/img/running_modus.b1736e0d.png"}}]); \ No newline at end of file diff --git a/assets/js/129.6f3d16ce.js b/assets/js/129.fdb39d91.js similarity index 92% rename from assets/js/129.6f3d16ce.js rename to assets/js/129.fdb39d91.js index 345383cd89..203cd9d596 100644 --- a/assets/js/129.6f3d16ce.js +++ b/assets/js/129.fdb39d91.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[129],{1039:function(e,t,n){"use strict";n.r(t);var s=n(2),o=Object(s.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"events"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[this._v("#")]),this._v(" Events")]),this._v(" "),e("p",[this._v("The AsTeRICS platform knows two concepts of connecting two components to each other. The first one is channels, where data is transported from one component to another. The second one is the events-concept. Events are single or continuous happenings, which should trigger an action at the receiver. After connecting two components with an event channel, the event connections have to be set in the events tab (which appears in the property editor on the right side of the ACS, when an event channel is focussed). This event tab consists of a table with two columns: the left column lists the event listeners (at the component receiving the event), the right column lists the event triggers (coming from the component that sends the event). So, with the selection box on the right hand side (second column), one or several triggering events can be set for any listener. One component can send and receive events to and from several other components. The following figure shows the setting of events.")]),this._v(" "),e("p",[e("img",{attrs:{src:n(492),alt:"Screenshot: ACS with Active Events Tab",title:"Screenshot: ACS with Active Events Tab"}})]),this._v(" "),e("p",[this._v("ACS with Active Events Tab")])])}),[],!1,null,null,null);t.default=o.exports},492:function(e,t,n){e.exports=n.p+"assets/img/acs_with_active_events_tab.efea5701.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[129],{1039:function(e,t,n){"use strict";n.r(t);var s=n(2),o=Object(s.a)({},(function(){var e=this._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"events"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[this._v("#")]),this._v(" Events")]),this._v(" "),e("p",[this._v("The AsTeRICS platform knows two concepts of connecting two components to each other. The first one is channels, where data is transported from one component to another. The second one is the events-concept. Events are single or continuous happenings, which should trigger an action at the receiver. After connecting two components with an event channel, the event connections have to be set in the events tab (which appears in the property editor on the right side of the ACS, when an event channel is focussed). This event tab consists of a table with two columns: the left column lists the event listeners (at the component receiving the event), the right column lists the event triggers (coming from the component that sends the event). So, with the selection box on the right hand side (second column), one or several triggering events can be set for any listener. One component can send and receive events to and from several other components. The following figure shows the setting of events.")]),this._v(" "),e("p",[e("img",{attrs:{src:n(486),alt:"Screenshot: ACS with Active Events Tab",title:"Screenshot: ACS with Active Events Tab"}})]),this._v(" "),e("p",[this._v("ACS with Active Events Tab")])])}),[],!1,null,null,null);t.default=o.exports},486:function(e,t,n){e.exports=n.p+"assets/img/acs_with_active_events_tab.efea5701.png"}}]); \ No newline at end of file diff --git a/assets/js/13.61edaffd.js b/assets/js/13.a324eca3.js similarity index 99% rename from assets/js/13.61edaffd.js rename to assets/js/13.a324eca3.js index 52d5c9055b..4c35b98d9c 100644 --- a/assets/js/13.61edaffd.js +++ b/assets/js/13.a324eca3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{303:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_c2213f881cbf5182.abc6a2f0.png"},304:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_ae369b509ff2c0e5.bc1cbc88.png"},305:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_dd4b70e6240040e3.6272921f.png"},306:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a82259165c76b9df.da0379b4.png"},307:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_3d4398abcb45cc73.1ff3242b.png"},308:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_fbbda5b6e8f42820.b9487507.png"},309:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a0117682e4ae2ecc.f3f88992.png"},310:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_4304f99776fb485f.9217fb55.png"},311:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_f35fad4db20b5c1.cc89c5a3.png"},312:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_2672e47f28834257.fa86415c.png"},987:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"plugin-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-development"}},[e._v("#")]),e._v(" Plugin Development")]),e._v(" "),t("h2",{attrs:{id:"a-quick-guide-to-asterics-plugin-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-quick-guide-to-asterics-plugin-development"}},[e._v("#")]),e._v(" A Quick Guide to AsTeRICS Plugin Development")]),e._v(" "),t("p",[e._v("This section describes the AsTeRICS Plugin-Creation tool and the plugin-activation process. These tools make it easy to create new plugins and make them available in ACS and ARE. They can be started manually from their location in the "),t("strong",[e._v("AsTeRICS_runtime.zip")]),e._v(" package (folder: “ACS/tools”) – or they can be launched from the “Misc.” – Tab in the main menu of the ACS:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(303),alt:""}})]),e._v(" "),t("p",[e._v("The creation of a new AsTeRICS plugin for the runtime environment involves several steps:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("creating the folder structure to store the plugin files")])]),e._v(" "),t("li",[t("p",[e._v("creating the ANT build script file")])]),e._v(" "),t("li",[t("p",[e._v("creating the manifest file")])]),e._v(" "),t("li",[t("p",[e._v("creating the bundle-descriptor, which specifies the ports and properties of the plugin")])]),e._v(" "),t("li",[t("p",[e._v("creating the source code file of the JavaInstance")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("defining the ports and properties and implementing the get- and set-methods for input-, output-, eventListener- and evenTrigger ports")])]),e._v(" "),t("li",[t("p",[e._v("implementing the get- and set- methods for property values and the input ports receive handlers")])])])]),e._v(" "),t("li",[t("p",[e._v("creating the license files for the plugin and third-party libraries in the "),t("strong",[e._v("LICENSE")]),e._v(" subfolder")])])]),e._v(" "),t("p",[e._v("This process is similar for each plugin, and involves much work and sources of errors, especially for people who work with the AsTeRICS framework for the first time.")]),e._v(" "),t("p",[e._v("Usually, you look for a plugin with similar specifications, copy its folder structure and then rename and change the files as desired. But also this process needs some effort and errors/typos can be introduced very easily.")]),e._v(" "),t("p",[e._v("The purpose of the AsTeRICS Plugin Creation Tools is to make it easy to create new plugins, by providing the necessary folder structure, the bundle descriptor and a template for the JAVA source code.")]),e._v(" "),t("h2",{attrs:{id:"the-plugin-creation-wizard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-plugin-creation-wizard"}},[e._v("#")]),e._v(" The Plugin Creation Wizard")]),e._v(" "),t("p",[e._v("The plugin Creation wizard allows definition of characteristics of a new plugin and creates the needed folders and files for the Eclipse build flow, including the JAVA source code skeleton and the plugin’s bundle descriptor.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(304),alt:""}})]),e._v(" "),t("p",[e._v("As can be seen in the above figure, desired input- and output ports, data types, properties and plugin-features are simply selected and added to list boxes on the screen.")]),e._v(" "),t("p",[e._v("Important Notes:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("the path to the target folder has to exist in the local file system, and must point to the ARE/components directory where all plugin source files are located, e.g.: “C:\\asterics\\bin\\components\\”.")])]),e._v(" "),t("li",[t("p",[e._v("The plugin name must be specified in CamelCase letters (capital first letter), e.g. “MyPlugin”. Type and Subcategory have to be specified - they define the location where the plugin will appear in the ACS Components menu.")])]),e._v(" "),t("li",[t("p",[e._v("It is possible to create a list of possible text-selections in a combo-box in the ACS property editor. The data type for this property must be integer, the property gets the number of the selected item. Text-captions for the combo-box entries must be separated with double slash, e.g: “Mode 1//Mode 2//Mode 3”.")])])]),e._v(" "),t("h2",{attrs:{id:"created-files-and-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#created-files-and-folders"}},[e._v("#")]),e._v(" Created files and folders")]),e._v(" "),t("p",[e._v("After “Create Plugin!” has been pressed and the plugin creation was completed successfully, following sub-folders and files are begin created:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(305),alt:""}})]),e._v(" "),t("p",[e._v("The root folder contains the build script, which can be executed inside Eclipse to compile and build the plugin (.jar) file:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(306),alt:""}})]),e._v(" "),t("p",[e._v("The META-INF folder contains the manifest file")]),e._v(" "),t("p",[t("img",{attrs:{src:n(307),alt:""}})]),e._v(" "),t("p",[e._v("The “resources” folder contains the bundle descriptor (bundle_descriptor.xml):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(308),alt:""}})]),e._v(" "),t("p",[e._v("The source code folder "),t("code",[e._v("src/main/java/eu/asterics/component//")]),e._v(" contains a template for the plugin source code in JAVA, including the definitions of the selected ports and properties and the needed get- and set- methods for ports and property values. The code skeleton complies to the AsTeRICS coding guidelines and contains the AsTeRICS source file header (only a small portion is shown in the following screenshot).")]),e._v(" "),t("p",[t("img",{attrs:{src:n(309),alt:""}})]),e._v(" "),t("p",[e._v("After the Eclipse IDE has been opened, Eclipse must be pushed to refresh the folder structure by pushing F5. Furthermore, the path "),t("code",[e._v("src/main/java")]),e._v(" must be configured as source folder.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(310),alt:""}})]),e._v(" "),t("p",[e._v("The plugin code can be built using the provided build script (right-click build.xml -> RunAs -> Ant Build in the plugin’s folder)")]),e._v(" "),t("p",[t("img",{attrs:{src:n(311),alt:""}})]),e._v(" "),t("p",[e._v("To see the plugin in the ACS editor window and/or start it inside the runtime environment, the Plugin Activation Tool can be used (see section 3).")]),e._v(" "),t("h2",{attrs:{id:"plugin-activation-in-acs-and-are"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-activation-in-acs-and-are"}},[e._v("#")]),e._v(" Plugin Activation in ACS and ARE")]),e._v(" "),t("p",[e._v("To use a new AsTeRICS plugin which has been built using the Eclipse build flow and exists as executable .jar file/OSGI bundle, one step is necessary:")]),e._v(" "),t("ol",[t("li",[e._v("The Plugin has to be "),t("strong",[e._v("announced to the ACS")]),e._v(" – so that it gets visible in the graphical editor and can be used for the creation of deployment models. This is done by adding the bundle descriptor of the new plugin to a component-collection file (extension “.abd”) in the ACS-folder. These component collections contain all bundle-descriptors of components which can be used in the ACS. The new plugin section can be added either manually or can be downloaded from the running ARE via the ACS’ Component-Collection Manager (recommended, see 3.2.1). Using the Component Collection Manger, the downloaded collection can be stored as “default Component Collection” for the ACS, so that all components will be available when the ACS is started next time.")])]),e._v(" "),t("p",[e._v("Subsequently, the plugin can be selected in the “components” menu of the ACS, and the ARE will activate the plugin at startup.")]),e._v(" "),t("h2",{attrs:{id:"component-collection-management-in-the-acs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-collection-management-in-the-acs"}},[e._v("#")]),e._v(" Component-Collection Management in the ACS")]),e._v(" "),t("p",[e._v("The ACS provides a function for downloading the bundle descriptions of all active plugins directly from a running ARE and creating a component collection file from this information. (“System”- tab, Button “Download Component Collection”):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(312),alt:""}})]),e._v(" "),t("p",[e._v("The component collection will be stored as “.abd” – file in the ACS folder, subfolder “componentcollections”. The new component collection can be used right after download, but will not be available after an ACS restart.")]),e._v(" "),t("p",[e._v("Within the ACS Component-Collection Manager (in the “Miscellaneous” tab), component collections can be selected or set as default collection for the ACS startup. For details see the User Manual, ACS section.")]),e._v(" "),t("p",[e._v("Please note that the “loader.ini” – file has to be updated manually in the ARE’s “profile” subfolder, by addition of the new .jar filename. After restart of the ARE and connection to the ACS, the component collection can be downloaded.")]),e._v(" "),t("h2",{attrs:{id:"plugin-license-declaration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-license-declaration"}},[e._v("#")]),e._v(" Plugin License Declaration")]),e._v(" "),t("p",[e._v("Since AsTeRICS version 2.8 the licenses (including licenses of third-party libraries) of a plugin must be provided as .txt files in the LICENSE subfolder. The filenames must follow a defined naming convention, which is:")]),e._v(" "),t("p",[e._v("A contributor must add the respective license file for the component (either "),t("strong",[e._v("LICENSE_MITOrGPLv3WithException.txt")]),e._v(" or one of the two dual license options) to the component/LICENSE folder. Furthermore, for each thirdparty library used, the license file must be added with the following naming convention (Please use CamelCase notation for the library and license names):")]),e._v(" "),t("p",[t("strong",[e._v("THIRDPARTY_NameOfLibrary_LicenseNameInclVersionInfo.txt")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{303:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_c2213f881cbf5182.abc6a2f0.png"},304:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_ae369b509ff2c0e5.bc1cbc88.png"},305:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_dd4b70e6240040e3.6272921f.png"},306:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a82259165c76b9df.da0379b4.png"},307:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_3d4398abcb45cc73.1ff3242b.png"},308:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_fbbda5b6e8f42820.b9487507.png"},309:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_a0117682e4ae2ecc.f3f88992.png"},310:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_4304f99776fb485f.9217fb55.png"},311:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_f35fad4db20b5c1.cc89c5a3.png"},312:function(e,t,n){e.exports=n.p+"assets/img/DeveloperManual_html_2672e47f28834257.fa86415c.png"},988:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"plugin-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-development"}},[e._v("#")]),e._v(" Plugin Development")]),e._v(" "),t("h2",{attrs:{id:"a-quick-guide-to-asterics-plugin-development"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-quick-guide-to-asterics-plugin-development"}},[e._v("#")]),e._v(" A Quick Guide to AsTeRICS Plugin Development")]),e._v(" "),t("p",[e._v("This section describes the AsTeRICS Plugin-Creation tool and the plugin-activation process. These tools make it easy to create new plugins and make them available in ACS and ARE. They can be started manually from their location in the "),t("strong",[e._v("AsTeRICS_runtime.zip")]),e._v(" package (folder: “ACS/tools”) – or they can be launched from the “Misc.” – Tab in the main menu of the ACS:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(303),alt:""}})]),e._v(" "),t("p",[e._v("The creation of a new AsTeRICS plugin for the runtime environment involves several steps:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("creating the folder structure to store the plugin files")])]),e._v(" "),t("li",[t("p",[e._v("creating the ANT build script file")])]),e._v(" "),t("li",[t("p",[e._v("creating the manifest file")])]),e._v(" "),t("li",[t("p",[e._v("creating the bundle-descriptor, which specifies the ports and properties of the plugin")])]),e._v(" "),t("li",[t("p",[e._v("creating the source code file of the JavaInstance")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("defining the ports and properties and implementing the get- and set-methods for input-, output-, eventListener- and evenTrigger ports")])]),e._v(" "),t("li",[t("p",[e._v("implementing the get- and set- methods for property values and the input ports receive handlers")])])])]),e._v(" "),t("li",[t("p",[e._v("creating the license files for the plugin and third-party libraries in the "),t("strong",[e._v("LICENSE")]),e._v(" subfolder")])])]),e._v(" "),t("p",[e._v("This process is similar for each plugin, and involves much work and sources of errors, especially for people who work with the AsTeRICS framework for the first time.")]),e._v(" "),t("p",[e._v("Usually, you look for a plugin with similar specifications, copy its folder structure and then rename and change the files as desired. But also this process needs some effort and errors/typos can be introduced very easily.")]),e._v(" "),t("p",[e._v("The purpose of the AsTeRICS Plugin Creation Tools is to make it easy to create new plugins, by providing the necessary folder structure, the bundle descriptor and a template for the JAVA source code.")]),e._v(" "),t("h2",{attrs:{id:"the-plugin-creation-wizard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-plugin-creation-wizard"}},[e._v("#")]),e._v(" The Plugin Creation Wizard")]),e._v(" "),t("p",[e._v("The plugin Creation wizard allows definition of characteristics of a new plugin and creates the needed folders and files for the Eclipse build flow, including the JAVA source code skeleton and the plugin’s bundle descriptor.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(304),alt:""}})]),e._v(" "),t("p",[e._v("As can be seen in the above figure, desired input- and output ports, data types, properties and plugin-features are simply selected and added to list boxes on the screen.")]),e._v(" "),t("p",[e._v("Important Notes:")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("the path to the target folder has to exist in the local file system, and must point to the ARE/components directory where all plugin source files are located, e.g.: “C:\\asterics\\bin\\components\\”.")])]),e._v(" "),t("li",[t("p",[e._v("The plugin name must be specified in CamelCase letters (capital first letter), e.g. “MyPlugin”. Type and Subcategory have to be specified - they define the location where the plugin will appear in the ACS Components menu.")])]),e._v(" "),t("li",[t("p",[e._v("It is possible to create a list of possible text-selections in a combo-box in the ACS property editor. The data type for this property must be integer, the property gets the number of the selected item. Text-captions for the combo-box entries must be separated with double slash, e.g: “Mode 1//Mode 2//Mode 3”.")])])]),e._v(" "),t("h2",{attrs:{id:"created-files-and-folders"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#created-files-and-folders"}},[e._v("#")]),e._v(" Created files and folders")]),e._v(" "),t("p",[e._v("After “Create Plugin!” has been pressed and the plugin creation was completed successfully, following sub-folders and files are begin created:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(305),alt:""}})]),e._v(" "),t("p",[e._v("The root folder contains the build script, which can be executed inside Eclipse to compile and build the plugin (.jar) file:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(306),alt:""}})]),e._v(" "),t("p",[e._v("The META-INF folder contains the manifest file")]),e._v(" "),t("p",[t("img",{attrs:{src:n(307),alt:""}})]),e._v(" "),t("p",[e._v("The “resources” folder contains the bundle descriptor (bundle_descriptor.xml):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(308),alt:""}})]),e._v(" "),t("p",[e._v("The source code folder "),t("code",[e._v("src/main/java/eu/asterics/component//")]),e._v(" contains a template for the plugin source code in JAVA, including the definitions of the selected ports and properties and the needed get- and set- methods for ports and property values. The code skeleton complies to the AsTeRICS coding guidelines and contains the AsTeRICS source file header (only a small portion is shown in the following screenshot).")]),e._v(" "),t("p",[t("img",{attrs:{src:n(309),alt:""}})]),e._v(" "),t("p",[e._v("After the Eclipse IDE has been opened, Eclipse must be pushed to refresh the folder structure by pushing F5. Furthermore, the path "),t("code",[e._v("src/main/java")]),e._v(" must be configured as source folder.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(310),alt:""}})]),e._v(" "),t("p",[e._v("The plugin code can be built using the provided build script (right-click build.xml -> RunAs -> Ant Build in the plugin’s folder)")]),e._v(" "),t("p",[t("img",{attrs:{src:n(311),alt:""}})]),e._v(" "),t("p",[e._v("To see the plugin in the ACS editor window and/or start it inside the runtime environment, the Plugin Activation Tool can be used (see section 3).")]),e._v(" "),t("h2",{attrs:{id:"plugin-activation-in-acs-and-are"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-activation-in-acs-and-are"}},[e._v("#")]),e._v(" Plugin Activation in ACS and ARE")]),e._v(" "),t("p",[e._v("To use a new AsTeRICS plugin which has been built using the Eclipse build flow and exists as executable .jar file/OSGI bundle, one step is necessary:")]),e._v(" "),t("ol",[t("li",[e._v("The Plugin has to be "),t("strong",[e._v("announced to the ACS")]),e._v(" – so that it gets visible in the graphical editor and can be used for the creation of deployment models. This is done by adding the bundle descriptor of the new plugin to a component-collection file (extension “.abd”) in the ACS-folder. These component collections contain all bundle-descriptors of components which can be used in the ACS. The new plugin section can be added either manually or can be downloaded from the running ARE via the ACS’ Component-Collection Manager (recommended, see 3.2.1). Using the Component Collection Manger, the downloaded collection can be stored as “default Component Collection” for the ACS, so that all components will be available when the ACS is started next time.")])]),e._v(" "),t("p",[e._v("Subsequently, the plugin can be selected in the “components” menu of the ACS, and the ARE will activate the plugin at startup.")]),e._v(" "),t("h2",{attrs:{id:"component-collection-management-in-the-acs"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-collection-management-in-the-acs"}},[e._v("#")]),e._v(" Component-Collection Management in the ACS")]),e._v(" "),t("p",[e._v("The ACS provides a function for downloading the bundle descriptions of all active plugins directly from a running ARE and creating a component collection file from this information. (“System”- tab, Button “Download Component Collection”):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(312),alt:""}})]),e._v(" "),t("p",[e._v("The component collection will be stored as “.abd” – file in the ACS folder, subfolder “componentcollections”. The new component collection can be used right after download, but will not be available after an ACS restart.")]),e._v(" "),t("p",[e._v("Within the ACS Component-Collection Manager (in the “Miscellaneous” tab), component collections can be selected or set as default collection for the ACS startup. For details see the User Manual, ACS section.")]),e._v(" "),t("p",[e._v("Please note that the “loader.ini” – file has to be updated manually in the ARE’s “profile” subfolder, by addition of the new .jar filename. After restart of the ARE and connection to the ACS, the component collection can be downloaded.")]),e._v(" "),t("h2",{attrs:{id:"plugin-license-declaration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin-license-declaration"}},[e._v("#")]),e._v(" Plugin License Declaration")]),e._v(" "),t("p",[e._v("Since AsTeRICS version 2.8 the licenses (including licenses of third-party libraries) of a plugin must be provided as .txt files in the LICENSE subfolder. The filenames must follow a defined naming convention, which is:")]),e._v(" "),t("p",[e._v("A contributor must add the respective license file for the component (either "),t("strong",[e._v("LICENSE_MITOrGPLv3WithException.txt")]),e._v(" or one of the two dual license options) to the component/LICENSE folder. Furthermore, for each thirdparty library used, the license file must be added with the following naming convention (Please use CamelCase notation for the library and license names):")]),e._v(" "),t("p",[t("strong",[e._v("THIRDPARTY_NameOfLibrary_LicenseNameInclVersionInfo.txt")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/130.68300466.js b/assets/js/130.de6e36f4.js similarity index 90% rename from assets/js/130.68300466.js rename to assets/js/130.de6e36f4.js index e469f4b8ea..714aa529e8 100644 --- a/assets/js/130.68300466.js +++ b/assets/js/130.de6e36f4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[130],{1040:function(e,t,n){"use strict";n.r(t);var s=n(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gui-designer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gui-designer"}},[e._v("#")]),e._v(" GUI Designer")]),e._v(" "),t("p",[e._v("The GUI Designer allows to arrange the graphical user interfaces (GUI) of those components that have one. These GUI Elements will then be shown on the ARE GUI. GUI elements are drawn and deleted automatically when a component with a GUI is added to or deleted from the model. Within the GUI Designer the size and the position of the GUI Elements can be changed by drag and drop.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(493),alt:"Screenshot: The GUI Designer of the ACS",title:"Screenshot: The GUI Designer of the ACS"}})]),e._v(" "),t("p",[e._v("The GUI Designer")]),e._v(" "),t("p",[e._v("Keyboard users can enter keyboard mode by hitting the Enter key when GUI Designer is selected. Then the user can navigate the elements by using the arrow keys. Shift-arrow keys moves the selected element, Alt-arrow keys resizes the selected element.")])])}),[],!1,null,null,null);t.default=r.exports},493:function(e,t,n){e.exports=n.p+"assets/img/gui_designer.eb48eff2.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[130],{1040:function(e,t,n){"use strict";n.r(t);var s=n(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gui-designer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gui-designer"}},[e._v("#")]),e._v(" GUI Designer")]),e._v(" "),t("p",[e._v("The GUI Designer allows to arrange the graphical user interfaces (GUI) of those components that have one. These GUI Elements will then be shown on the ARE GUI. GUI elements are drawn and deleted automatically when a component with a GUI is added to or deleted from the model. Within the GUI Designer the size and the position of the GUI Elements can be changed by drag and drop.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(487),alt:"Screenshot: The GUI Designer of the ACS",title:"Screenshot: The GUI Designer of the ACS"}})]),e._v(" "),t("p",[e._v("The GUI Designer")]),e._v(" "),t("p",[e._v("Keyboard users can enter keyboard mode by hitting the Enter key when GUI Designer is selected. Then the user can navigate the elements by using the arrow keys. Shift-arrow keys moves the selected element, Alt-arrow keys resizes the selected element.")])])}),[],!1,null,null,null);t.default=r.exports},487:function(e,t,n){e.exports=n.p+"assets/img/gui_designer.eb48eff2.png"}}]); \ No newline at end of file diff --git a/assets/js/131.71d55b25.js b/assets/js/131.b6d692c2.js similarity index 92% rename from assets/js/131.71d55b25.js rename to assets/js/131.b6d692c2.js index ff4aa0309a..4d3afd8b74 100644 --- a/assets/js/131.71d55b25.js +++ b/assets/js/131.b6d692c2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[131],{1043:function(e,t,n){"use strict";n.r(t);var s=n(2),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"list-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-view"}},[e._v("#")]),e._v(" List View")]),e._v(" "),t("p",[e._v("The List View provides the same model as shown in the Model Designer, but as a list of elements. It is sorted by Sensors, Processors and Actuators. For each component it shows a list of Ports and for each port a list of connections, including a direct link to the connected element. It also contains buttons to connect channels. For example by pressing "),t("em",[e._v("Start new datachannel")]),e._v(", a new datachannel is started. The focus automatically jumps to the "),t("em",[e._v("Action Pending")]),e._v(" section at the top of the page, where the pending action is indicated and a "),t("em",[e._v("Cancel channel")]),e._v(" button enables the user to continue without completing the channel. However, if the user presses a "),t("em",[e._v("Connect datachannel here")]),e._v(" button at a matching input port, the connection is finalised and the channel now exists. This works in the same way for event channels.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(496),alt:"Screenshot: List View",title:"Screenshot: List View"}})]),e._v(" "),t("p",[e._v("List View")]),e._v(" "),t("p",[e._v("Keyboard users can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Then the user can navigate the elements by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Space")]),e._v(" activates port mode, so that the ports of the selected components can be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends port mode."),t("br"),e._v("\nWhen in port mode, the user can activate channel mode by pressing the "),t("em",[e._v("Space")]),e._v(" bar again. Now the channels connected to the selected port can be navigated using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends channel mode."),t("br"),e._v("\nThe buttons for connecting the channels and for jumping to connected elements can be reached by using the "),t("em",[e._v("Tab")]),e._v(" key")])])}),[],!1,null,null,null);t.default=a.exports},496:function(e,t,n){e.exports=n.p+"assets/img/list_view.ddd12587.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[131],{1042:function(e,t,n){"use strict";n.r(t);var s=n(2),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"list-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-view"}},[e._v("#")]),e._v(" List View")]),e._v(" "),t("p",[e._v("The List View provides the same model as shown in the Model Designer, but as a list of elements. It is sorted by Sensors, Processors and Actuators. For each component it shows a list of Ports and for each port a list of connections, including a direct link to the connected element. It also contains buttons to connect channels. For example by pressing "),t("em",[e._v("Start new datachannel")]),e._v(", a new datachannel is started. The focus automatically jumps to the "),t("em",[e._v("Action Pending")]),e._v(" section at the top of the page, where the pending action is indicated and a "),t("em",[e._v("Cancel channel")]),e._v(" button enables the user to continue without completing the channel. However, if the user presses a "),t("em",[e._v("Connect datachannel here")]),e._v(" button at a matching input port, the connection is finalised and the channel now exists. This works in the same way for event channels.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(494),alt:"Screenshot: List View",title:"Screenshot: List View"}})]),e._v(" "),t("p",[e._v("List View")]),e._v(" "),t("p",[e._v("Keyboard users can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Then the user can navigate the elements by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Space")]),e._v(" activates port mode, so that the ports of the selected components can be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends port mode."),t("br"),e._v("\nWhen in port mode, the user can activate channel mode by pressing the "),t("em",[e._v("Space")]),e._v(" bar again. Now the channels connected to the selected port can be navigated using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends channel mode."),t("br"),e._v("\nThe buttons for connecting the channels and for jumping to connected elements can be reached by using the "),t("em",[e._v("Tab")]),e._v(" key")])])}),[],!1,null,null,null);t.default=a.exports},494:function(e,t,n){e.exports=n.p+"assets/img/list_view.ddd12587.png"}}]); \ No newline at end of file diff --git a/assets/js/132.fee5c5d5.js b/assets/js/132.da5d1bd5.js similarity index 93% rename from assets/js/132.fee5c5d5.js rename to assets/js/132.da5d1bd5.js index 1bd9811852..5667afe105 100644 --- a/assets/js/132.fee5c5d5.js +++ b/assets/js/132.da5d1bd5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[132],{1042:function(t,e,s){"use strict";s.r(e);var a=s(2),n=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"miscellaneous"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#miscellaneous"}},[t._v("#")]),t._v(" Miscellaneous")]),t._v(" "),e("p",[t._v("The tab "),e("em",[t._v("Misc.")]),t._v(" (Miscellaneous) contains a button that leads to this help system and a button that gives information about the ACS. The other functions on this tab are not yet implemented.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(495),alt:"Screenshot: The Miscellaneous Tab",title:"Screenshot: The Miscellaneous Tab"}})]),t._v(" "),e("p",[t._v("The Miscellaneous Tab")])])}),[],!1,null,null,null);e.default=n.exports},495:function(t,e,s){t.exports=s.p+"assets/img/miscellaneous_tab.d09bda1c.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[132],{1043:function(t,e,s){"use strict";s.r(e);var a=s(2),n=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"miscellaneous"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#miscellaneous"}},[t._v("#")]),t._v(" Miscellaneous")]),t._v(" "),e("p",[t._v("The tab "),e("em",[t._v("Misc.")]),t._v(" (Miscellaneous) contains a button that leads to this help system and a button that gives information about the ACS. The other functions on this tab are not yet implemented.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(495),alt:"Screenshot: The Miscellaneous Tab",title:"Screenshot: The Miscellaneous Tab"}})]),t._v(" "),e("p",[t._v("The Miscellaneous Tab")])])}),[],!1,null,null,null);e.default=n.exports},495:function(t,e,s){t.exports=s.p+"assets/img/miscellaneous_tab.d09bda1c.png"}}]); \ No newline at end of file diff --git a/assets/js/133.b3ad2ffe.js b/assets/js/133.0348c000.js similarity index 82% rename from assets/js/133.b3ad2ffe.js rename to assets/js/133.0348c000.js index 055d944c2c..9657e6edd4 100644 --- a/assets/js/133.b3ad2ffe.js +++ b/assets/js/133.0348c000.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[133],{1041:function(e,t,o){"use strict";o.r(t);var s=o(2),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"open-and-save-models"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#open-and-save-models"}},[e._v("#")]),e._v(" Open and Save Models")]),e._v(" "),t("p",[e._v("In the system tab, models can be saved to the local file system ("),t("em",[e._v("Save Model")]),e._v("), or loaded from the local file system ("),t("em",[e._v("Open Model")]),e._v("). "),t("em",[e._v("New Model")]),e._v(" adds a new tab with a new empty model. To close a model tab use "),t("em",[e._v("Close Model")])]),e._v(" "),t("p",[t("img",{attrs:{src:o(494),alt:"Screenshot: Local Operations Group in Tab System",title:"Screenshot: Local Operations Group in Tab System"}})]),e._v(" "),t("p",[e._v("Local Operations Group in Tab System")])])}),[],!1,null,null,null);t.default=a.exports},494:function(e,t,o){e.exports=o.p+"assets/img/local_operations_group.b36f5cfe.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[133],{1044:function(e,t,o){"use strict";o.r(t);var s=o(2),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"open-and-save-models"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#open-and-save-models"}},[e._v("#")]),e._v(" Open and Save Models")]),e._v(" "),t("p",[e._v("In the system tab, models can be saved to the local file system ("),t("em",[e._v("Save Model")]),e._v("), or loaded from the local file system ("),t("em",[e._v("Open Model")]),e._v("). "),t("em",[e._v("New Model")]),e._v(" adds a new tab with a new empty model. To close a model tab use "),t("em",[e._v("Close Model")])]),e._v(" "),t("p",[t("img",{attrs:{src:o(496),alt:"Screenshot: Local Operations Group in Tab System",title:"Screenshot: Local Operations Group in Tab System"}})]),e._v(" "),t("p",[e._v("Local Operations Group in Tab System")])])}),[],!1,null,null,null);t.default=a.exports},496:function(e,t,o){e.exports=o.p+"assets/img/local_operations_group.b36f5cfe.png"}}]); \ No newline at end of file diff --git a/assets/js/134.fbe4e6f5.js b/assets/js/134.b8b66a89.js similarity index 95% rename from assets/js/134.fbe4e6f5.js rename to assets/js/134.b8b66a89.js index 94f6afec89..ac70f65117 100644 --- a/assets/js/134.fbe4e6f5.js +++ b/assets/js/134.b8b66a89.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[134],{1044:function(e,t,r){"use strict";r.r(t);var i=r(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"acs-basic-functions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#acs-basic-functions"}},[e._v("#")]),e._v(" ACS Basic Functions")]),e._v(" "),t("p",[e._v("The AsTeRICS Configuration Suite (ACS) is a web application, which can be run either locally (by simply opening index.html in a webbrowser) or inside a webserver (by entering the respective URL in the webbrowser). Note that the WebACS is currently optimised for usage with Mozilla Firefox 56 or later.")]),e._v(" "),t("p",[e._v("The figure below shows the WebACS after startup. The red numbers point out the most important areas:")]),e._v(" "),t("ol",[t("li",[e._v("Menu")]),e._v(" "),t("li",[e._v("Model Designer: graphical representation of current AsTeRICS model")]),e._v(" "),t("li",[e._v("GUI Designer: graphical editor for runtime user interface")]),e._v(" "),t("li",[e._v("List View: current AsTeRICS model as a list of elements and their interrelations")]),e._v(" "),t("li",[e._v("Property Editor: for adapting the properties of the selected element")])]),e._v(" "),t("p",[t("img",{attrs:{src:r(497),alt:"Screenshot: ACS after startup",title:"Screenshot: ACS after startup"}})]),e._v(" "),t("p",[e._v("ACS after Startup")])])}),[],!1,null,null,null);t.default=s.exports},497:function(e,t,r){e.exports=r.p+"assets/img/acs_after_startup.754041b6.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[134],{1045:function(e,t,r){"use strict";r.r(t);var i=r(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"acs-basic-functions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#acs-basic-functions"}},[e._v("#")]),e._v(" ACS Basic Functions")]),e._v(" "),t("p",[e._v("The AsTeRICS Configuration Suite (ACS) is a web application, which can be run either locally (by simply opening index.html in a webbrowser) or inside a webserver (by entering the respective URL in the webbrowser). Note that the WebACS is currently optimised for usage with Mozilla Firefox 56 or later.")]),e._v(" "),t("p",[e._v("The figure below shows the WebACS after startup. The red numbers point out the most important areas:")]),e._v(" "),t("ol",[t("li",[e._v("Menu")]),e._v(" "),t("li",[e._v("Model Designer: graphical representation of current AsTeRICS model")]),e._v(" "),t("li",[e._v("GUI Designer: graphical editor for runtime user interface")]),e._v(" "),t("li",[e._v("List View: current AsTeRICS model as a list of elements and their interrelations")]),e._v(" "),t("li",[e._v("Property Editor: for adapting the properties of the selected element")])]),e._v(" "),t("p",[t("img",{attrs:{src:r(497),alt:"Screenshot: ACS after startup",title:"Screenshot: ACS after startup"}})]),e._v(" "),t("p",[e._v("ACS after Startup")])])}),[],!1,null,null,null);t.default=s.exports},497:function(e,t,r){e.exports=r.p+"assets/img/acs_after_startup.754041b6.png"}}]); \ No newline at end of file diff --git a/assets/js/135.3d2b77b3.js b/assets/js/135.58e12e9b.js similarity index 94% rename from assets/js/135.3d2b77b3.js rename to assets/js/135.58e12e9b.js index 075ae94c39..bdc7dc337b 100644 --- a/assets/js/135.3d2b77b3.js +++ b/assets/js/135.58e12e9b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[135],{1045:function(t,e,o){"use strict";o.r(e);var s=o(2),n=Object(s.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"setting-the-properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-properties"}},[this._v("#")]),this._v(" Setting the Properties")]),this._v(" "),t("p",[this._v("Each component has 0 to several properties, by means of which the behaviour of the component can be adapted or functions can be enabled. The usage of the properties and their effects can be found in the documentation of the components. The following figure shows the property editor editing the characteristics of the component “DigitalOut”.")]),this._v(" "),t("p",[t("img",{attrs:{src:o(498),alt:"Screenshot: The Property Tab showing a Component's Properties",title:"Screenshot: The Property Tab showing a Component's Properties"}})]),this._v(" "),t("p",[this._v("The Property Tab showing a Component’s Properties")])])}),[],!1,null,null,null);e.default=n.exports},498:function(t,e,o){t.exports=o.p+"assets/img/a_components_properties_in_property_tab.3a55cb01.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[135],{1046:function(t,e,o){"use strict";o.r(e);var s=o(2),n=Object(s.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"setting-the-properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-the-properties"}},[this._v("#")]),this._v(" Setting the Properties")]),this._v(" "),t("p",[this._v("Each component has 0 to several properties, by means of which the behaviour of the component can be adapted or functions can be enabled. The usage of the properties and their effects can be found in the documentation of the components. The following figure shows the property editor editing the characteristics of the component “DigitalOut”.")]),this._v(" "),t("p",[t("img",{attrs:{src:o(498),alt:"Screenshot: The Property Tab showing a Component's Properties",title:"Screenshot: The Property Tab showing a Component's Properties"}})]),this._v(" "),t("p",[this._v("The Property Tab showing a Component’s Properties")])])}),[],!1,null,null,null);e.default=n.exports},498:function(t,e,o){t.exports=o.p+"assets/img/a_components_properties_in_property_tab.3a55cb01.png"}}]); \ No newline at end of file diff --git a/assets/js/136.f94ff2c2.js b/assets/js/136.85cc6adb.js similarity index 97% rename from assets/js/136.f94ff2c2.js rename to assets/js/136.85cc6adb.js index 368186f517..19ebad6ce8 100644 --- a/assets/js/136.f94ff2c2.js +++ b/assets/js/136.85cc6adb.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[136],{1046:function(e,t,o){"use strict";o.r(t);var n=o(2),i=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"the-edit-tab"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-edit-tab"}},[e._v("#")]),e._v(" The Edit Tab")]),e._v(" "),t("p",[e._v("The edit tab is used for manipulating the components and their interconnections. The list below provides a detailed description of the available operations found on the Edit Tab as shown in the figure.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(499),alt:"Screenshot: The edit tab",title:"Screenshot: The edit tab"}})]),e._v(" "),t("p",[e._v("The Edit Tab")]),e._v(" "),t("p",[e._v("Description of the "),t("em",[e._v("Model Properties")]),e._v(" Group:")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Edit Model ID (not yet implemented)")]),e._v(" edits the unique model ID. This ID is generated automatically and is used by the ARE to store model based information belonging to the editing model.")]),e._v(" "),t("li",[t("em",[e._v("Show Model Description (not yet implemented)")]),e._v(" shows the model description dialog, allowing the user to edit the model description. The description is divided into three parts: "),t("em",[e._v("Short Description")]),e._v(", "),t("em",[e._v("Model Requirements")]),e._v(" and "),t("em",[e._v("Detailed Description")])])]),e._v(" "),t("p",[e._v("Description of the "),t("em",[e._v("Edit")]),e._v(" Group:")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Cut")]),e._v(" cuts out the selected elements and stores them to clipboard.")]),e._v(" "),t("li",[t("em",[e._v("Copy")]),e._v(" copies the selected elements to the clipboard.")]),e._v(" "),t("li",[t("em",[e._v("Paste")]),e._v(" copies the elements from the clipboard to the drawing field.")]),e._v(" "),t("li",[t("em",[e._v("Delete Selection")]),e._v(" deletes the selected elements. This can also be done with the delete-key.")]),e._v(" "),t("li",[t("em",[e._v("Undo")]),e._v(" the last editing action like move a component, add/delete a component or also the channel and event channel operations. Setting properties and events (things done in the property window) are excluded form undo.")]),e._v(" "),t("li",[t("em",[e._v("Redo")]),e._v(" the last editing action that has been undone with "),t("em",[e._v("Undo")]),e._v(". Setting properties and events (things done in the property window) are excluded form redo.")])]),e._v(" "),t("p",[e._v("After at least two components have been added to the deployment, they can be connected to each other. A connection always has to start at an output port (right hand side of a component) connecting to an input port (left side of a component). One output port can be connected to several input ports, but an input port can only receive data from one output port. Additionally the data types of the ports must match in order to be able to connect them (see the section on Channels).")])])}),[],!1,null,null,null);t.default=i.exports},499:function(e,t,o){e.exports=o.p+"assets/img/edit_tab.366308ad.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[136],{1048:function(e,t,o){"use strict";o.r(t);var n=o(2),i=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"the-edit-tab"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-edit-tab"}},[e._v("#")]),e._v(" The Edit Tab")]),e._v(" "),t("p",[e._v("The edit tab is used for manipulating the components and their interconnections. The list below provides a detailed description of the available operations found on the Edit Tab as shown in the figure.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(499),alt:"Screenshot: The edit tab",title:"Screenshot: The edit tab"}})]),e._v(" "),t("p",[e._v("The Edit Tab")]),e._v(" "),t("p",[e._v("Description of the "),t("em",[e._v("Model Properties")]),e._v(" Group:")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Edit Model ID (not yet implemented)")]),e._v(" edits the unique model ID. This ID is generated automatically and is used by the ARE to store model based information belonging to the editing model.")]),e._v(" "),t("li",[t("em",[e._v("Show Model Description (not yet implemented)")]),e._v(" shows the model description dialog, allowing the user to edit the model description. The description is divided into three parts: "),t("em",[e._v("Short Description")]),e._v(", "),t("em",[e._v("Model Requirements")]),e._v(" and "),t("em",[e._v("Detailed Description")])])]),e._v(" "),t("p",[e._v("Description of the "),t("em",[e._v("Edit")]),e._v(" Group:")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Cut")]),e._v(" cuts out the selected elements and stores them to clipboard.")]),e._v(" "),t("li",[t("em",[e._v("Copy")]),e._v(" copies the selected elements to the clipboard.")]),e._v(" "),t("li",[t("em",[e._v("Paste")]),e._v(" copies the elements from the clipboard to the drawing field.")]),e._v(" "),t("li",[t("em",[e._v("Delete Selection")]),e._v(" deletes the selected elements. This can also be done with the delete-key.")]),e._v(" "),t("li",[t("em",[e._v("Undo")]),e._v(" the last editing action like move a component, add/delete a component or also the channel and event channel operations. Setting properties and events (things done in the property window) are excluded form undo.")]),e._v(" "),t("li",[t("em",[e._v("Redo")]),e._v(" the last editing action that has been undone with "),t("em",[e._v("Undo")]),e._v(". Setting properties and events (things done in the property window) are excluded form redo.")])]),e._v(" "),t("p",[e._v("After at least two components have been added to the deployment, they can be connected to each other. A connection always has to start at an output port (right hand side of a component) connecting to an input port (left side of a component). One output port can be connected to several input ports, but an input port can only receive data from one output port. Additionally the data types of the ports must match in order to be able to connect them (see the section on Channels).")])])}),[],!1,null,null,null);t.default=i.exports},499:function(e,t,o){e.exports=o.p+"assets/img/edit_tab.366308ad.png"}}]); \ No newline at end of file diff --git a/assets/js/137.d104f9e4.js b/assets/js/137.7f77ae6c.js similarity index 95% rename from assets/js/137.d104f9e4.js rename to assets/js/137.7f77ae6c.js index 334359f886..f4ce992539 100644 --- a/assets/js/137.d104f9e4.js +++ b/assets/js/137.7f77ae6c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[137],{1063:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"arewindow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#arewindow"}},[e._v("#")]),e._v(" AREWindow")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("This component allows moving the ARE window to desired locations on the screen and setting its state and modification options. Several default locations can be selected via incoming events (top, left, bottom, right or center of the screen). X- and Y- offset values can be defined - thus it becomes possible to set the ARE window e.g to a second screen (which is currently not supported in the ACS GUI designer).")]),e._v(" "),t("p",[t("img",{attrs:{src:o(576),alt:"Screenshot: AREWindow plugin",title:"Screenshot: AREWindow plugin"}})]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" The x offest value for positioning the ARE window")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" The y offest value for positioning the ARE window")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("moveToTop:")]),e._v(" moves the ARE window to the top of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToBottom:")]),e._v(" moves the ARE window to the bottom of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToLeft:")]),e._v(" moves the ARE window to the left side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToRight:")]),e._v(" moves the ARE window to the right side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToCenter:")]),e._v(" moves the ARE window to the center of the screen (x and y offsets will be applied).")]),e._v(" "),t("li",[t("strong",[e._v("minimize:")]),e._v(" minimizes the ARE window to the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("restore:")]),e._v(" restores the ARE window from the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("bringToFront:")]),e._v(" places the ARE window on top of other windows")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" default value for the x offset")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" default value for the y offset")]),e._v(" "),t("li",[t("strong",[e._v("autoSetPosition [boolean]:")]),e._v(" if selected, the ARE window position will be modified at startup of the model according to the xPos and yPos properties. Furthermore, incoming values at the xPos or yPos ports will automatically position the ARE window.")]),e._v(" "),t("li",[t("strong",[e._v("allowWindowModification [boolean]:")]),e._v(" If selected, the user can change the ARE window decoration and control panel by double- or right-clicking into the ARE window. These functions will be disabled when the property is not selected.")])])])}),[],!1,null,null,null);t.default=n.exports},576:function(e,t,o){e.exports=o.p+"assets/img/arewindow.e4d5dc4b.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[137],{1066:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"arewindow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#arewindow"}},[e._v("#")]),e._v(" AREWindow")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("This component allows moving the ARE window to desired locations on the screen and setting its state and modification options. Several default locations can be selected via incoming events (top, left, bottom, right or center of the screen). X- and Y- offset values can be defined - thus it becomes possible to set the ARE window e.g to a second screen (which is currently not supported in the ACS GUI designer).")]),e._v(" "),t("p",[t("img",{attrs:{src:o(609),alt:"Screenshot: AREWindow plugin",title:"Screenshot: AREWindow plugin"}})]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" The x offest value for positioning the ARE window")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" The y offest value for positioning the ARE window")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("moveToTop:")]),e._v(" moves the ARE window to the top of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToBottom:")]),e._v(" moves the ARE window to the bottom of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToLeft:")]),e._v(" moves the ARE window to the left side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToRight:")]),e._v(" moves the ARE window to the right side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToCenter:")]),e._v(" moves the ARE window to the center of the screen (x and y offsets will be applied).")]),e._v(" "),t("li",[t("strong",[e._v("minimize:")]),e._v(" minimizes the ARE window to the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("restore:")]),e._v(" restores the ARE window from the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("bringToFront:")]),e._v(" places the ARE window on top of other windows")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" default value for the x offset")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" default value for the y offset")]),e._v(" "),t("li",[t("strong",[e._v("autoSetPosition [boolean]:")]),e._v(" if selected, the ARE window position will be modified at startup of the model according to the xPos and yPos properties. Furthermore, incoming values at the xPos or yPos ports will automatically position the ARE window.")]),e._v(" "),t("li",[t("strong",[e._v("allowWindowModification [boolean]:")]),e._v(" If selected, the user can change the ARE window decoration and control panel by double- or right-clicking into the ARE window. These functions will be disabled when the property is not selected.")])])])}),[],!1,null,null,null);t.default=n.exports},609:function(e,t,o){e.exports=o.p+"assets/img/arewindow.e4d5dc4b.jpg"}}]); \ No newline at end of file diff --git a/assets/js/138.41364369.js b/assets/js/138.ec124362.js similarity index 95% rename from assets/js/138.41364369.js rename to assets/js/138.ec124362.js index c51df70de8..a895c1501d 100644 --- a/assets/js/138.41364369.js +++ b/assets/js/138.ec124362.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[138],{1069:function(e,t,n){"use strict";n.r(t);var r=n(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"androidphonecontrol"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#androidphonecontrol"}},[e._v("#")]),e._v(" AndroidPhoneControl")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Phone Interface)")]),e._v(" "),t("p",[e._v("This component controls a mobile phone with Android operating system through the TCP/IP connection.\nCurrently this component is able to perform such action as: call a remote phone, drop a phone call, send and receive SMS message.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(614),alt:"Screenshot: AndroidPhoneControl plugin",title:"Screenshot: AndroidPhoneControl plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("Android phone running AsTeRICSPhoneServer application.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("phoneID [string]:")]),e._v(" The phone number used for outgoing SMS and make phone calls.")]),e._v(" "),t("li",[t("strong",[e._v("SMSContent [string]:")]),e._v(" The SMS content which will be used for the send SMS action.")]),e._v(" "),t("li",[t("strong",[e._v("command [string]:")]),e._v(" String command that can be sent to this component from other plugins to trigger phone actions.\nCurrently supported commands are:\n"),t("ul",[t("li",[e._v("@PHONE: SMS:Phone_ID, “Message_content”")]),e._v(" "),t("li",[e._v("@PHONE: SMS")]),e._v(" "),t("li",[e._v("@PHONE: CALL: Phone_ID")]),e._v(" "),t("li",[e._v("@PHONE: CALL")]),e._v(" "),t("li",[e._v("@PHONE: ACCEPT")]),e._v(" "),t("li",[e._v("@PHONE: DROP")]),e._v(" "),t("li",[e._v("@PHONE: SET_ID: Phone_ID")]),e._v(" "),t("li",[e._v("@PHONE: SET_SMS: “Message_content”")])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("remotePhoneID [string]:")]),e._v(" This is a phone number of the caller or SMS sender.")]),e._v(" "),t("li",[t("strong",[e._v("receivedSMS [string]:")]),e._v(" This is the content of the incoming SMS.")]),e._v(" "),t("li",[t("strong",[e._v("errorNumber [integer]:")]),e._v(" The number of the error.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendSMS:")]),e._v(" Sends the SMS message.")]),e._v(" "),t("li",[t("strong",[e._v("makePhoneCall:")]),e._v(" Makes the phone call.")]),e._v(" "),t("li",[t("strong",[e._v("acceptPhoneCall:")]),e._v(" Accepts the incoming phone call.")]),e._v(" "),t("li",[t("strong",[e._v("dropPhoneCall:")]),e._v(" Drops the phone call.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("idleState:")]),e._v(" Phone is in the idle state.")]),e._v(" "),t("li",[t("strong",[e._v("ringState:")]),e._v(" Phone is in the ring state.")]),e._v(" "),t("li",[t("strong",[e._v("connectedState:")]),e._v(" Phone is connected with the remote phone.")]),e._v(" "),t("li",[t("strong",[e._v("newSMS:")]),e._v(" There is a new SMS.")]),e._v(" "),t("li",[t("strong",[e._v("error:")]),e._v(" An error occurred.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("connectionType [integer]:")]),e._v(" Defines connection type for the plugin: client or server.")]),e._v(" "),t("li",[t("strong",[e._v("IP [string]:")]),e._v(" IP of the remote server used in the client mode.")]),e._v(" "),t("li",[t("strong",[e._v("port [integer]:")]),e._v(" TCP/IP port of the service.")]),e._v(" "),t("li",[t("strong",[e._v("defaultPhoneID [string]:")]),e._v(" Default phone number for outgoing SMS and phone calls.")])]),e._v(" "),t("p",[t("a",{attrs:{href:"Android_connection.htm"}},[e._v("Preparation of the connection with Android Phone.")])])])}),[],!1,null,null,null);t.default=o.exports},614:function(e,t,n){e.exports=n.p+"assets/img/androidphonecontrol.c66f2379.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[138],{1068:function(e,t,n){"use strict";n.r(t);var r=n(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"androidphonecontrol"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#androidphonecontrol"}},[e._v("#")]),e._v(" AndroidPhoneControl")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Phone Interface)")]),e._v(" "),t("p",[e._v("This component controls a mobile phone with Android operating system through the TCP/IP connection.\nCurrently this component is able to perform such action as: call a remote phone, drop a phone call, send and receive SMS message.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(612),alt:"Screenshot: AndroidPhoneControl plugin",title:"Screenshot: AndroidPhoneControl plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("Android phone running AsTeRICSPhoneServer application.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("phoneID [string]:")]),e._v(" The phone number used for outgoing SMS and make phone calls.")]),e._v(" "),t("li",[t("strong",[e._v("SMSContent [string]:")]),e._v(" The SMS content which will be used for the send SMS action.")]),e._v(" "),t("li",[t("strong",[e._v("command [string]:")]),e._v(" String command that can be sent to this component from other plugins to trigger phone actions.\nCurrently supported commands are:\n"),t("ul",[t("li",[e._v("@PHONE: SMS:Phone_ID, “Message_content”")]),e._v(" "),t("li",[e._v("@PHONE: SMS")]),e._v(" "),t("li",[e._v("@PHONE: CALL: Phone_ID")]),e._v(" "),t("li",[e._v("@PHONE: CALL")]),e._v(" "),t("li",[e._v("@PHONE: ACCEPT")]),e._v(" "),t("li",[e._v("@PHONE: DROP")]),e._v(" "),t("li",[e._v("@PHONE: SET_ID: Phone_ID")]),e._v(" "),t("li",[e._v("@PHONE: SET_SMS: “Message_content”")])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("remotePhoneID [string]:")]),e._v(" This is a phone number of the caller or SMS sender.")]),e._v(" "),t("li",[t("strong",[e._v("receivedSMS [string]:")]),e._v(" This is the content of the incoming SMS.")]),e._v(" "),t("li",[t("strong",[e._v("errorNumber [integer]:")]),e._v(" The number of the error.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendSMS:")]),e._v(" Sends the SMS message.")]),e._v(" "),t("li",[t("strong",[e._v("makePhoneCall:")]),e._v(" Makes the phone call.")]),e._v(" "),t("li",[t("strong",[e._v("acceptPhoneCall:")]),e._v(" Accepts the incoming phone call.")]),e._v(" "),t("li",[t("strong",[e._v("dropPhoneCall:")]),e._v(" Drops the phone call.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("idleState:")]),e._v(" Phone is in the idle state.")]),e._v(" "),t("li",[t("strong",[e._v("ringState:")]),e._v(" Phone is in the ring state.")]),e._v(" "),t("li",[t("strong",[e._v("connectedState:")]),e._v(" Phone is connected with the remote phone.")]),e._v(" "),t("li",[t("strong",[e._v("newSMS:")]),e._v(" There is a new SMS.")]),e._v(" "),t("li",[t("strong",[e._v("error:")]),e._v(" An error occurred.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("connectionType [integer]:")]),e._v(" Defines connection type for the plugin: client or server.")]),e._v(" "),t("li",[t("strong",[e._v("IP [string]:")]),e._v(" IP of the remote server used in the client mode.")]),e._v(" "),t("li",[t("strong",[e._v("port [integer]:")]),e._v(" TCP/IP port of the service.")]),e._v(" "),t("li",[t("strong",[e._v("defaultPhoneID [string]:")]),e._v(" Default phone number for outgoing SMS and phone calls.")])]),e._v(" "),t("p",[t("a",{attrs:{href:"Android_connection.htm"}},[e._v("Preparation of the connection with Android Phone.")])])])}),[],!1,null,null,null);t.default=o.exports},612:function(e,t,n){e.exports=n.p+"assets/img/androidphonecontrol.c66f2379.jpg"}}]); \ No newline at end of file diff --git a/assets/js/139.4ebc29fc.js b/assets/js/139.3da6703e.js similarity index 92% rename from assets/js/139.4ebc29fc.js rename to assets/js/139.3da6703e.js index 8ab5541615..9ac3d9c732 100644 --- a/assets/js/139.4ebc29fc.js +++ b/assets/js/139.3da6703e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[139],{1067:function(e,t,o){"use strict";o.r(t);var n=o(2),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"androidconnection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#androidconnection"}},[e._v("#")]),e._v(" AndroidConnection")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Phone Interface)")]),e._v(" "),t("p",[t("img",{attrs:{src:o(612),alt:"Android Server Application",title:"Android Server Application"}})]),e._v(" "),t("p",[e._v("This document describes how to prepare connection between the AndroidPhoneControl component and the AsTeRICSPhoneServer application:")]),e._v(" "),t("ol",[t("li",[e._v("The connection between the AndroidPhoneControl component and the AsTeRICSPhoneServer application is made via TCP/IP connection. One of these components should work as a server, second as the client. The server should have the public IP or it should be in the same network where the client is.")]),e._v(" "),t("li",[e._v("In the model, select the connection mode in the connetionType property of the AndroidPhoneControl component. If the component should work as a server, put into the port property, the port which server will be use for its service. If the component should work as a client, put into the IP property IP of the server and into the port property the server port.")]),e._v(" "),t("li",[e._v("Run the Android Server application on the Android phone. Select the connection mode from the Connection type property. If the application should work as a server put into the port number property the port which server will be use for its service. If the application should work as a client put into the Server IP property IP of the server and into the Port Number property the server port.")]),e._v(" "),t("li",[e._v("If the AndroidPhoneControl component is set to work as the server and Android Server application is set to work as client. First run the model, then, enable Android application using Enable server property. If Android Server application is set to work as a server and the AndroidPhoneControl component is set to work as a client first enable the Android application then run the model.")])])])}),[],!1,null,null,null);t.default=r.exports},612:function(e,t,o){e.exports=o.p+"assets/img/androidserverapp.95049001.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[139],{1071:function(e,t,o){"use strict";o.r(t);var n=o(2),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"androidconnection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#androidconnection"}},[e._v("#")]),e._v(" AndroidConnection")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Phone Interface)")]),e._v(" "),t("p",[t("img",{attrs:{src:o(616),alt:"Android Server Application",title:"Android Server Application"}})]),e._v(" "),t("p",[e._v("This document describes how to prepare connection between the AndroidPhoneControl component and the AsTeRICSPhoneServer application:")]),e._v(" "),t("ol",[t("li",[e._v("The connection between the AndroidPhoneControl component and the AsTeRICSPhoneServer application is made via TCP/IP connection. One of these components should work as a server, second as the client. The server should have the public IP or it should be in the same network where the client is.")]),e._v(" "),t("li",[e._v("In the model, select the connection mode in the connetionType property of the AndroidPhoneControl component. If the component should work as a server, put into the port property, the port which server will be use for its service. If the component should work as a client, put into the IP property IP of the server and into the port property the server port.")]),e._v(" "),t("li",[e._v("Run the Android Server application on the Android phone. Select the connection mode from the Connection type property. If the application should work as a server put into the port number property the port which server will be use for its service. If the application should work as a client put into the Server IP property IP of the server and into the Port Number property the server port.")]),e._v(" "),t("li",[e._v("If the AndroidPhoneControl component is set to work as the server and Android Server application is set to work as client. First run the model, then, enable Android application using Enable server property. If Android Server application is set to work as a server and the AndroidPhoneControl component is set to work as a client first enable the Android application then run the model.")])])])}),[],!1,null,null,null);t.default=r.exports},616:function(e,t,o){e.exports=o.p+"assets/img/androidserverapp.95049001.jpg"}}]); \ No newline at end of file diff --git a/assets/js/14.2c42dcb5.js b/assets/js/14.d6148202.js similarity index 87% rename from assets/js/14.2c42dcb5.js rename to assets/js/14.d6148202.js index 23f6466106..a447315265 100644 --- a/assets/js/14.2c42dcb5.js +++ b/assets/js/14.d6148202.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{288:function(e,t,s){e.exports=s.p+"assets/img/quickstart11.c2ae8b7e.png"},414:function(e,t,s){e.exports=s.p+"assets/img/quickstart10.a588225d.png"},415:function(e,t,s){e.exports=s.p+"assets/img/quickstart12.c7981783.png"},416:function(e,t,s){e.exports=s.p+"assets/img/quickstart13.68c18f17.png"},417:function(e,t,s){e.exports=s.p+"assets/img/quickstart14.3781e998.png"},418:function(e,t,s){e.exports=s.p+"assets/img/quickstart15.2c0687da.png"},419:function(e,t,s){e.exports=s.p+"assets/img/quickstart16.4b39a603.png"},420:function(e,t,s){e.exports=s.p+"assets/img/quickstart17.a2ecc137.png"},421:function(e,t,s){e.exports=s.p+"assets/img/quickstart18.a949722d.png"},932:function(e,t,s){"use strict";s.r(t);var o=s(2),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"model-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-creation"}},[e._v("#")]),e._v(" Model Creation")]),e._v(" "),t("h2",{attrs:{id:"camera-mouse-simple"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#camera-mouse-simple"}},[e._v("#")]),e._v(" Camera Mouse Simple")]),e._v(" "),t("p",[e._v("A model is a collection of 1 to n components, where a component represents a plugin\nof the ARE. These components are connected via channels (for data connections) and\nevent channels (representing events). The following example will illustrate the\ncreation of a simple webcam mouse, using the position of the nose to control the\ncursor and opening the mouth to trigger a mouse click. This model requires a\nconnected and installed webcam.")]),e._v(" "),t("h3",{attrs:{id:"add-facetracking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-facetracking"}},[e._v("#")]),e._v(" Add Facetracking")]),e._v(" "),t("p",[e._v("In a first step, start the ACS and the ARE using the ACS.exe and ARE.exe short cuts.\nIn the ACS window select the tab "),t("strong",[e._v("Components")]),e._v(", then "),t("strong",[e._v("Sensors")]),e._v(" and within the\nsensors the menu item "),t("strong",[e._v("Computer Vision")]),e._v(". There select the component\nFacetrackerLK. The component is now on the drawing area and, if the component is\nselected, properties can be set (or changed) in the rightmost part of the ACS window.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(414),alt:"ACS - A first example (1/8)"}})]),e._v(" "),t("h3",{attrs:{id:"add-mouse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-mouse"}},[e._v("#")]),e._v(" Add Mouse")]),e._v(" "),t("p",[e._v("The next needed component is the "),t("strong",[e._v("Mouse")]),e._v(", it can be found by selecting "),t("strong",[e._v("Actuators")]),e._v(" -\n"),t("strong",[e._v("Input Device Emulation")]),e._v(". After the insert, select the Mouse component and adapt\nthe properties. Deactivate absolutePosition and set the "),t("code",[e._v("xMax")]),e._v(" and "),t("code",[e._v("yMax")]),e._v(" to your\nscreen resolution.")]),e._v(" "),t("p",[e._v("In the next step, connect the noseX and the noseY outputs of the "),t("strong",[e._v("XFacetrackerLK")]),e._v("\nwith the mouseX and mouseY inputs of the Mouse. Finally, it should look like the\nscreenshot below.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(288),alt:"ACS - A first example (2/8)"}})]),e._v(" "),t("h3",{attrs:{id:"add-mouse-click"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-mouse-click"}},[e._v("#")]),e._v(" Add Mouse Click")]),e._v(" "),t("p",[e._v("The model now would be able to use the coordinates of the nose to control the\nmouse cursor, but the mouse click is still missing.\nFor the mouse clicking functionality, we first need the "),t("strong",[e._v("MathEvaluator")]),e._v(" ("),t("strong",[e._v("Processors")]),e._v(" -\n"),t("strong",[e._v("Basic Math")]),e._v(") plugin. We connect the noseY output of the "),t("strong",[e._v("XFacetrackerLK")]),e._v(" the with\nthe inA input of the "),t("strong",[e._v("MathEvaluator")]),e._v(" and likewise the chinY with inB. In the properties\nof the "),t("strong",[e._v("MathEvaluator")]),e._v(", we set the property expression to "),t("strong",[e._v("b-a")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:s(415),alt:"ACS - A first example (3/8)"}})]),e._v(" "),t("p",[e._v("We will "),t("strong",[e._v("Differentiate")]),e._v(" ("),t("strong",[e._v("Processors")]),e._v(" -> "),t("strong",[e._v("Basic Math")]),e._v(") the out value to react on a fast\nchange of the nose to chin distance.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(416),alt:"ACS - A first example (4/8)"}})]),e._v(" "),t("p",[e._v("This processed value will then be forwarded to a "),t("strong",[e._v("Threshold")]),e._v(" ("),t("strong",[e._v("Processors")]),e._v(" -> "),t("strong",[e._v("Basic\nMath")]),e._v(") component. Set the thresholdLow and thresholdHigh values to 30.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(417),alt:"ACS - A first example (5/8)"}})]),e._v(" "),t("p",[e._v("As a final step, connect the event trigger output of the "),t("strong",[e._v("Threshold")]),e._v(" with the event\nlistener input of the "),t("strong",[e._v("Mouse")]),e._v(" – the event triggers and listeners are at the bottom of the\ncomponents. After the connection has been made, set the leftClick to eventPosEdge\nin the property editor at the right. If everything was done right, it should look like the\nfollowing screenshot:")]),e._v(" "),t("p",[t("img",{attrs:{src:s(418),alt:"ACS - A first example (6/8)"}})]),e._v(" "),t("h3",{attrs:{id:"test-model"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#test-model"}},[e._v("#")]),e._v(" Test Model")]),e._v(" "),t("p",[e._v("Now, upload the model to the ARE and press the "),t("strong",[e._v("Start Model")]),e._v(" button. A window with\nthe camera screen will appear, marking with a green and yellow circle - the position\nof nose and chin. Press the "),t("strong",[e._v("Stop Model")]),e._v(" button or press F7 to stop the model and\nget the control of the mouse back. Below is a screenshot of the system, when\nrunning.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(419),alt:"ACS - A first example (7/8)"}})]),e._v(" "),t("p",[e._v("Congratulations, your first AsTeRICS model is running!")]),e._v(" "),t("h3",{attrs:{id:"reducing-tremor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reducing-tremor"}},[e._v("#")]),e._v(" Reducing Tremor")]),e._v(" "),t("p",[e._v("You might have noticed that the mouse pointer has a tremor, because the head is\nalways in movement to a certain extent. To reduce this tremor, an "),t("strong",[e._v("Averager")]),e._v("\n("),t("strong",[e._v("Processors")]),e._v(" -> "),t("strong",[e._v("Basic Math")]),e._v(") will be used to smoothen the X coordinates and\nanother "),t("strong",[e._v("Averager")]),e._v(" for the Y coordinates between the "),t("strong",[e._v("XFacetrackerLK")]),e._v(" and the\n"),t("strong",[e._v("Mouse")]),e._v(". The bufferSize in the properties will be set to 5.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(420),alt:"ACS - A first example (8/8)"}})]),e._v(" "),t("p",[e._v("That’s all, just upload the model and start it now.")]),e._v(" "),t("h3",{attrs:{id:"adjusting-the-webcam"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adjusting-the-webcam"}},[e._v("#")]),e._v(" Adjusting the Webcam")]),e._v(" "),t("p",[e._v("If you don’t like the position of the webcam after starting the model, you can set a\ndifferent start position. Select the "),t("strong",[e._v("GUI Designer")]),e._v(" tab above the drawing area and\nmove the webcam window to an area, which is comfortable to you. Also the size of\nthe window can be adjusted.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(421),alt:"GUI Designer"}})]),e._v(" "),t("p",[e._v("Upload and start the model to work with the changes.")]),e._v(" "),t("h2",{attrs:{id:"camera-mouse-advanced"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#camera-mouse-advanced"}},[e._v("#")]),e._v(" Camera Mouse Advanced")]),e._v(" "),t("p",[e._v("If your first model works, try this more "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/Documentation/AsTeRICS_CameraMouseCreation_StepbyStep_Tutorial.pdf",target:"_blank",rel:"noopener noreferrer"}},[e._v("advanced step-by-step tutorial"),t("OutboundLink")],1),e._v(" based on slides.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{288:function(e,t,s){e.exports=s.p+"assets/img/quickstart11.c2ae8b7e.png"},412:function(e,t,s){e.exports=s.p+"assets/img/quickstart10.a588225d.png"},413:function(e,t,s){e.exports=s.p+"assets/img/quickstart12.c7981783.png"},414:function(e,t,s){e.exports=s.p+"assets/img/quickstart13.68c18f17.png"},415:function(e,t,s){e.exports=s.p+"assets/img/quickstart14.3781e998.png"},416:function(e,t,s){e.exports=s.p+"assets/img/quickstart15.2c0687da.png"},417:function(e,t,s){e.exports=s.p+"assets/img/quickstart16.4b39a603.png"},418:function(e,t,s){e.exports=s.p+"assets/img/quickstart17.a2ecc137.png"},419:function(e,t,s){e.exports=s.p+"assets/img/quickstart18.a949722d.png"},931:function(e,t,s){"use strict";s.r(t);var o=s(2),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"model-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-creation"}},[e._v("#")]),e._v(" Model Creation")]),e._v(" "),t("h2",{attrs:{id:"camera-mouse-simple"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#camera-mouse-simple"}},[e._v("#")]),e._v(" Camera Mouse Simple")]),e._v(" "),t("p",[e._v("A model is a collection of 1 to n components, where a component represents a plugin\nof the ARE. These components are connected via channels (for data connections) and\nevent channels (representing events). The following example will illustrate the\ncreation of a simple webcam mouse, using the position of the nose to control the\ncursor and opening the mouth to trigger a mouse click. This model requires a\nconnected and installed webcam.")]),e._v(" "),t("h3",{attrs:{id:"add-facetracking"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-facetracking"}},[e._v("#")]),e._v(" Add Facetracking")]),e._v(" "),t("p",[e._v("In a first step, start the ACS and the ARE using the ACS.exe and ARE.exe short cuts.\nIn the ACS window select the tab "),t("strong",[e._v("Components")]),e._v(", then "),t("strong",[e._v("Sensors")]),e._v(" and within the\nsensors the menu item "),t("strong",[e._v("Computer Vision")]),e._v(". There select the component\nFacetrackerLK. The component is now on the drawing area and, if the component is\nselected, properties can be set (or changed) in the rightmost part of the ACS window.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(412),alt:"ACS - A first example (1/8)"}})]),e._v(" "),t("h3",{attrs:{id:"add-mouse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-mouse"}},[e._v("#")]),e._v(" Add Mouse")]),e._v(" "),t("p",[e._v("The next needed component is the "),t("strong",[e._v("Mouse")]),e._v(", it can be found by selecting "),t("strong",[e._v("Actuators")]),e._v(" -\n"),t("strong",[e._v("Input Device Emulation")]),e._v(". After the insert, select the Mouse component and adapt\nthe properties. Deactivate absolutePosition and set the "),t("code",[e._v("xMax")]),e._v(" and "),t("code",[e._v("yMax")]),e._v(" to your\nscreen resolution.")]),e._v(" "),t("p",[e._v("In the next step, connect the noseX and the noseY outputs of the "),t("strong",[e._v("XFacetrackerLK")]),e._v("\nwith the mouseX and mouseY inputs of the Mouse. Finally, it should look like the\nscreenshot below.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(288),alt:"ACS - A first example (2/8)"}})]),e._v(" "),t("h3",{attrs:{id:"add-mouse-click"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-mouse-click"}},[e._v("#")]),e._v(" Add Mouse Click")]),e._v(" "),t("p",[e._v("The model now would be able to use the coordinates of the nose to control the\nmouse cursor, but the mouse click is still missing.\nFor the mouse clicking functionality, we first need the "),t("strong",[e._v("MathEvaluator")]),e._v(" ("),t("strong",[e._v("Processors")]),e._v(" -\n"),t("strong",[e._v("Basic Math")]),e._v(") plugin. We connect the noseY output of the "),t("strong",[e._v("XFacetrackerLK")]),e._v(" the with\nthe inA input of the "),t("strong",[e._v("MathEvaluator")]),e._v(" and likewise the chinY with inB. In the properties\nof the "),t("strong",[e._v("MathEvaluator")]),e._v(", we set the property expression to "),t("strong",[e._v("b-a")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:s(413),alt:"ACS - A first example (3/8)"}})]),e._v(" "),t("p",[e._v("We will "),t("strong",[e._v("Differentiate")]),e._v(" ("),t("strong",[e._v("Processors")]),e._v(" -> "),t("strong",[e._v("Basic Math")]),e._v(") the out value to react on a fast\nchange of the nose to chin distance.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(414),alt:"ACS - A first example (4/8)"}})]),e._v(" "),t("p",[e._v("This processed value will then be forwarded to a "),t("strong",[e._v("Threshold")]),e._v(" ("),t("strong",[e._v("Processors")]),e._v(" -> "),t("strong",[e._v("Basic\nMath")]),e._v(") component. Set the thresholdLow and thresholdHigh values to 30.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(415),alt:"ACS - A first example (5/8)"}})]),e._v(" "),t("p",[e._v("As a final step, connect the event trigger output of the "),t("strong",[e._v("Threshold")]),e._v(" with the event\nlistener input of the "),t("strong",[e._v("Mouse")]),e._v(" – the event triggers and listeners are at the bottom of the\ncomponents. After the connection has been made, set the leftClick to eventPosEdge\nin the property editor at the right. If everything was done right, it should look like the\nfollowing screenshot:")]),e._v(" "),t("p",[t("img",{attrs:{src:s(416),alt:"ACS - A first example (6/8)"}})]),e._v(" "),t("h3",{attrs:{id:"test-model"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#test-model"}},[e._v("#")]),e._v(" Test Model")]),e._v(" "),t("p",[e._v("Now, upload the model to the ARE and press the "),t("strong",[e._v("Start Model")]),e._v(" button. A window with\nthe camera screen will appear, marking with a green and yellow circle - the position\nof nose and chin. Press the "),t("strong",[e._v("Stop Model")]),e._v(" button or press F7 to stop the model and\nget the control of the mouse back. Below is a screenshot of the system, when\nrunning.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(417),alt:"ACS - A first example (7/8)"}})]),e._v(" "),t("p",[e._v("Congratulations, your first AsTeRICS model is running!")]),e._v(" "),t("h3",{attrs:{id:"reducing-tremor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reducing-tremor"}},[e._v("#")]),e._v(" Reducing Tremor")]),e._v(" "),t("p",[e._v("You might have noticed that the mouse pointer has a tremor, because the head is\nalways in movement to a certain extent. To reduce this tremor, an "),t("strong",[e._v("Averager")]),e._v("\n("),t("strong",[e._v("Processors")]),e._v(" -> "),t("strong",[e._v("Basic Math")]),e._v(") will be used to smoothen the X coordinates and\nanother "),t("strong",[e._v("Averager")]),e._v(" for the Y coordinates between the "),t("strong",[e._v("XFacetrackerLK")]),e._v(" and the\n"),t("strong",[e._v("Mouse")]),e._v(". The bufferSize in the properties will be set to 5.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(418),alt:"ACS - A first example (8/8)"}})]),e._v(" "),t("p",[e._v("That’s all, just upload the model and start it now.")]),e._v(" "),t("h3",{attrs:{id:"adjusting-the-webcam"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adjusting-the-webcam"}},[e._v("#")]),e._v(" Adjusting the Webcam")]),e._v(" "),t("p",[e._v("If you don’t like the position of the webcam after starting the model, you can set a\ndifferent start position. Select the "),t("strong",[e._v("GUI Designer")]),e._v(" tab above the drawing area and\nmove the webcam window to an area, which is comfortable to you. Also the size of\nthe window can be adjusted.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(419),alt:"GUI Designer"}})]),e._v(" "),t("p",[e._v("Upload and start the model to work with the changes.")]),e._v(" "),t("h2",{attrs:{id:"camera-mouse-advanced"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#camera-mouse-advanced"}},[e._v("#")]),e._v(" Camera Mouse Advanced")]),e._v(" "),t("p",[e._v("If your first model works, try this more "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/Documentation/AsTeRICS_CameraMouseCreation_StepbyStep_Tutorial.pdf",target:"_blank",rel:"noopener noreferrer"}},[e._v("advanced step-by-step tutorial"),t("OutboundLink")],1),e._v(" based on slides.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/140.88de24a8.js b/assets/js/140.705f006a.js similarity index 97% rename from assets/js/140.88de24a8.js rename to assets/js/140.705f006a.js index 73bb909de4..440c079139 100644 --- a/assets/js/140.88de24a8.js +++ b/assets/js/140.705f006a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[140],{1068:function(e,t,r){"use strict";r.r(t);var a=r(2),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"applicationlauncher"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#applicationlauncher"}},[e._v("#")]),e._v(" ApplicationLauncher")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("The ApplicationLauncher component can be used to run an external executable application or to open a URL in the platform default browser. The command and arguments values can either be set as property or dynamically configured through the respective input ports. The launch of the application or the opening of the URL can also be triggered by an incoming event (launchNow). The property executeOnPlatform selects the platforms on which the configured application or URL will be launched.")]),e._v(" "),t("p",[e._v("Together with the Keyboard- or RemoteKeyboard components, the ApplicationLauncher plugin can perform complex automation tasks, for example open Skype, choose a contact and make a call.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(613),alt:"Screenshot: ApplicationLauncher plugin",title:"Screenshot: ApplicationLauncher plugin"}})]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename [string]:")]),e._v(" File name of executable file which shall be started without arguments. The application is started automatically, if onlyByEvent is false. See "),t("em",[e._v("Properties -> defaultApplication")]),e._v(" description for details.")]),e._v(" "),t("li",[t("strong",[e._v("arguments [string]:")]),e._v(" Sets the arguments of the command. The application is started automatically, if onlyByEvent is false. See "),t("em",[e._v("Properties -> arguments")]),e._v(" description for details.")]),e._v(" "),t("li",[t("strong",[e._v("stdIn [string]:")]),e._v(" Sends the incoming string to the standard input stream of the started process.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("stdOut [string]:")]),e._v(" The standard output stream of the started process.")]),e._v(" "),t("li",[t("strong",[e._v("stdErr [string]:")]),e._v(" The standard error stream of the started process.")]),e._v(" "),t("li",[t("strong",[e._v("exitValue [integer]:")]),e._v(" The exit value of the started process.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("launchNow:")]),e._v(" An incoming event on this port will start the (default or lastest received) application")]),e._v(" "),t("li",[t("strong",[e._v("closeNow:")]),e._v(" An incoming event on this port will close the current application")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("startedSuccessfully:")]),e._v(" The process started successfully.")]),e._v(" "),t("li",[t("strong",[e._v("startedWithError:")]),e._v(" The process started with error.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("executeOnPlatform [combobox (ALL, WINDOWS, LINUX, MACOSX)]:")]),e._v(" If != ALL, the application will only be launched if the ARE runs on the defined platform.")]),e._v(" "),t("li",[t("strong",[e._v("executionMode [combobox (START_APPLICATION, OPEN_URL)]:")]),e._v(" If START_APPLICATION, the command defined in defaultApplication will be launched with the given arguments. If OPEN_URL, the URL defined in arguments will be launched with the platform default browser. The platform-specific browser launch commands are configurable in the file areProperties. For general information about platform-specific launch commands, see "),t("a",{attrs:{href:"https://dwheeler.com/essays/open-files-urls.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("open files and URLs"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("strong",[e._v("defaultApplication [string]:")]),e._v(" Full path and filename of the default application"),t("br"),e._v("\nThe full path can be provided with quotes, but quotes are not mandatory. So "),t("em",[e._v("C:\\Program Files\\internet explorer\\iexplore.exe")]),e._v(" and "),t("em",[e._v("“C:\\Program Files\\internet explorer\\iexplore.exe”")]),e._v(" are equal and both working.")]),e._v(" "),t("li",[t("strong",[e._v("arguments [string]:")]),e._v(" the commandline arguments for the application (in mode START_APPLICATION) or the URL to open (in mode OPEN_URL)."),t("br"),e._v("\nFor Mode START_APPLICATION: Given arguments are split considering whitespaces and quotes. So e.g. the arguments property "),t("em",[e._v("xterm -e “sudo sh test.sh”")]),e._v(" will be split in 3 components "),t("em",[e._v("xterm")]),e._v(", "),t("em",[e._v("-e")]),e._v(" and "),t("em",[e._v("“sudo sh test.sh”")]),e._v(". However quotes are removed at runtime, so "),t("em",[e._v("sudo sh test.sh")]),e._v(" without quotes will be passed to the ProcessBuilder used at Java level to start the program."),t("br"),e._v("\nHint for Windows: for cmd.exe “&” is a special character and cannot be used in an argument. If the “&” is needed, mask it with an “^”, therefore using “^&” instead of “&” in the argument."),t("br"),e._v("\nFor Mode OPEN_URL: URLs can be passed as-is on any platform, no masking of “&” characters is needed.")]),e._v(" "),t("li",[t("strong",[e._v("workingDirectory [string]:")]),e._v(" the working directory for the application (. is used for home directory of the application)")]),e._v(" "),t("li",[e._v("**closeCmd [string]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Optional close cmd, e.g. if started cmd has forked processes (e.g. OSKA) use: taskkill.exe /IM “OSKA Keyboard.exe” /T")]),e._v(" "),t("li",[t("strong",[e._v("autoLaunch [boolean]:")]),e._v(" Defines if the default application is automatically launched at startup")]),e._v(" "),t("li",[t("strong",[e._v("autoClose [boolean]:")]),e._v(" Defines if the current application is closed when the model is stopped")]),e._v(" "),t("li",[t("strong",[e._v("onlyByEvent [boolean]:")]),e._v(" If this property is set to true, incoming application files names will not be started immediately (only the launchNow event will start the application)")])])])}),[],!1,null,null,null);t.default=o.exports},613:function(e,t,r){e.exports=r.p+"assets/img/applicationlauncher.9f17bcc1.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[140],{1070:function(e,t,r){"use strict";r.r(t);var a=r(2),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"applicationlauncher"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#applicationlauncher"}},[e._v("#")]),e._v(" ApplicationLauncher")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("The ApplicationLauncher component can be used to run an external executable application or to open a URL in the platform default browser. The command and arguments values can either be set as property or dynamically configured through the respective input ports. The launch of the application or the opening of the URL can also be triggered by an incoming event (launchNow). The property executeOnPlatform selects the platforms on which the configured application or URL will be launched.")]),e._v(" "),t("p",[e._v("Together with the Keyboard- or RemoteKeyboard components, the ApplicationLauncher plugin can perform complex automation tasks, for example open Skype, choose a contact and make a call.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(615),alt:"Screenshot: ApplicationLauncher plugin",title:"Screenshot: ApplicationLauncher plugin"}})]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename [string]:")]),e._v(" File name of executable file which shall be started without arguments. The application is started automatically, if onlyByEvent is false. See "),t("em",[e._v("Properties -> defaultApplication")]),e._v(" description for details.")]),e._v(" "),t("li",[t("strong",[e._v("arguments [string]:")]),e._v(" Sets the arguments of the command. The application is started automatically, if onlyByEvent is false. See "),t("em",[e._v("Properties -> arguments")]),e._v(" description for details.")]),e._v(" "),t("li",[t("strong",[e._v("stdIn [string]:")]),e._v(" Sends the incoming string to the standard input stream of the started process.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("stdOut [string]:")]),e._v(" The standard output stream of the started process.")]),e._v(" "),t("li",[t("strong",[e._v("stdErr [string]:")]),e._v(" The standard error stream of the started process.")]),e._v(" "),t("li",[t("strong",[e._v("exitValue [integer]:")]),e._v(" The exit value of the started process.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("launchNow:")]),e._v(" An incoming event on this port will start the (default or lastest received) application")]),e._v(" "),t("li",[t("strong",[e._v("closeNow:")]),e._v(" An incoming event on this port will close the current application")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("startedSuccessfully:")]),e._v(" The process started successfully.")]),e._v(" "),t("li",[t("strong",[e._v("startedWithError:")]),e._v(" The process started with error.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("executeOnPlatform [combobox (ALL, WINDOWS, LINUX, MACOSX)]:")]),e._v(" If != ALL, the application will only be launched if the ARE runs on the defined platform.")]),e._v(" "),t("li",[t("strong",[e._v("executionMode [combobox (START_APPLICATION, OPEN_URL)]:")]),e._v(" If START_APPLICATION, the command defined in defaultApplication will be launched with the given arguments. If OPEN_URL, the URL defined in arguments will be launched with the platform default browser. The platform-specific browser launch commands are configurable in the file areProperties. For general information about platform-specific launch commands, see "),t("a",{attrs:{href:"https://dwheeler.com/essays/open-files-urls.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("open files and URLs"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("strong",[e._v("defaultApplication [string]:")]),e._v(" Full path and filename of the default application"),t("br"),e._v("\nThe full path can be provided with quotes, but quotes are not mandatory. So "),t("em",[e._v("C:\\Program Files\\internet explorer\\iexplore.exe")]),e._v(" and "),t("em",[e._v("“C:\\Program Files\\internet explorer\\iexplore.exe”")]),e._v(" are equal and both working.")]),e._v(" "),t("li",[t("strong",[e._v("arguments [string]:")]),e._v(" the commandline arguments for the application (in mode START_APPLICATION) or the URL to open (in mode OPEN_URL)."),t("br"),e._v("\nFor Mode START_APPLICATION: Given arguments are split considering whitespaces and quotes. So e.g. the arguments property "),t("em",[e._v("xterm -e “sudo sh test.sh”")]),e._v(" will be split in 3 components "),t("em",[e._v("xterm")]),e._v(", "),t("em",[e._v("-e")]),e._v(" and "),t("em",[e._v("“sudo sh test.sh”")]),e._v(". However quotes are removed at runtime, so "),t("em",[e._v("sudo sh test.sh")]),e._v(" without quotes will be passed to the ProcessBuilder used at Java level to start the program."),t("br"),e._v("\nHint for Windows: for cmd.exe “&” is a special character and cannot be used in an argument. If the “&” is needed, mask it with an “^”, therefore using “^&” instead of “&” in the argument."),t("br"),e._v("\nFor Mode OPEN_URL: URLs can be passed as-is on any platform, no masking of “&” characters is needed.")]),e._v(" "),t("li",[t("strong",[e._v("workingDirectory [string]:")]),e._v(" the working directory for the application (. is used for home directory of the application)")]),e._v(" "),t("li",[e._v("**closeCmd [string]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Optional close cmd, e.g. if started cmd has forked processes (e.g. OSKA) use: taskkill.exe /IM “OSKA Keyboard.exe” /T")]),e._v(" "),t("li",[t("strong",[e._v("autoLaunch [boolean]:")]),e._v(" Defines if the default application is automatically launched at startup")]),e._v(" "),t("li",[t("strong",[e._v("autoClose [boolean]:")]),e._v(" Defines if the current application is closed when the model is stopped")]),e._v(" "),t("li",[t("strong",[e._v("onlyByEvent [boolean]:")]),e._v(" If this property is set to true, incoming application files names will not be started immediately (only the launchNow event will start the application)")])])])}),[],!1,null,null,null);t.default=o.exports},615:function(e,t,r){e.exports=r.p+"assets/img/applicationlauncher.9f17bcc1.jpg"}}]); \ No newline at end of file diff --git a/assets/js/141.1270d493.js b/assets/js/141.0cd32b21.js similarity index 95% rename from assets/js/141.1270d493.js rename to assets/js/141.0cd32b21.js index 2793168c8d..03c90878ab 100644 --- a/assets/js/141.1270d493.js +++ b/assets/js/141.0cd32b21.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[141],{1070:function(e,a,t){"use strict";t.r(a);var r=t(2),i=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"bardisplay"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bardisplay"}},[e._v("#")]),e._v(" BarDisplay")]),e._v(" "),a("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),a("p",[e._v("The Bar display generates a coloured bar graph to visualise a current signal value in the ARE environment (of course the LC - display or a computer monitor have to be connected to the platform). The Bar display features auto-scale of value range, display of a threshold value and selectable update rate and foreground / background colours.")]),e._v(" "),a("p",[a("img",{attrs:{src:t(615),alt:"Screenshot: BarDisplay plugin",title:"Screenshot: BarDisplay plugin"}})]),e._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),a("p",[e._v("Computer Monitor or LC-Display available for graphics output.")]),e._v(" "),a("h2",{attrs:{id:"input-port-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("input [double]:")]),e._v(" The input port for the signal to be displayed.")])]),e._v(" "),a("h2",{attrs:{id:"properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("displayBuffer [integer]:")]),e._v(" This number specifies how often an update of the bar graph is performed. For example if the display buffer is set to 10, ten values are accumulated and the average value is displayed after the tenth incoming value.")]),e._v(" "),a("li",[a("strong",[e._v("min [double]:")]),e._v(" The default minimum of the signal range at model start (this value is automatically updated as lower values come in).")]),e._v(" "),a("li",[a("strong",[e._v("max [double]:")]),e._v(" The default maximum of the signal range at model start (this value is automatically updated as higher values come in).")]),e._v(" "),a("li",[a("strong",[e._v("threshold [double]:")]),e._v(" This value will be displayed with a marker in the bar graph (if enabled).")]),e._v(" "),a("li",[a("strong",[e._v("displayThreshold [boolean]:")]),e._v(" This property enables (true) or disables (false) the threshold marker in the bar graph.")]),e._v(" "),a("li",[a("strong",[e._v("integerDisplay [boolean]:")]),e._v(" This property selects if double values are rounded to integral values before being displayed in the bar graph.")]),e._v(" "),a("li",[a("strong",[e._v("mode [integer]:")]),e._v(" Via this property the way how values which exceed the current min/max range of the bar graph component are handled: “clip to min and max” crops incoming values to the min/max range, “autoupdate min and max” scales the bar graph window and updates the min/max values to cover the incoming value.")]),e._v(" "),a("li",[a("strong",[e._v("gridColor [integer]:")]),e._v(" The colour of the bar graph grid and descriptions.")]),e._v(" "),a("li",[a("strong",[e._v("barColor [integer]:")]),e._v(" The colour of the bar display.")]),e._v(" "),a("li",[a("strong",[e._v("backgroundColour [integer]:")]),e._v(" The colour of the window background.")]),e._v(" "),a("li",[a("strong",[e._v("fontSize [integer]:")]),e._v(" The font size of the display’s caption.")]),e._v(" "),a("li",[a("strong",[e._v("caption [string]:")]),e._v(" The text of the display’s caption.")]),e._v(" "),a("li",[a("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);a.default=i.exports},615:function(e,a,t){e.exports=t.p+"assets/img/bardisplay.824890df.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[141],{1072:function(e,a,t){"use strict";t.r(a);var r=t(2),i=Object(r.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"bardisplay"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bardisplay"}},[e._v("#")]),e._v(" BarDisplay")]),e._v(" "),a("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),a("p",[e._v("The Bar display generates a coloured bar graph to visualise a current signal value in the ARE environment (of course the LC - display or a computer monitor have to be connected to the platform). The Bar display features auto-scale of value range, display of a threshold value and selectable update rate and foreground / background colours.")]),e._v(" "),a("p",[a("img",{attrs:{src:t(617),alt:"Screenshot: BarDisplay plugin",title:"Screenshot: BarDisplay plugin"}})]),e._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),a("p",[e._v("Computer Monitor or LC-Display available for graphics output.")]),e._v(" "),a("h2",{attrs:{id:"input-port-description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("input [double]:")]),e._v(" The input port for the signal to be displayed.")])]),e._v(" "),a("h2",{attrs:{id:"properties"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("displayBuffer [integer]:")]),e._v(" This number specifies how often an update of the bar graph is performed. For example if the display buffer is set to 10, ten values are accumulated and the average value is displayed after the tenth incoming value.")]),e._v(" "),a("li",[a("strong",[e._v("min [double]:")]),e._v(" The default minimum of the signal range at model start (this value is automatically updated as lower values come in).")]),e._v(" "),a("li",[a("strong",[e._v("max [double]:")]),e._v(" The default maximum of the signal range at model start (this value is automatically updated as higher values come in).")]),e._v(" "),a("li",[a("strong",[e._v("threshold [double]:")]),e._v(" This value will be displayed with a marker in the bar graph (if enabled).")]),e._v(" "),a("li",[a("strong",[e._v("displayThreshold [boolean]:")]),e._v(" This property enables (true) or disables (false) the threshold marker in the bar graph.")]),e._v(" "),a("li",[a("strong",[e._v("integerDisplay [boolean]:")]),e._v(" This property selects if double values are rounded to integral values before being displayed in the bar graph.")]),e._v(" "),a("li",[a("strong",[e._v("mode [integer]:")]),e._v(" Via this property the way how values which exceed the current min/max range of the bar graph component are handled: “clip to min and max” crops incoming values to the min/max range, “autoupdate min and max” scales the bar graph window and updates the min/max values to cover the incoming value.")]),e._v(" "),a("li",[a("strong",[e._v("gridColor [integer]:")]),e._v(" The colour of the bar graph grid and descriptions.")]),e._v(" "),a("li",[a("strong",[e._v("barColor [integer]:")]),e._v(" The colour of the bar display.")]),e._v(" "),a("li",[a("strong",[e._v("backgroundColour [integer]:")]),e._v(" The colour of the window background.")]),e._v(" "),a("li",[a("strong",[e._v("fontSize [integer]:")]),e._v(" The font size of the display’s caption.")]),e._v(" "),a("li",[a("strong",[e._v("caption [string]:")]),e._v(" The text of the display’s caption.")]),e._v(" "),a("li",[a("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);a.default=i.exports},617:function(e,a,t){e.exports=t.p+"assets/img/bardisplay.824890df.jpg"}}]); \ No newline at end of file diff --git a/assets/js/142.adebdb9d.js b/assets/js/142.ec23fa9a.js similarity index 95% rename from assets/js/142.adebdb9d.js rename to assets/js/142.ec23fa9a.js index 2bcb841863..7d2dfc538a 100644 --- a/assets/js/142.adebdb9d.js +++ b/assets/js/142.ec23fa9a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[142],{1072:function(t,e,o){"use strict";o.r(e);var s=o(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"digitalout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#digitalout"}},[t._v("#")]),t._v(" DigitalOut")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Generic Control Output)")]),t._v(" "),e("p",[t._v("The DigitalOut plugin operates the output ports of the GPIO CIM. The output ports 1-2 are relais outputs where loads can be connected via a galvanic isolation barrier. The output ports 3-5 are open-collector outputs, where a pull-up resistor can be activated or deactivated using the plugin’s properties. The plugin provides event listener ports which serve the activation or deactivation of an output channel, and a command port which accepts string parameters to set, clear and toggle particular output channels.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(618),alt:"Screenshot: DigitalOut plugin",title:"Screenshot: DigitalOut plugin"}})]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the GPIO CIM (CIM Id: 0x0801) to be connected to an USB port.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("action [string]:")]),t._v(" The plugin reacts to incoming action strings starting with “@GPIO:” and a command. Valid commands are “set”, “clear”, “toggle” and “press”. The command has to be followed by a comma and the port number, for example: “@GPIO:set,1” or “@GPIO:toggle,2”. The “press”-command toggles the given output port two times with a delay of 500 milliseconds. The following examples illustrate the available action strings:\n"),e("ul",[e("li",[e("em",[t._v("“@DIGITALOUT:set,1”:")]),t._v(" Pin 1 of the GPIO CIM will be set")]),t._v(" "),e("li",[t._v('_"@DIGITALOUT:clear,2":_Pin 2 of the GPIO CIM will be cleared')]),t._v(" "),e("li",[e("em",[t._v("“@DIGITALOUT:toggle,1”:")]),t._v(" Pin 1 of the GPIO CIM will be changed")]),t._v(" "),e("li",[e("em",[t._v("“@DIGITALOUT:press,4”:")]),t._v(" Pin 4 of the GPIO CIM will be cleared and after 500ms it will be set again")])])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setOutput1 to setOutput5:")]),t._v(" an incoming event on these ports will cause the corresponding output port on the CIM to go to the high level.")]),t._v(" "),e("li",[e("strong",[t._v("clearOutput1 to clearOutput5:")]),t._v(" an incoming event on these ports will cause the corresponding output port on the CIM to go to the low level.")]),t._v(" "),e("li",[t._v("**toggleOutput1 to toggleOutput5:**Toggles the state of the output port.")]),t._v(" "),e("li",[t._v("**pressOutput1 to pressOutput5:**Presses the output port: Clears the state and after 500ms sets the state to high.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("pullupStateOut3 to pullupStateOut5 [boolean]:")]),t._v(" These properties specify if the internal pullup resistor shall be activated on the respective open collector output channels.")]),t._v(" "),e("li",[e("strong",[t._v("uniqueId:")]),t._v(" unique number of the CIM - if more than one CIMs of the same type are used. The module flashes a LED for identification when the ID is selected. "),e("strong",[t._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);e.default=r.exports},618:function(t,e,o){t.exports=o.p+"assets/img/digitalout.1a89ad2e.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[142],{1074:function(t,e,o){"use strict";o.r(e);var s=o(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"digitalout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#digitalout"}},[t._v("#")]),t._v(" DigitalOut")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Generic Control Output)")]),t._v(" "),e("p",[t._v("The DigitalOut plugin operates the output ports of the GPIO CIM. The output ports 1-2 are relais outputs where loads can be connected via a galvanic isolation barrier. The output ports 3-5 are open-collector outputs, where a pull-up resistor can be activated or deactivated using the plugin’s properties. The plugin provides event listener ports which serve the activation or deactivation of an output channel, and a command port which accepts string parameters to set, clear and toggle particular output channels.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(620),alt:"Screenshot: DigitalOut plugin",title:"Screenshot: DigitalOut plugin"}})]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the GPIO CIM (CIM Id: 0x0801) to be connected to an USB port.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("action [string]:")]),t._v(" The plugin reacts to incoming action strings starting with “@GPIO:” and a command. Valid commands are “set”, “clear”, “toggle” and “press”. The command has to be followed by a comma and the port number, for example: “@GPIO:set,1” or “@GPIO:toggle,2”. The “press”-command toggles the given output port two times with a delay of 500 milliseconds. The following examples illustrate the available action strings:\n"),e("ul",[e("li",[e("em",[t._v("“@DIGITALOUT:set,1”:")]),t._v(" Pin 1 of the GPIO CIM will be set")]),t._v(" "),e("li",[t._v('_"@DIGITALOUT:clear,2":_Pin 2 of the GPIO CIM will be cleared')]),t._v(" "),e("li",[e("em",[t._v("“@DIGITALOUT:toggle,1”:")]),t._v(" Pin 1 of the GPIO CIM will be changed")]),t._v(" "),e("li",[e("em",[t._v("“@DIGITALOUT:press,4”:")]),t._v(" Pin 4 of the GPIO CIM will be cleared and after 500ms it will be set again")])])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setOutput1 to setOutput5:")]),t._v(" an incoming event on these ports will cause the corresponding output port on the CIM to go to the high level.")]),t._v(" "),e("li",[e("strong",[t._v("clearOutput1 to clearOutput5:")]),t._v(" an incoming event on these ports will cause the corresponding output port on the CIM to go to the low level.")]),t._v(" "),e("li",[t._v("**toggleOutput1 to toggleOutput5:**Toggles the state of the output port.")]),t._v(" "),e("li",[t._v("**pressOutput1 to pressOutput5:**Presses the output port: Clears the state and after 500ms sets the state to high.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("pullupStateOut3 to pullupStateOut5 [boolean]:")]),t._v(" These properties specify if the internal pullup resistor shall be activated on the respective open collector output channels.")]),t._v(" "),e("li",[e("strong",[t._v("uniqueId:")]),t._v(" unique number of the CIM - if more than one CIMs of the same type are used. The module flashes a LED for identification when the ID is selected. "),e("strong",[t._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);e.default=r.exports},620:function(t,e,o){t.exports=o.p+"assets/img/digitalout.1a89ad2e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/143.04aeb5ee.js b/assets/js/143.1abe170c.js similarity index 91% rename from assets/js/143.04aeb5ee.js rename to assets/js/143.1abe170c.js index 36549d7432..1144cbb2d4 100644 --- a/assets/js/143.04aeb5ee.js +++ b/assets/js/143.1abe170c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[143],{1076:function(t,e,o){"use strict";o.r(e);var n=o(2),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"enobiodisplay"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enobiodisplay"}},[t._v("#")]),t._v(" EnobioDisplay")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("This component displays the electrophysiological signals recorded by the Enobio device, so a user can check that the signals are being received and are correctly calibrated. The 4 Enobio channels are plotted with three different colours. When the signal is plotted in red it means that the channel is not being calibrated due to the configuration of the Enobio component. If the signal is plotted in yellow then this signal is in process of calibration. If the signals are plotted in green it indicates that the signal is correctly calibrated.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(623),alt:"Screenshot: Enobio Display plugin",title:"Screenshot: Enobio Display plugin"}})]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This software component requires an Enobio receiver connected to the platform, the Enobio device switched on and the electrodes correctly placed on the user. In addition, the component expects an Enobio component connected to its inputs.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Channel1 to Channel4 [double]:")]),t._v(" Input ports for the corresponding output ports of the Enobio component.")]),t._v(" "),e("li",[e("strong",[t._v("Status [double]:")]),t._v(" Input port to be connected to the status output port of the Enobio component.")])])])}),[],!1,null,null,null);e.default=i.exports},623:function(t,e,o){t.exports=o.p+"assets/img/enobiodisplay.e7e383b2.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[143],{1079:function(t,e,o){"use strict";o.r(e);var n=o(2),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"enobiodisplay"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enobiodisplay"}},[t._v("#")]),t._v(" EnobioDisplay")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("This component displays the electrophysiological signals recorded by the Enobio device, so a user can check that the signals are being received and are correctly calibrated. The 4 Enobio channels are plotted with three different colours. When the signal is plotted in red it means that the channel is not being calibrated due to the configuration of the Enobio component. If the signal is plotted in yellow then this signal is in process of calibration. If the signals are plotted in green it indicates that the signal is correctly calibrated.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(626),alt:"Screenshot: Enobio Display plugin",title:"Screenshot: Enobio Display plugin"}})]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This software component requires an Enobio receiver connected to the platform, the Enobio device switched on and the electrodes correctly placed on the user. In addition, the component expects an Enobio component connected to its inputs.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Channel1 to Channel4 [double]:")]),t._v(" Input ports for the corresponding output ports of the Enobio component.")]),t._v(" "),e("li",[e("strong",[t._v("Status [double]:")]),t._v(" Input port to be connected to the status output port of the Enobio component.")])])])}),[],!1,null,null,null);e.default=i.exports},626:function(t,e,o){t.exports=o.p+"assets/img/enobiodisplay.e7e383b2.jpg"}}]); \ No newline at end of file diff --git a/assets/js/144.da97f755.js b/assets/js/144.3e93f388.js similarity index 97% rename from assets/js/144.da97f755.js rename to assets/js/144.3e93f388.js index 366c93aa7d..3435e04682 100644 --- a/assets/js/144.da97f755.js +++ b/assets/js/144.3e93f388.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[144],{1077:function(e,t,n){"use strict";n.r(t);var a=n(2),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"enocean"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enocean"}},[e._v("#")]),e._v(" EnOcean")]),e._v(" "),t("p",[e._v("Component Type: actuator (Subcategory: Home Control)")]),e._v(" "),t("p",[e._v("The EnOcean plugin enables the ARE to interface to EnOcean wireless sensors. This plugin utilizes the Priscilla java library for the EnOcean implementation, it is ©opyrighted by UAS FH Technikum Wien and released under the GNU General Public License (FSF v2). The EnOcean plugin provides an interface to the EnOcean sensors over an USB stick (EnOcean USB300) or an IP gateway. Interfacing to EnOcean devices is possible either by sending different data to actuators or receiving different types of values. This allows control of lightning, heat and ventilation devices and many more via the AsTeRICS platform.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(624),alt:"Screenshot: EnOcean plugin",title:"Screenshot: EnOcean plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("An EnOcean gateway (either USB or IP)")]),e._v(" "),t("li",[e._v("Basic knowledge on EnOcean device IDs")])]),e._v(" "),t("h2",{attrs:{id:"functional-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-description"}},[e._v("#")]),e._v(" Functional Description")]),e._v(" "),t("p",[e._v("By starting the model, the EnOcean plugin establishes a connection to the EnOcean gateway specified by the plugin properties (defined by gatewayIP and USB checkbox). The gatewayIP is either the IP adress of the gateway or the COM port name (e.g. COM1 or /dev/ttyUSB0). There are 3 different ways of sending data to EnOcean devices. The first one is done by the 6 input slider ports. Each of them has properties for the source device ID (range: 0-127) and a data type (binary, temperature, illumination, humidity, temperature set point and fan level). On every update of the input data, an EnOcean data frame is generated and sent. The second method is done over the event input ports. There are 3 properties to define. The device ID and the data type have equal possible values as with the slider input. The third property defines the value to be sent. The first method is the most flexible one, by sending a command string to the command input port. It expects a special formatted string and parses the dedicated keywords and format to an EnOcean command. The string can be assembled individually with other string formatting plugins. Receiving sensor data is done by combining event and output ports. There are 2 properties, one for the type of input data (the data type are the same as stated before) and one for the source device ID (this property is a hexadecimal string, containing the full 32bit ID, printed on the sensor). The event ports are triggered each time, an event with the defined type and device ID is received. If an event is raised, at the same time the corresponding data value is available at the output ports.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("command [string]:")]),e._v(' This port receives string commands for the EnOcean devices. The commands have to be in the format “@ENOCEAN:device_id#type#value”. An example for a valid command is"@ENOCEAN:25#binary#true". As a valid command is received by the input port, the value and data type is broadcasted to the devices with the given device ID offset (range: 0-127)')]),e._v(" "),t("li",[t("strong",[e._v("slider[1-6] [double]:")]),e._v(" Input port for a double value which is converted to an integer (or another type, depends on the datatype) and broadcasted to all EnOcean devices in range")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output[1-6]:")]),e._v(" The output value, from device with IDTrigger[1-6]")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("localIP [string]:")]),e._v(" The local IP address of the interface which can reach the IP gateway.")]),e._v(" "),t("li",[t("strong",[e._v("gatewayIP [string]:")]),e._v(" The destination IP address of the EnOcean gateway or the device name of the USB gateway (emulates a serial interface, e.g. COM1 or /dev/ttyUSB0)")]),e._v(" "),t("li",[t("strong",[e._v("USB [boolean]:")]),e._v(" If checked, then the connection will be established through a serial interface, otherwise through an IP gateway")]),e._v(" "),t("li",[t("strong",[e._v("id[1-6] [integer]:")]),e._v(" Source ID for input event[n]. The range is from 0 to 127.")]),e._v(" "),t("li",[t("strong",[e._v("sendType[1-6] [string]:")]),e._v(" Send type for input event[n]. Following data types are allowed global (for every datatype property, port and event):\n"),t("ul",[t("li",[t("em",[e._v("“binary”:")]),e._v(" e.g. used for switching light actuators on or off.")]),e._v(" "),t("li",[t("em",[e._v("“temperature”:")]),e._v(" e.g. used to transmit a temperature value.")]),e._v(" "),t("li",[t("em",[e._v("“illumination”:")]),e._v(" e.g. used to transmit illumination values.")]),e._v(" "),t("li",[t("em",[e._v("“humidity”:")]),e._v(" e.g. used to transmit humidity values.")]),e._v(" "),t("li",[t("em",[e._v("“setpoint”:")]),e._v(" e.g. used to send set point value (+10K or -5% humidity)")]),e._v(" "),t("li",[t("em",[e._v("“fan”:")]),e._v(" e.g. used to set or simulate a defined fan level")])])]),e._v(" "),t("li",[t("strong",[e._v("dataValue[1-6] [string]:")]),e._v(" The transmitted value for the input event [n] with the given id[n] and type (sendType[n])")]),e._v(" "),t("li",[t("strong",[e._v("IDSlider[1-6] [string]:")]),e._v(" Source ID for slider[n]. The range is from 0 to 127.")]),e._v(" "),t("li",[t("strong",[e._v("sendTypeSlider[1-6] [string]:")]),e._v(" The data type for sending slider[n] data with IDSLider[n]. The possible data types are stated above")]),e._v(" "),t("li",[t("strong",[e._v("IDTrigger[1-6] [string]:")]),e._v(" Source ID for event trigger[n]. This is a full id, as printed on the device as 6 character string(e.g. FFEFA01C)")]),e._v(" "),t("li",[t("strong",[e._v("TypeTrigger[1-6] [string]:")]),e._v(" The data type for the listening event[n]. If an incoming frame from the give ID (IDTrigger[n]) contains this data type, an event on event port [n] is raised. The possible data types are stated above")])]),e._v(" "),t("h2",{attrs:{id:"event-listener"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener"}},[e._v("#")]),e._v(" Event Listener")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("send[1-6]:")]),e._v(" Each time a event is triggered, the coresponding EnOcean frame which is specified in the plugin properties, is transmitted.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger"}},[e._v("#")]),e._v(" Event Trigger")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event_out_[1-6]:")]),e._v(" Each time a frame is received with the given parameters (from properties IDTrigger[n] and TypeTrigger[n]), this event is raised")])])])}),[],!1,null,null,null);t.default=i.exports},624:function(e,t,n){e.exports=n.p+"assets/img/enocean.b119bfe0.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[144],{1080:function(e,t,n){"use strict";n.r(t);var a=n(2),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"enocean"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enocean"}},[e._v("#")]),e._v(" EnOcean")]),e._v(" "),t("p",[e._v("Component Type: actuator (Subcategory: Home Control)")]),e._v(" "),t("p",[e._v("The EnOcean plugin enables the ARE to interface to EnOcean wireless sensors. This plugin utilizes the Priscilla java library for the EnOcean implementation, it is ©opyrighted by UAS FH Technikum Wien and released under the GNU General Public License (FSF v2). The EnOcean plugin provides an interface to the EnOcean sensors over an USB stick (EnOcean USB300) or an IP gateway. Interfacing to EnOcean devices is possible either by sending different data to actuators or receiving different types of values. This allows control of lightning, heat and ventilation devices and many more via the AsTeRICS platform.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(627),alt:"Screenshot: EnOcean plugin",title:"Screenshot: EnOcean plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("An EnOcean gateway (either USB or IP)")]),e._v(" "),t("li",[e._v("Basic knowledge on EnOcean device IDs")])]),e._v(" "),t("h2",{attrs:{id:"functional-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-description"}},[e._v("#")]),e._v(" Functional Description")]),e._v(" "),t("p",[e._v("By starting the model, the EnOcean plugin establishes a connection to the EnOcean gateway specified by the plugin properties (defined by gatewayIP and USB checkbox). The gatewayIP is either the IP adress of the gateway or the COM port name (e.g. COM1 or /dev/ttyUSB0). There are 3 different ways of sending data to EnOcean devices. The first one is done by the 6 input slider ports. Each of them has properties for the source device ID (range: 0-127) and a data type (binary, temperature, illumination, humidity, temperature set point and fan level). On every update of the input data, an EnOcean data frame is generated and sent. The second method is done over the event input ports. There are 3 properties to define. The device ID and the data type have equal possible values as with the slider input. The third property defines the value to be sent. The first method is the most flexible one, by sending a command string to the command input port. It expects a special formatted string and parses the dedicated keywords and format to an EnOcean command. The string can be assembled individually with other string formatting plugins. Receiving sensor data is done by combining event and output ports. There are 2 properties, one for the type of input data (the data type are the same as stated before) and one for the source device ID (this property is a hexadecimal string, containing the full 32bit ID, printed on the sensor). The event ports are triggered each time, an event with the defined type and device ID is received. If an event is raised, at the same time the corresponding data value is available at the output ports.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("command [string]:")]),e._v(' This port receives string commands for the EnOcean devices. The commands have to be in the format “@ENOCEAN:device_id#type#value”. An example for a valid command is"@ENOCEAN:25#binary#true". As a valid command is received by the input port, the value and data type is broadcasted to the devices with the given device ID offset (range: 0-127)')]),e._v(" "),t("li",[t("strong",[e._v("slider[1-6] [double]:")]),e._v(" Input port for a double value which is converted to an integer (or another type, depends on the datatype) and broadcasted to all EnOcean devices in range")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output[1-6]:")]),e._v(" The output value, from device with IDTrigger[1-6]")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("localIP [string]:")]),e._v(" The local IP address of the interface which can reach the IP gateway.")]),e._v(" "),t("li",[t("strong",[e._v("gatewayIP [string]:")]),e._v(" The destination IP address of the EnOcean gateway or the device name of the USB gateway (emulates a serial interface, e.g. COM1 or /dev/ttyUSB0)")]),e._v(" "),t("li",[t("strong",[e._v("USB [boolean]:")]),e._v(" If checked, then the connection will be established through a serial interface, otherwise through an IP gateway")]),e._v(" "),t("li",[t("strong",[e._v("id[1-6] [integer]:")]),e._v(" Source ID for input event[n]. The range is from 0 to 127.")]),e._v(" "),t("li",[t("strong",[e._v("sendType[1-6] [string]:")]),e._v(" Send type for input event[n]. Following data types are allowed global (for every datatype property, port and event):\n"),t("ul",[t("li",[t("em",[e._v("“binary”:")]),e._v(" e.g. used for switching light actuators on or off.")]),e._v(" "),t("li",[t("em",[e._v("“temperature”:")]),e._v(" e.g. used to transmit a temperature value.")]),e._v(" "),t("li",[t("em",[e._v("“illumination”:")]),e._v(" e.g. used to transmit illumination values.")]),e._v(" "),t("li",[t("em",[e._v("“humidity”:")]),e._v(" e.g. used to transmit humidity values.")]),e._v(" "),t("li",[t("em",[e._v("“setpoint”:")]),e._v(" e.g. used to send set point value (+10K or -5% humidity)")]),e._v(" "),t("li",[t("em",[e._v("“fan”:")]),e._v(" e.g. used to set or simulate a defined fan level")])])]),e._v(" "),t("li",[t("strong",[e._v("dataValue[1-6] [string]:")]),e._v(" The transmitted value for the input event [n] with the given id[n] and type (sendType[n])")]),e._v(" "),t("li",[t("strong",[e._v("IDSlider[1-6] [string]:")]),e._v(" Source ID for slider[n]. The range is from 0 to 127.")]),e._v(" "),t("li",[t("strong",[e._v("sendTypeSlider[1-6] [string]:")]),e._v(" The data type for sending slider[n] data with IDSLider[n]. The possible data types are stated above")]),e._v(" "),t("li",[t("strong",[e._v("IDTrigger[1-6] [string]:")]),e._v(" Source ID for event trigger[n]. This is a full id, as printed on the device as 6 character string(e.g. FFEFA01C)")]),e._v(" "),t("li",[t("strong",[e._v("TypeTrigger[1-6] [string]:")]),e._v(" The data type for the listening event[n]. If an incoming frame from the give ID (IDTrigger[n]) contains this data type, an event on event port [n] is raised. The possible data types are stated above")])]),e._v(" "),t("h2",{attrs:{id:"event-listener"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener"}},[e._v("#")]),e._v(" Event Listener")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("send[1-6]:")]),e._v(" Each time a event is triggered, the coresponding EnOcean frame which is specified in the plugin properties, is transmitted.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger"}},[e._v("#")]),e._v(" Event Trigger")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event_out_[1-6]:")]),e._v(" Each time a frame is received with the given parameters (from properties IDTrigger[n] and TypeTrigger[n]), this event is raised")])])])}),[],!1,null,null,null);t.default=i.exports},627:function(e,t,n){e.exports=n.p+"assets/img/enocean.b119bfe0.png"}}]); \ No newline at end of file diff --git a/assets/js/145.213392fc.js b/assets/js/145.5c59694a.js similarity index 93% rename from assets/js/145.213392fc.js rename to assets/js/145.5c59694a.js index bf428aad4c..6c813fa1ef 100644 --- a/assets/js/145.213392fc.js +++ b/assets/js/145.5c59694a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[145],{1082:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"eventvisualizer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventvisualizer"}},[e._v("#")]),e._v(" EventVisualizer")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("This plugin provides a graphical feedback for events. It can be used to monitor event activities and is mainly targeted for testing of configurations during setup time. The plugin offers a GUI (simple window with text output) where event names are displayed.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(630),alt:"Screenshot: EventVisualizer plugin",title:"Screenshot: EventVisualizer plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("No special hardware or software required.")]),e._v(" "),t("h2",{attrs:{id:"port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#port-description"}},[e._v("#")]),e._v(" Port Description")]),e._v(" "),t("p",[e._v("This plugin does not provide input or output ports.")]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event_in_1:")]),e._v(" incoming events will be displayed in the GUI.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=s.exports},630:function(e,t,i){e.exports=i.p+"assets/img/eventvisualizer.22b2dfa9.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[145],{1082:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"eventvisualizer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventvisualizer"}},[e._v("#")]),e._v(" EventVisualizer")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("This plugin provides a graphical feedback for events. It can be used to monitor event activities and is mainly targeted for testing of configurations during setup time. The plugin offers a GUI (simple window with text output) where event names are displayed.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(629),alt:"Screenshot: EventVisualizer plugin",title:"Screenshot: EventVisualizer plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("No special hardware or software required.")]),e._v(" "),t("h2",{attrs:{id:"port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#port-description"}},[e._v("#")]),e._v(" Port Description")]),e._v(" "),t("p",[e._v("This plugin does not provide input or output ports.")]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event_in_1:")]),e._v(" incoming events will be displayed in the GUI.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=s.exports},629:function(e,t,i){e.exports=i.p+"assets/img/eventvisualizer.22b2dfa9.jpg"}}]); \ No newline at end of file diff --git a/assets/js/146.2f86ac05.js b/assets/js/146.f5a30dfa.js similarity index 99% rename from assets/js/146.2f86ac05.js rename to assets/js/146.f5a30dfa.js index ea36ecc8fb..b7a383887e 100644 --- a/assets/js/146.2f86ac05.js +++ b/assets/js/146.f5a30dfa.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[146],{1080:function(t,e,r){"use strict";r.r(e);var a=r(2),A=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"fs20sender"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fs20sender"}},[t._v("#")]),t._v(" FS20Sender")]),t._v(" "),e("h2",{attrs:{id:"component-type-actuator-subcategory-home-control"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-home-control"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: Home Control)")]),t._v(" "),e("p",[t._v("With the FS20 Sender commands for the FS20 house automation system can be sent over the PCS device sold by ELV electronics. See "),e("a",{attrs:{href:"http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=29530&flv=1&bereich=&:marke=",target:"_blank",rel:"noopener noreferrer"}},[t._v("the ELV FS20 homepage"),e("OutboundLink")],1),t._v(" for details.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The PCS sender must be attached to the system!")]),t._v(" "),e("p",[e("img",{attrs:{src:r(628),alt:"Picture of the PCS FS20 sender",title:"Picture of the PCS FS20 sender"}})]),t._v(" "),e("h2",{attrs:{id:"supported-oses"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#supported-oses"}},[t._v("#")]),t._v(" Supported OSes")]),t._v(" "),e("ul",[e("li",[t._v("Windows ("),e("code",[t._v("x86")]),t._v(", "),e("code",[t._v("x64")]),t._v(")")]),t._v(" "),e("li",[t._v("Linux ("),e("code",[t._v("x86")]),t._v(", "),e("code",[t._v("x64")]),t._v(", "),e("code",[t._v("ARM")]),t._v(" - (Raspberry Pi))")]),t._v(" "),e("li",[t._v("macOS X ("),e("code",[t._v("x86")]),t._v(", "),e("code",[t._v("x64")]),t._v(")")])]),t._v(" "),e("h2",{attrs:{id:"notes-on-linux-platform"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#notes-on-linux-platform"}},[t._v("#")]),t._v(" Notes on Linux platform")]),t._v(" "),e("p",[t._v("If you installed AsTeRICS as package, all necessary permission already set.\nIf you built AsTeRICS on your own, please type following command on a terminal window:")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('\'ATTRS{idProduct}=="e015", ATTRS{idVendor}=="18ef", MODE="0660", GROUP="plugdev"\'')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" /etc/udev/rules.d/50-asterics-fs20.rules\n")])])]),e("p",[t._v("One additional command is necessary if you work on ARM based platforms (RaspberryPi, BananaPi,…):")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ln")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-sf")]),t._v(" /lib/arm-linux-gnueabihf/libudev.so.1 /lib/arm-linux-gnueabihf/libudev.so.0\n")])])]),e("p",[t._v("Afterwards, unplug and plug in the FS20 device and restart AsTeRICS.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("houseCode [int]:")]),t._v(" The houseCode to which the command should be sent. Overrides the houseCode set in the properties")]),t._v(" "),e("li",[e("strong",[t._v("address [int]:")]),t._v(" The address of the target device. Overrides the houseCode set in the properties.")]),t._v(" "),e("li",[e("strong",[t._v("action [string]:")]),t._v(" Action input to send commands from other components which output a variable string, for example OSKA. The string format is as follows: @FS20:houseCode,address,command; e.g.@FS20:11111111,1234,18 to send the toggle command to the device with housecode 11111111 and address 1234. The delimiters ‘,’, ‘_’ and ’ ’ are allowed. For the indices of the commands see the table below.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("p",[t._v("See table below for a list of all commands that can be triggered")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Command")]),t._v(" "),e("th",[t._v("ID")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Off")]),t._v(" "),e("td",[t._v("0")])]),t._v(" "),e("tr",[e("td",[t._v("Level1")]),t._v(" "),e("td",[t._v("1")])]),t._v(" "),e("tr",[e("td",[t._v("Level2")]),t._v(" "),e("td",[t._v("2")])]),t._v(" "),e("tr",[e("td",[t._v("Level3")]),t._v(" "),e("td",[t._v("3")])]),t._v(" "),e("tr",[e("td",[t._v("Level4")]),t._v(" "),e("td",[t._v("4")])]),t._v(" "),e("tr",[e("td",[t._v("Level5")]),t._v(" "),e("td",[t._v("5")])]),t._v(" "),e("tr",[e("td",[t._v("Level6")]),t._v(" "),e("td",[t._v("6")])]),t._v(" "),e("tr",[e("td",[t._v("Level7")]),t._v(" "),e("td",[t._v("7")])]),t._v(" "),e("tr",[e("td",[t._v("Level8")]),t._v(" "),e("td",[t._v("8")])]),t._v(" "),e("tr",[e("td",[t._v("Level9")]),t._v(" "),e("td",[t._v("9")])]),t._v(" "),e("tr",[e("td",[t._v("Level10")]),t._v(" "),e("td",[t._v("10")])]),t._v(" "),e("tr",[e("td",[t._v("Level11")]),t._v(" "),e("td",[t._v("11")])]),t._v(" "),e("tr",[e("td",[t._v("Level12")]),t._v(" "),e("td",[t._v("12")])]),t._v(" "),e("tr",[e("td",[t._v("Level13")]),t._v(" "),e("td",[t._v("13")])]),t._v(" "),e("tr",[e("td",[t._v("Level14")]),t._v(" "),e("td",[t._v("14")])]),t._v(" "),e("tr",[e("td",[t._v("Level15")]),t._v(" "),e("td",[t._v("15")])]),t._v(" "),e("tr",[e("td",[t._v("Level16")]),t._v(" "),e("td",[t._v("16")])]),t._v(" "),e("tr",[e("td",[t._v("OnOldLevel")]),t._v(" "),e("td",[t._v("17")])]),t._v(" "),e("tr",[e("td",[t._v("Toggle")]),t._v(" "),e("td",[t._v("18")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up")]),t._v(" "),e("td",[t._v("19")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Down")]),t._v(" "),e("td",[t._v("20")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up and Down")]),t._v(" "),e("td",[t._v("21")])]),t._v(" "),e("tr",[e("td",[t._v("Program internal timer")]),t._v(" "),e("td",[t._v("22")])]),t._v(" "),e("tr",[e("td",[t._v("Off for timer then old brightness level")]),t._v(" "),e("td",[t._v("24")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then off")]),t._v(" "),e("td",[t._v("25")])]),t._v(" "),e("tr",[e("td",[t._v("On old brightness level for timer then off")]),t._v(" "),e("td",[t._v("26")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then old brightness level")]),t._v(" "),e("td",[t._v("30")])]),t._v(" "),e("tr",[e("td",[t._v("On for old level then previous state")]),t._v(" "),e("td",[t._v("31")])])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("houseCode [integer]:")]),t._v(" The default housecode for the component if there is no on the input port.")]),t._v(" "),e("li",[e("strong",[t._v("address [integer]:")]),t._v(" The default address for the component if there is no on the input port.")])])])}),[],!1,null,null,null);e.default=A.exports},628:function(t,e){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[146],{1081:function(t,e,r){"use strict";r.r(e);var a=r(2),A=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"fs20sender"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fs20sender"}},[t._v("#")]),t._v(" FS20Sender")]),t._v(" "),e("h2",{attrs:{id:"component-type-actuator-subcategory-home-control"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-home-control"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: Home Control)")]),t._v(" "),e("p",[t._v("With the FS20 Sender commands for the FS20 house automation system can be sent over the PCS device sold by ELV electronics. See "),e("a",{attrs:{href:"http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=29530&flv=1&bereich=&:marke=",target:"_blank",rel:"noopener noreferrer"}},[t._v("the ELV FS20 homepage"),e("OutboundLink")],1),t._v(" for details.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The PCS sender must be attached to the system!")]),t._v(" "),e("p",[e("img",{attrs:{src:r(628),alt:"Picture of the PCS FS20 sender",title:"Picture of the PCS FS20 sender"}})]),t._v(" "),e("h2",{attrs:{id:"supported-oses"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#supported-oses"}},[t._v("#")]),t._v(" Supported OSes")]),t._v(" "),e("ul",[e("li",[t._v("Windows ("),e("code",[t._v("x86")]),t._v(", "),e("code",[t._v("x64")]),t._v(")")]),t._v(" "),e("li",[t._v("Linux ("),e("code",[t._v("x86")]),t._v(", "),e("code",[t._v("x64")]),t._v(", "),e("code",[t._v("ARM")]),t._v(" - (Raspberry Pi))")]),t._v(" "),e("li",[t._v("macOS X ("),e("code",[t._v("x86")]),t._v(", "),e("code",[t._v("x64")]),t._v(")")])]),t._v(" "),e("h2",{attrs:{id:"notes-on-linux-platform"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#notes-on-linux-platform"}},[t._v("#")]),t._v(" Notes on Linux platform")]),t._v(" "),e("p",[t._v("If you installed AsTeRICS as package, all necessary permission already set.\nIf you built AsTeRICS on your own, please type following command on a terminal window:")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('\'ATTRS{idProduct}=="e015", ATTRS{idVendor}=="18ef", MODE="0660", GROUP="plugdev"\'')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" /etc/udev/rules.d/50-asterics-fs20.rules\n")])])]),e("p",[t._v("One additional command is necessary if you work on ARM based platforms (RaspberryPi, BananaPi,…):")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ln")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-sf")]),t._v(" /lib/arm-linux-gnueabihf/libudev.so.1 /lib/arm-linux-gnueabihf/libudev.so.0\n")])])]),e("p",[t._v("Afterwards, unplug and plug in the FS20 device and restart AsTeRICS.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("houseCode [int]:")]),t._v(" The houseCode to which the command should be sent. Overrides the houseCode set in the properties")]),t._v(" "),e("li",[e("strong",[t._v("address [int]:")]),t._v(" The address of the target device. Overrides the houseCode set in the properties.")]),t._v(" "),e("li",[e("strong",[t._v("action [string]:")]),t._v(" Action input to send commands from other components which output a variable string, for example OSKA. The string format is as follows: @FS20:houseCode,address,command; e.g.@FS20:11111111,1234,18 to send the toggle command to the device with housecode 11111111 and address 1234. The delimiters ‘,’, ‘_’ and ’ ’ are allowed. For the indices of the commands see the table below.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("p",[t._v("See table below for a list of all commands that can be triggered")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Command")]),t._v(" "),e("th",[t._v("ID")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Off")]),t._v(" "),e("td",[t._v("0")])]),t._v(" "),e("tr",[e("td",[t._v("Level1")]),t._v(" "),e("td",[t._v("1")])]),t._v(" "),e("tr",[e("td",[t._v("Level2")]),t._v(" "),e("td",[t._v("2")])]),t._v(" "),e("tr",[e("td",[t._v("Level3")]),t._v(" "),e("td",[t._v("3")])]),t._v(" "),e("tr",[e("td",[t._v("Level4")]),t._v(" "),e("td",[t._v("4")])]),t._v(" "),e("tr",[e("td",[t._v("Level5")]),t._v(" "),e("td",[t._v("5")])]),t._v(" "),e("tr",[e("td",[t._v("Level6")]),t._v(" "),e("td",[t._v("6")])]),t._v(" "),e("tr",[e("td",[t._v("Level7")]),t._v(" "),e("td",[t._v("7")])]),t._v(" "),e("tr",[e("td",[t._v("Level8")]),t._v(" "),e("td",[t._v("8")])]),t._v(" "),e("tr",[e("td",[t._v("Level9")]),t._v(" "),e("td",[t._v("9")])]),t._v(" "),e("tr",[e("td",[t._v("Level10")]),t._v(" "),e("td",[t._v("10")])]),t._v(" "),e("tr",[e("td",[t._v("Level11")]),t._v(" "),e("td",[t._v("11")])]),t._v(" "),e("tr",[e("td",[t._v("Level12")]),t._v(" "),e("td",[t._v("12")])]),t._v(" "),e("tr",[e("td",[t._v("Level13")]),t._v(" "),e("td",[t._v("13")])]),t._v(" "),e("tr",[e("td",[t._v("Level14")]),t._v(" "),e("td",[t._v("14")])]),t._v(" "),e("tr",[e("td",[t._v("Level15")]),t._v(" "),e("td",[t._v("15")])]),t._v(" "),e("tr",[e("td",[t._v("Level16")]),t._v(" "),e("td",[t._v("16")])]),t._v(" "),e("tr",[e("td",[t._v("OnOldLevel")]),t._v(" "),e("td",[t._v("17")])]),t._v(" "),e("tr",[e("td",[t._v("Toggle")]),t._v(" "),e("td",[t._v("18")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up")]),t._v(" "),e("td",[t._v("19")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Down")]),t._v(" "),e("td",[t._v("20")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up and Down")]),t._v(" "),e("td",[t._v("21")])]),t._v(" "),e("tr",[e("td",[t._v("Program internal timer")]),t._v(" "),e("td",[t._v("22")])]),t._v(" "),e("tr",[e("td",[t._v("Off for timer then old brightness level")]),t._v(" "),e("td",[t._v("24")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then off")]),t._v(" "),e("td",[t._v("25")])]),t._v(" "),e("tr",[e("td",[t._v("On old brightness level for timer then off")]),t._v(" "),e("td",[t._v("26")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then old brightness level")]),t._v(" "),e("td",[t._v("30")])]),t._v(" "),e("tr",[e("td",[t._v("On for old level then previous state")]),t._v(" "),e("td",[t._v("31")])])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("houseCode [integer]:")]),t._v(" The default housecode for the component if there is no on the input port.")]),t._v(" "),e("li",[e("strong",[t._v("address [integer]:")]),t._v(" The default address for the component if there is no on the input port.")])])])}),[],!1,null,null,null);e.default=A.exports},628:function(t,e){t.exports="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/147.2f02e55d.js b/assets/js/147.d721d9d7.js similarity index 89% rename from assets/js/147.2f02e55d.js rename to assets/js/147.d721d9d7.js index 1dea85693b..b67d675501 100644 --- a/assets/js/147.2f02e55d.js +++ b/assets/js/147.d721d9d7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{1081:function(t,e,r){"use strict";r.r(e);var i=r(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"filewriter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#filewriter"}},[t._v("#")]),t._v(" FileWriter")]),t._v(" "),e("h2",{attrs:{id:"component-type-actuator-subcategory-file-system"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-file-system"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This component writes the input values that are received in the input port to a text file, so these values can be analysed and processed off-line.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(629),alt:"Screenshot: File Writer plugin",title:"Screenshot: File Writer plugin"}})]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the values to be written to the text file.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FileName [string]:")]),t._v(" Defines the name for the file where the input values are written. A timestamp indicating year, month, day, hour, minute and second of when the file is created is appended to the file name in order to identify different recordings.")])])])}),[],!1,null,null,null);e.default=s.exports},629:function(t,e,r){t.exports=r.p+"assets/img/filewriter.747c3825.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{1083:function(t,e,r){"use strict";r.r(e);var i=r(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"filewriter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#filewriter"}},[t._v("#")]),t._v(" FileWriter")]),t._v(" "),e("h2",{attrs:{id:"component-type-actuator-subcategory-file-system"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-file-system"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This component writes the input values that are received in the input port to a text file, so these values can be analysed and processed off-line.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(630),alt:"Screenshot: File Writer plugin",title:"Screenshot: File Writer plugin"}})]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the values to be written to the text file.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FileName [string]:")]),t._v(" Defines the name for the file where the input values are written. A timestamp indicating year, month, day, hour, minute and second of when the file is created is appended to the file name in order to identify different recordings.")])])])}),[],!1,null,null,null);e.default=s.exports},630:function(t,e,r){t.exports=r.p+"assets/img/filewriter.747c3825.jpg"}}]); \ No newline at end of file diff --git a/assets/js/148.70170c40.js b/assets/js/148.9a6335e8.js similarity index 95% rename from assets/js/148.70170c40.js rename to assets/js/148.9a6335e8.js index 30682f1113..6a0ddce588 100644 --- a/assets/js/148.70170c40.js +++ b/assets/js/148.9a6335e8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[148],{1083:function(e,t,s){"use strict";s.r(t);var r=s(2),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gmailshortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gmailshortcuts"}},[e._v("#")]),e._v(" GMailShortcuts")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-others"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-others"}},[e._v("#")]),e._v(" Component Type: Actuator (Subcategory: Others)")]),e._v(" "),t("p",[e._v("The GMailShortcuts component was developed to operate the e-mail client of GMail via Keystroke combinations (Shortcuts).The component emulates local keyboard inputs that are sent to the window currently having the focus. Please ensure that the GMail tab in your webbrowser has the input focus.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(631),alt:"Screenshot: GMailShortcuts plugin",title:"Screenshot: GMailShortcuts plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("Works best with the Opera internet browser (http://www.opera.com/de) and the Gmail client (https://www.google.com/intl/en/mail/help/about.html)")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("KeyCode [string]:")]),e._v(" Input port for incoming strings which consists of alphanumeric characters. The keys are sequentially generated as local keystrokes as the string is received.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("**keyCodeString [string]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*If the KeyCode Input recieves a Character between A-Z or 1-9 it generates the corresbonding Keystroke for A-Z or 1-9.")]),e._v(" "),t("p",[e._v("To generate the required shortcuts for the Gmail client, the follwing strings are used:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Navigation")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("UP")]),e._v(" equals the Arrow up key")]),e._v(" "),t("li",[t("code",[e._v("DOWN")]),e._v(" equals the Arrow down key<")]),e._v(" "),t("li",[t("code",[e._v("LEFT")]),e._v(" equals the Arrow left key")]),e._v(" "),t("li",[t("code",[e._v("RIGHT")]),e._v(" equals the Arrow right key")]),e._v(" "),t("li",[t("code",[e._v("ESC")]),e._v(" equals the Escape key")]),e._v(" "),t("li",[t("code",[e._v("TAB")]),e._v(" equals the Tabulator key")]),e._v(" "),t("li",[t("code",[e._v("ENTER")]),e._v(" equals the Enter key")]),e._v(" "),t("li",[t("code",[e._v("BACKSPACE")]),e._v(" equals the Backspace key")])])]),e._v(" "),t("li",[t("strong",[e._v("Special Signs")]),e._v(" "),t("ul",[t("li",[t("code",[e._v(".")]),e._v(" equals the full stop key")]),e._v(" "),t("li",[t("code",[e._v("@")]),e._v(" equals the at sign key")]),e._v(" "),t("li",[t("code",[e._v(":")]),e._v(" equals the colon key")]),e._v(" "),t("li",[t("code",[e._v(";")]),e._v(" equals the semicolon key")]),e._v(" "),t("li",[t("code",[e._v(",")]),e._v(" equals the comma key")]),e._v(" "),t("li",[t("code",[e._v("!")]),e._v(" equals the exclemationmarl key")]),e._v(" "),t("li",[t("code",[e._v("?")]),e._v(" equals the questionmark key")]),e._v(" "),t("li",[t("code",[e._v("_")]),e._v(" equals the underscore key")])])]),e._v(" "),t("li",[t("strong",[e._v("GMail Key Combinations")]),e._v(" "),t("ul",[t("li",[e._v("SENDEN sends a written email if in a compose or replay window")]),e._v(" "),t("li",[e._v("CC if in a compose or reply window enters the CC area")]),e._v(" "),t("li",[e._v("NEW opens a email compose window")]),e._v(" "),t("li",[e._v("SEARCH sets the courser in the searchbar")]),e._v(" "),t("li",[e._v("INBOX swithces to the inbox window")]),e._v(" "),t("li",[e._v("REPLY enters the replay window when previously in an opened email")]),e._v(" "),t("li",[e._v("SELECT selects the email currentl marked blue")]),e._v(" "),t("li",[e._v("ENTER opens the currently marked email")]),e._v(" "),t("li",[e._v("SHIFT is the shift lock key (pressing once all chars a generated in capital letters pressing again undos the caption)")])])])])])])])}),[],!1,null,null,null);t.default=a.exports},631:function(e,t,s){e.exports=s.p+"assets/img/gmailshortcuts.23822e29.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[148],{1085:function(e,t,s){"use strict";s.r(t);var r=s(2),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gmailshortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gmailshortcuts"}},[e._v("#")]),e._v(" GMailShortcuts")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-others"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-others"}},[e._v("#")]),e._v(" Component Type: Actuator (Subcategory: Others)")]),e._v(" "),t("p",[e._v("The GMailShortcuts component was developed to operate the e-mail client of GMail via Keystroke combinations (Shortcuts).The component emulates local keyboard inputs that are sent to the window currently having the focus. Please ensure that the GMail tab in your webbrowser has the input focus.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(633),alt:"Screenshot: GMailShortcuts plugin",title:"Screenshot: GMailShortcuts plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("Works best with the Opera internet browser (http://www.opera.com/de) and the Gmail client (https://www.google.com/intl/en/mail/help/about.html)")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("KeyCode [string]:")]),e._v(" Input port for incoming strings which consists of alphanumeric characters. The keys are sequentially generated as local keystrokes as the string is received.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("**keyCodeString [string]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*If the KeyCode Input recieves a Character between A-Z or 1-9 it generates the corresbonding Keystroke for A-Z or 1-9.")]),e._v(" "),t("p",[e._v("To generate the required shortcuts for the Gmail client, the follwing strings are used:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Navigation")]),e._v(" "),t("ul",[t("li",[t("code",[e._v("UP")]),e._v(" equals the Arrow up key")]),e._v(" "),t("li",[t("code",[e._v("DOWN")]),e._v(" equals the Arrow down key<")]),e._v(" "),t("li",[t("code",[e._v("LEFT")]),e._v(" equals the Arrow left key")]),e._v(" "),t("li",[t("code",[e._v("RIGHT")]),e._v(" equals the Arrow right key")]),e._v(" "),t("li",[t("code",[e._v("ESC")]),e._v(" equals the Escape key")]),e._v(" "),t("li",[t("code",[e._v("TAB")]),e._v(" equals the Tabulator key")]),e._v(" "),t("li",[t("code",[e._v("ENTER")]),e._v(" equals the Enter key")]),e._v(" "),t("li",[t("code",[e._v("BACKSPACE")]),e._v(" equals the Backspace key")])])]),e._v(" "),t("li",[t("strong",[e._v("Special Signs")]),e._v(" "),t("ul",[t("li",[t("code",[e._v(".")]),e._v(" equals the full stop key")]),e._v(" "),t("li",[t("code",[e._v("@")]),e._v(" equals the at sign key")]),e._v(" "),t("li",[t("code",[e._v(":")]),e._v(" equals the colon key")]),e._v(" "),t("li",[t("code",[e._v(";")]),e._v(" equals the semicolon key")]),e._v(" "),t("li",[t("code",[e._v(",")]),e._v(" equals the comma key")]),e._v(" "),t("li",[t("code",[e._v("!")]),e._v(" equals the exclemationmarl key")]),e._v(" "),t("li",[t("code",[e._v("?")]),e._v(" equals the questionmark key")]),e._v(" "),t("li",[t("code",[e._v("_")]),e._v(" equals the underscore key")])])]),e._v(" "),t("li",[t("strong",[e._v("GMail Key Combinations")]),e._v(" "),t("ul",[t("li",[e._v("SENDEN sends a written email if in a compose or replay window")]),e._v(" "),t("li",[e._v("CC if in a compose or reply window enters the CC area")]),e._v(" "),t("li",[e._v("NEW opens a email compose window")]),e._v(" "),t("li",[e._v("SEARCH sets the courser in the searchbar")]),e._v(" "),t("li",[e._v("INBOX swithces to the inbox window")]),e._v(" "),t("li",[e._v("REPLY enters the replay window when previously in an opened email")]),e._v(" "),t("li",[e._v("SELECT selects the email currentl marked blue")]),e._v(" "),t("li",[e._v("ENTER opens the currently marked email")]),e._v(" "),t("li",[e._v("SHIFT is the shift lock key (pressing once all chars a generated in capital letters pressing again undos the caption)")])])])])])])])}),[],!1,null,null,null);t.default=a.exports},633:function(e,t,s){e.exports=s.p+"assets/img/gmailshortcuts.23822e29.jpg"}}]); \ No newline at end of file diff --git a/assets/js/149.3d20ffc2.js b/assets/js/149.4e9a989f.js similarity index 94% rename from assets/js/149.3d20ffc2.js rename to assets/js/149.4e9a989f.js index ea5a5c1530..c4ae93eeea 100644 --- a/assets/js/149.3d20ffc2.js +++ b/assets/js/149.4e9a989f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[149],{1084:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-actuator-subcategory-communication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-communication"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: Communication)")]),t._v(" "),e("p",[t._v("This component can perform send and receive SMS action through the GSM modem.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(632),alt:"Screenshot: GSMModem plugin",title:"Screenshot: GSMModem plugin"}})]),t._v(" "),e("p",[t._v("GSMModem plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("A GSM modem with SMS option connected to the platform.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("phoneID [string]:")]),t._v(" Phone number which will be used for the send SMS action.")]),t._v(" "),e("li",[e("strong",[t._v("SMSContent [string]:")]),t._v(" SMS content which will be used for the send SMS action.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("remotePhoneID [string]:")]),t._v(" This is a phone number of the SMS sender.")]),t._v(" "),e("li",[e("strong",[t._v("receivedSMS [string]:")]),t._v(" This is the content of the incoming SMS.")]),t._v(" "),e("li",[e("strong",[t._v("errorNumber [integer]:")]),t._v(" The number of the error.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sendSMS:")]),t._v(" Sends the SMS message.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("newSMS:")]),t._v(" There is a new message.")]),t._v(" "),e("li",[e("strong",[t._v("error:")]),t._v(" An error occurred.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("serialPort [string]:")]),t._v(" The modem COM port. If this parameter is empty, the component uses the port of the first modem found.")]),t._v(" "),e("li",[t._v("**pin [string]"),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("*The PIN code for the SIM card. If the PIN is not needed this property should be empty.")]),t._v(" "),e("li",[e("strong",[t._v("smsCenterID [string]:")]),t._v(" SMS Center ID. If the Center ID is not needed this property should be empty.")]),t._v(" "),e("li",[e("strong",[t._v("defaultPhoneID [string]:")]),t._v(" This is a default phone number, which will be used for the send SMS actions.")])])])}),[],!1,null,null,null);e.default=n.exports},632:function(t,e,r){t.exports=r.p+"assets/img/gsmmodem.5519c224.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[149],{1087:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-actuator-subcategory-communication"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-communication"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: Communication)")]),t._v(" "),e("p",[t._v("This component can perform send and receive SMS action through the GSM modem.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(636),alt:"Screenshot: GSMModem plugin",title:"Screenshot: GSMModem plugin"}})]),t._v(" "),e("p",[t._v("GSMModem plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("A GSM modem with SMS option connected to the platform.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("phoneID [string]:")]),t._v(" Phone number which will be used for the send SMS action.")]),t._v(" "),e("li",[e("strong",[t._v("SMSContent [string]:")]),t._v(" SMS content which will be used for the send SMS action.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("remotePhoneID [string]:")]),t._v(" This is a phone number of the SMS sender.")]),t._v(" "),e("li",[e("strong",[t._v("receivedSMS [string]:")]),t._v(" This is the content of the incoming SMS.")]),t._v(" "),e("li",[e("strong",[t._v("errorNumber [integer]:")]),t._v(" The number of the error.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sendSMS:")]),t._v(" Sends the SMS message.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("newSMS:")]),t._v(" There is a new message.")]),t._v(" "),e("li",[e("strong",[t._v("error:")]),t._v(" An error occurred.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("serialPort [string]:")]),t._v(" The modem COM port. If this parameter is empty, the component uses the port of the first modem found.")]),t._v(" "),e("li",[t._v("**pin [string]"),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("*The PIN code for the SIM card. If the PIN is not needed this property should be empty.")]),t._v(" "),e("li",[e("strong",[t._v("smsCenterID [string]:")]),t._v(" SMS Center ID. If the Center ID is not needed this property should be empty.")]),t._v(" "),e("li",[e("strong",[t._v("defaultPhoneID [string]:")]),t._v(" This is a default phone number, which will be used for the send SMS actions.")])])])}),[],!1,null,null,null);e.default=n.exports},636:function(t,e,r){t.exports=r.p+"assets/img/gsmmodem.5519c224.jpg"}}]); \ No newline at end of file diff --git a/assets/js/150.0a3594c7.js b/assets/js/150.8a938188.js similarity index 92% rename from assets/js/150.0a3594c7.js rename to assets/js/150.8a938188.js index 4c55e46c5e..a5a30e6577 100644 --- a/assets/js/150.0a3594c7.js +++ b/assets/js/150.8a938188.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[150],{1086:function(e,t,r){"use strict";r.r(t);var i=r(2),a=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"image-box"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#image-box"}},[e._v("#")]),e._v(" Image Box")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-graphical-user-interface"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-graphical-user-interface"}},[e._v("#")]),e._v(" Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("The Image Box is a GUI component which displays images loaded from image files.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(635),alt:"Screenshot: ImgeBox plugin",title:"Screenshot: ImageBox plugin"}})]),e._v(" "),t("p",[e._v("ImageBox plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [string]:")]),e._v(" The path of the image file, which will be displayed.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("clear:")]),e._v(" Removes the image from the component.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("clicked:")]),e._v(" The event is triggered when the user clicks on the component.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("caption [string]:")]),e._v(" Caption of the component.")]),e._v(" "),t("li",[t("strong",[e._v("default [string]:")]),e._v(" The path of the image file, which is displayed after start.")]),e._v(" "),t("li",[t("strong",[e._v("backgroundColor [integer]:")]),e._v(" Defines background color.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=a.exports},635:function(e,t,r){e.exports=r.p+"assets/img/imagebox.29b0dbbb.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[150],{1088:function(e,t,r){"use strict";r.r(t);var i=r(2),a=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"image-box"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#image-box"}},[e._v("#")]),e._v(" Image Box")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-graphical-user-interface"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-graphical-user-interface"}},[e._v("#")]),e._v(" Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("The Image Box is a GUI component which displays images loaded from image files.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(637),alt:"Screenshot: ImgeBox plugin",title:"Screenshot: ImageBox plugin"}})]),e._v(" "),t("p",[e._v("ImageBox plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [string]:")]),e._v(" The path of the image file, which will be displayed.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("clear:")]),e._v(" Removes the image from the component.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("clicked:")]),e._v(" The event is triggered when the user clicks on the component.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("caption [string]:")]),e._v(" Caption of the component.")]),e._v(" "),t("li",[t("strong",[e._v("default [string]:")]),e._v(" The path of the image file, which is displayed after start.")]),e._v(" "),t("li",[t("strong",[e._v("backgroundColor [integer]:")]),e._v(" Defines background color.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=a.exports},637:function(e,t,r){e.exports=r.p+"assets/img/imagebox.29b0dbbb.jpg"}}]); \ No newline at end of file diff --git a/assets/js/151.be13a346.js b/assets/js/151.f826ced2.js similarity index 96% rename from assets/js/151.be13a346.js rename to assets/js/151.f826ced2.js index eeca7cc39c..ec9db05527 100644 --- a/assets/js/151.be13a346.js +++ b/assets/js/151.f826ced2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[151],{1090:function(e,t,n){"use strict";n.r(t);var s=n(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"keyboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard"}},[e._v("#")]),e._v(" Keyboard")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-input-device-emulation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-input-device-emulation"}},[e._v("#")]),e._v(" Component Type: Actuator (Subcategory: Input Device Emulation)")]),e._v(" "),t("p",[e._v("The Keyboard component generates local keyboard input on the computer that the ARE is running on (per software emulation). The component supports key press/hold/release actions and sending key sequences and special keycodes. special or non-printable characters can be sent using curly braces and key identifier strings, e.g. {UP} {ENTER} {ALT} {DELETE} etc. - see description of the property keyCodeString. Multiple instances of the Keyboard component can be used to provide different key actions.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(640),alt:"Screenshot: Keyboard plugin",title:"Screenshot: Keyboard plugin"}})]),e._v(" "),t("p",[e._v("Keyboard plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("No special hardware or software required.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keyCodes [string]:")]),e._v(" An incoming string which consists of alphanumeric characters and special key codes. The keys are sequentially generated as local keystrokes as the string is received, and as the sendKeys and other input related events of the component are being triggered.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendKeys:")]),e._v(" An incoming event at this port generates all keycodes of the keycode string (sequentially).")]),e._v(" "),t("li",[t("strong",[e._v("pressKey:")]),e._v(" An incoming event at this port pressed (and releases) the key (first key + modifiers if there are multiple keys).")]),e._v(" "),t("li",[t("strong",[e._v("holdKey:")]),e._v(" An incoming event at this port holds the key (first key + modifiers if there are multiple keys). The key is pressed but not released. The holdKey listener can be used together with the releaseKey feature to create long key presses of single keys (e.g. of the cursor keys) to allow game control etc.")]),e._v(" "),t("li",[t("strong",[e._v("releaseKey:")]),e._v(" An incoming event at this port releases the key which was pressed using the hold event.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keyCodeString [string]:")]),e._v(" A string containing keys and keycodes. Please note that this string will be replaced by an incoming string at the keycodes input port. The keyCodeString can contain alphanumeric characters and special characters. Special characters are written in parentheses, for example {SHIFT}, {CTRL}, {ALT}, {BACKSPACE}, {ENTER} etc. Modifier keys like {SHIFT} or {ALT} are combined as they appear consecutively in the keystring, and are generated with the next printable character. For example, the keystrings “{SHIFT}” or “{CTRL}{ALT}{DEL}” are sent as single key values. For a description of the currently supported special key codes see the table below.")]),e._v(" "),t("li",[t("strong",[e._v("inputMethod [integer]:")]),e._v(" Declares whether to use sending window messages (Windows), system-wide SendInput API function (Windows) or JNativehook (cross-platform) as key injection method. (Please note that there are still problems with locales and special key translation…)")]),e._v(" "),t("li",[t("strong",[e._v("waitTime [integer]:")]),e._v(" Defines a number of milliseconds for a pause which shall occur when {WAIT} appears in the keycode string.")])]),e._v(" "),t("h2",{attrs:{id:"list-of-supported-special-key-code-identifiers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-of-supported-special-key-code-identifiers"}},[e._v("#")]),e._v(" List of supported special key code identifiers")]),e._v(" "),t("p",[e._v("The key codes must be surrounded with braces.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("{SHIFT}\n{CTRL}\n{ALT}, {LEFTALT}, {MENU}\n{ALTGR}, {RIGHTALT}\n{WINDOWS}\n{LWIN}\n{RWIN}\n{UP}, {UPARROW}\n{DOWN}, {DOWNARROW}\n{LEFT}, {LEFTARROW}\n{RIGHT}, {RIGHTARROW}\n{RETURN}\n{ENTER}\n{ESCAPE}\n{BACKSPACE}\n{TAB}\n{PRINT}, {PRINTSCREEN}\n{PAUSE}\n{INSERT}, {INS}\n{HOME}, {POS1}\n{END}\n{DEL}\n{DELETE}\n{PAGEUP}\n{PAGEDOWN}\n{F1}\n{F2}\n{F3}\n{F4}\n{F5}\n{F6}\n{F7}\n{F8}\n{F9}\n{F10}\n{F11}\n{F12}\n{WAIT}\n")])])])])}),[],!1,null,null,null);t.default=r.exports},640:function(e,t,n){e.exports=n.p+"assets/img/keyboard.7420e4ca.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[151],{1089:function(e,t,n){"use strict";n.r(t);var s=n(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"keyboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard"}},[e._v("#")]),e._v(" Keyboard")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-input-device-emulation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-input-device-emulation"}},[e._v("#")]),e._v(" Component Type: Actuator (Subcategory: Input Device Emulation)")]),e._v(" "),t("p",[e._v("The Keyboard component generates local keyboard input on the computer that the ARE is running on (per software emulation). The component supports key press/hold/release actions and sending key sequences and special keycodes. special or non-printable characters can be sent using curly braces and key identifier strings, e.g. {UP} {ENTER} {ALT} {DELETE} etc. - see description of the property keyCodeString. Multiple instances of the Keyboard component can be used to provide different key actions.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(638),alt:"Screenshot: Keyboard plugin",title:"Screenshot: Keyboard plugin"}})]),e._v(" "),t("p",[e._v("Keyboard plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("No special hardware or software required.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keyCodes [string]:")]),e._v(" An incoming string which consists of alphanumeric characters and special key codes. The keys are sequentially generated as local keystrokes as the string is received, and as the sendKeys and other input related events of the component are being triggered.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendKeys:")]),e._v(" An incoming event at this port generates all keycodes of the keycode string (sequentially).")]),e._v(" "),t("li",[t("strong",[e._v("pressKey:")]),e._v(" An incoming event at this port pressed (and releases) the key (first key + modifiers if there are multiple keys).")]),e._v(" "),t("li",[t("strong",[e._v("holdKey:")]),e._v(" An incoming event at this port holds the key (first key + modifiers if there are multiple keys). The key is pressed but not released. The holdKey listener can be used together with the releaseKey feature to create long key presses of single keys (e.g. of the cursor keys) to allow game control etc.")]),e._v(" "),t("li",[t("strong",[e._v("releaseKey:")]),e._v(" An incoming event at this port releases the key which was pressed using the hold event.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keyCodeString [string]:")]),e._v(" A string containing keys and keycodes. Please note that this string will be replaced by an incoming string at the keycodes input port. The keyCodeString can contain alphanumeric characters and special characters. Special characters are written in parentheses, for example {SHIFT}, {CTRL}, {ALT}, {BACKSPACE}, {ENTER} etc. Modifier keys like {SHIFT} or {ALT} are combined as they appear consecutively in the keystring, and are generated with the next printable character. For example, the keystrings “{SHIFT}” or “{CTRL}{ALT}{DEL}” are sent as single key values. For a description of the currently supported special key codes see the table below.")]),e._v(" "),t("li",[t("strong",[e._v("inputMethod [integer]:")]),e._v(" Declares whether to use sending window messages (Windows), system-wide SendInput API function (Windows) or JNativehook (cross-platform) as key injection method. (Please note that there are still problems with locales and special key translation…)")]),e._v(" "),t("li",[t("strong",[e._v("waitTime [integer]:")]),e._v(" Defines a number of milliseconds for a pause which shall occur when {WAIT} appears in the keycode string.")])]),e._v(" "),t("h2",{attrs:{id:"list-of-supported-special-key-code-identifiers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-of-supported-special-key-code-identifiers"}},[e._v("#")]),e._v(" List of supported special key code identifiers")]),e._v(" "),t("p",[e._v("The key codes must be surrounded with braces.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("{SHIFT}\n{CTRL}\n{ALT}, {LEFTALT}, {MENU}\n{ALTGR}, {RIGHTALT}\n{WINDOWS}\n{LWIN}\n{RWIN}\n{UP}, {UPARROW}\n{DOWN}, {DOWNARROW}\n{LEFT}, {LEFTARROW}\n{RIGHT}, {RIGHTARROW}\n{RETURN}\n{ENTER}\n{ESCAPE}\n{BACKSPACE}\n{TAB}\n{PRINT}, {PRINTSCREEN}\n{PAUSE}\n{INSERT}, {INS}\n{HOME}, {POS1}\n{END}\n{DEL}\n{DELETE}\n{PAGEUP}\n{PAGEDOWN}\n{F1}\n{F2}\n{F3}\n{F4}\n{F5}\n{F6}\n{F7}\n{F8}\n{F9}\n{F10}\n{F11}\n{F12}\n{WAIT}\n")])])])])}),[],!1,null,null,null);t.default=r.exports},638:function(e,t,n){e.exports=n.p+"assets/img/keyboard.7420e4ca.jpg"}}]); \ No newline at end of file diff --git a/assets/js/152.f7690c1f.js b/assets/js/152.52e9ca2d.js similarity index 98% rename from assets/js/152.f7690c1f.js rename to assets/js/152.52e9ca2d.js index 7896b203b3..297b916e3d 100644 --- a/assets/js/152.f7690c1f.js +++ b/assets/js/152.52e9ca2d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[152],{1088:function(e,t,r){"use strict";r.r(t);var i=r(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"knx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#knx"}},[e._v("#")]),e._v(" KNX")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-home-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-home-control"}},[e._v("#")]),e._v(" Component Type: actuator (Subcategory: Home Control)")]),e._v(" "),t("p",[e._v("The KNX plugin enables the ARE to interface a KNX installation. This plugin utilizes the calimero java library ("),t("a",{attrs:{href:"http://calimero.sourceforge.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://calimero.sourceforge.net/"),t("OutboundLink")],1),e._v(") for the KNX implementation, it is ©opyrighted 2006-2008 by W. Kastner and released under the GNU General Public License (FSF v2 or later). The KNX plugin provides an interface to the KNX home automation bus via a KNXnet/IP router. KNX actuators with specific group addresses can be switched on or off, or a specific value can be sent to the KNX actuators. This allows control of lightning, heat and ventilation, blend control or other utilization of other home automation facilities via the AsTeRICS platform.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(638),alt:"Screenshot: KNX plugin",title:"Screenshot: KNX plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A KNX infrastructure")]),e._v(" "),t("li",[e._v("A little knowledge on KNX")])]),e._v(" "),t("h2",{attrs:{id:"functional-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-description"}},[e._v("#")]),e._v(" Functional Description")]),e._v(" "),t("p",[e._v("By starting the model, the KNX plugin establishes a connection to the KNX gateway specified by the plugin properties. Currently, this plugin supports only IP connection (due to the limitation of the underlaying calimero library, USB interfaces will be supported with Java8). The plugin has three different possibilities to interface KNX datapoints:")]),e._v(" "),t("ul",[t("li",[e._v("Transmitting: Input ports (slider): Intended for dimming actuators")]),e._v(" "),t("li",[e._v("Transmitting: Event Listeners: Used to send a defined value (with a given type) to a KNX group address.")]),e._v(" "),t("li",[e._v("Transmitting: Action string: The most flexible way to send something to KNX. The command structure is: "),t("em",[e._v("@KNX: group_address,datapoint_type,value")]),e._v(". It is possible to use either a space, a comma or a number sign as separation tokens. The datapoint type is described later.")]),e._v(" "),t("li",[e._v("Receiving: Event Triggers: An event trigger can be used to listen to a defined KNX group address. If there is ANYTHING happening on this dedicated group address, an event will be raised.")]),e._v(" "),t("li",[e._v("Receiving: Output ports: The received value of a KNX group address will be interpreted by the given data point type, parsed to a string and sent out to the output ports")])]),e._v(" "),t("h2",{attrs:{id:"knx-datapoint-types"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#knx-datapoint-types"}},[e._v("#")]),e._v(" KNX datapoint types")]),e._v(" "),t("p",[e._v("KNX itself doesn’t provide any possibilty to get information on how to interpret received data. This is the point where you need the datapoint types. There are a few main types and some sub types. For example: "),t("em",[e._v("1.001")]),e._v(" is the datapoint type for a simple switch actuator/sensor. The input values are varying on the different datapoint types. For the switch example, the valid values are "),t("em",[e._v("on")]),e._v(" and "),t("em",[e._v("off")]),e._v(". The full list of all datatypes is provided by the ARE. If you want to receive a full list, you have to place the plugin in your ACS model, connect to the ARE and upload the model (even without any functionality). Afterwards, the full list of all currently supported datapoint types is available. Every list entry contains following information:")]),e._v(" "),t("ul",[t("li",[e._v("Description")]),e._v(" "),t("li",[e._v("[Minimum,Maximum value]")]),e._v(" "),t("li",[e._v("(Datapoint ID)")])]),e._v(" "),t("p",[e._v("The example of the light switch:"),t("br"),e._v(" "),t("em",[e._v("Switch[off,on] (1.001)")]),e._v(" The literal name for this datapoint type is “Switch” and its ID is 1.001. Because this is a boolean value, off and on are the only valid values. For float values, these given values are representing the minimum and the maximum value.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("actionString [string]:")]),e._v(' This port receives string commands for the KNX component. The commands have to be in the format “@KNX: group_address,datapoint_type,value”. The delimiters ‘,’, ‘#’ and ’ ’ are allowed. An example for a valid command is"@KNX:1/1/1,1.001,on". As a valid command is received by the input port, the value is sent to the KNX group address. The group addresses comply to the setup of the KNX network which can be configured with the ETS software.')]),e._v(" "),t("li",[t("strong",[e._v("slider[1-6] [double]:")]),e._v(" Input port for a double value which is converted to a given datapoint (Property: DPTSlider[1-6]) and sent to the given KNX group address (Property: groupAddressSlider[1-6]")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("data [1-6] [string]:")]),e._v(" These output ports are sending received data from the group addresses (Property: groupAddressOutput[1-6]). The data interpretation is controlled by the DPT (datapoint type, property: DPTOutput[1-6])")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("localIP [string]:")]),e._v(" The local IP address of the interface which can reach the KNXnetIP.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("KNXNetIP [string]:")]),e._v(" The destination IP address of the KNX gateway.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("NAT [boolean]:")]),e._v(" Enable NAT")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddress[1-6] [string]:")]),e._v(" (Event Listener) Specifies KNX group addresses for the [n] Event Listener e.g. “1/1/1”.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("dataValue[1-6] [string]:")]),e._v(" (Event Listener) Date value, which should be sent (triggered by the input event). The possible values are determined by the used DPT property (see the chapter on datapoint types)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("DPTEvent[1-6] [string/dropdown]:")]),e._v(" (Event Listener) Specifies the DPT (datapoint type) of the dataValue[1-6] which is sent to the KNX group address, triggered by the input event.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddressSlider[1-6] [string]:")]),e._v(" (Input port) Specifies KNX group addresses for the Slider[n].")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("DPTSlider[1-6] [string/dropdown]:")]),e._v(" (Input port) Determines the datapoint type corresponding to the sliders [1-6].")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddressTrigger[1-6] [string]:")]),e._v(" (Event Trigger) Specifies KNX group addresses for the Event Trigger [n]. The event is triggered if ANY action is happening on the given group address. If you need additional data processing, please use the output ports and process the received data values.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddressOutput[1-6] [string]:")]),e._v(" (Output port) Specifies the KNX group adresses, which are sent to the output ports. If there is anything happening on the given group adresses, the corresponding data is sent to the output ports.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("DPTOutput[1-6] [string/dropdown]:")]),e._v(" (Output port) Determines the datapoint type for the output port. The received data interpretation is defined by the DPTOutput property.")])])]),e._v(" "),t("h2",{attrs:{id:"event-listener"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener"}},[e._v("#")]),e._v(" Event Listener")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("send[1-6]:")]),e._v(" Each time an event is triggered, the corresponding KNX command which is specified in the plugin properties (groupAddress[1-6],dataValue[1-6],DPTEvent[1-6]), is issued.")]),e._v(" "),t("li",[t("strong",[e._v("read[1-6]:")]),e._v(" Trigger a read command on the output port. The settings for the group address and the DPT are the same as for the output ports (groupAddressOutput[1-6], DPTOutput[1-6]).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger"}},[e._v("#")]),e._v(" Event Trigger")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event_out_[1-6]:")]),e._v(" When there is any activity on the given KNX group address, set by the properties (groupAddressTrigger[1-6]) an event is raised by this plugin.")])])])}),[],!1,null,null,null);t.default=s.exports},638:function(e,t,r){e.exports=r.p+"assets/img/knx.98c3039f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[152],{1090:function(e,t,r){"use strict";r.r(t);var i=r(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"knx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#knx"}},[e._v("#")]),e._v(" KNX")]),e._v(" "),t("h2",{attrs:{id:"component-type-actuator-subcategory-home-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-home-control"}},[e._v("#")]),e._v(" Component Type: actuator (Subcategory: Home Control)")]),e._v(" "),t("p",[e._v("The KNX plugin enables the ARE to interface a KNX installation. This plugin utilizes the calimero java library ("),t("a",{attrs:{href:"http://calimero.sourceforge.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://calimero.sourceforge.net/"),t("OutboundLink")],1),e._v(") for the KNX implementation, it is ©opyrighted 2006-2008 by W. Kastner and released under the GNU General Public License (FSF v2 or later). The KNX plugin provides an interface to the KNX home automation bus via a KNXnet/IP router. KNX actuators with specific group addresses can be switched on or off, or a specific value can be sent to the KNX actuators. This allows control of lightning, heat and ventilation, blend control or other utilization of other home automation facilities via the AsTeRICS platform.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(639),alt:"Screenshot: KNX plugin",title:"Screenshot: KNX plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A KNX infrastructure")]),e._v(" "),t("li",[e._v("A little knowledge on KNX")])]),e._v(" "),t("h2",{attrs:{id:"functional-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-description"}},[e._v("#")]),e._v(" Functional Description")]),e._v(" "),t("p",[e._v("By starting the model, the KNX plugin establishes a connection to the KNX gateway specified by the plugin properties. Currently, this plugin supports only IP connection (due to the limitation of the underlaying calimero library, USB interfaces will be supported with Java8). The plugin has three different possibilities to interface KNX datapoints:")]),e._v(" "),t("ul",[t("li",[e._v("Transmitting: Input ports (slider): Intended for dimming actuators")]),e._v(" "),t("li",[e._v("Transmitting: Event Listeners: Used to send a defined value (with a given type) to a KNX group address.")]),e._v(" "),t("li",[e._v("Transmitting: Action string: The most flexible way to send something to KNX. The command structure is: "),t("em",[e._v("@KNX: group_address,datapoint_type,value")]),e._v(". It is possible to use either a space, a comma or a number sign as separation tokens. The datapoint type is described later.")]),e._v(" "),t("li",[e._v("Receiving: Event Triggers: An event trigger can be used to listen to a defined KNX group address. If there is ANYTHING happening on this dedicated group address, an event will be raised.")]),e._v(" "),t("li",[e._v("Receiving: Output ports: The received value of a KNX group address will be interpreted by the given data point type, parsed to a string and sent out to the output ports")])]),e._v(" "),t("h2",{attrs:{id:"knx-datapoint-types"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#knx-datapoint-types"}},[e._v("#")]),e._v(" KNX datapoint types")]),e._v(" "),t("p",[e._v("KNX itself doesn’t provide any possibilty to get information on how to interpret received data. This is the point where you need the datapoint types. There are a few main types and some sub types. For example: "),t("em",[e._v("1.001")]),e._v(" is the datapoint type for a simple switch actuator/sensor. The input values are varying on the different datapoint types. For the switch example, the valid values are "),t("em",[e._v("on")]),e._v(" and "),t("em",[e._v("off")]),e._v(". The full list of all datatypes is provided by the ARE. If you want to receive a full list, you have to place the plugin in your ACS model, connect to the ARE and upload the model (even without any functionality). Afterwards, the full list of all currently supported datapoint types is available. Every list entry contains following information:")]),e._v(" "),t("ul",[t("li",[e._v("Description")]),e._v(" "),t("li",[e._v("[Minimum,Maximum value]")]),e._v(" "),t("li",[e._v("(Datapoint ID)")])]),e._v(" "),t("p",[e._v("The example of the light switch:"),t("br"),e._v(" "),t("em",[e._v("Switch[off,on] (1.001)")]),e._v(" The literal name for this datapoint type is “Switch” and its ID is 1.001. Because this is a boolean value, off and on are the only valid values. For float values, these given values are representing the minimum and the maximum value.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("actionString [string]:")]),e._v(' This port receives string commands for the KNX component. The commands have to be in the format “@KNX: group_address,datapoint_type,value”. The delimiters ‘,’, ‘#’ and ’ ’ are allowed. An example for a valid command is"@KNX:1/1/1,1.001,on". As a valid command is received by the input port, the value is sent to the KNX group address. The group addresses comply to the setup of the KNX network which can be configured with the ETS software.')]),e._v(" "),t("li",[t("strong",[e._v("slider[1-6] [double]:")]),e._v(" Input port for a double value which is converted to a given datapoint (Property: DPTSlider[1-6]) and sent to the given KNX group address (Property: groupAddressSlider[1-6]")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("data [1-6] [string]:")]),e._v(" These output ports are sending received data from the group addresses (Property: groupAddressOutput[1-6]). The data interpretation is controlled by the DPT (datapoint type, property: DPTOutput[1-6])")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("localIP [string]:")]),e._v(" The local IP address of the interface which can reach the KNXnetIP.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("KNXNetIP [string]:")]),e._v(" The destination IP address of the KNX gateway.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("NAT [boolean]:")]),e._v(" Enable NAT")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddress[1-6] [string]:")]),e._v(" (Event Listener) Specifies KNX group addresses for the [n] Event Listener e.g. “1/1/1”.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("dataValue[1-6] [string]:")]),e._v(" (Event Listener) Date value, which should be sent (triggered by the input event). The possible values are determined by the used DPT property (see the chapter on datapoint types)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("DPTEvent[1-6] [string/dropdown]:")]),e._v(" (Event Listener) Specifies the DPT (datapoint type) of the dataValue[1-6] which is sent to the KNX group address, triggered by the input event.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddressSlider[1-6] [string]:")]),e._v(" (Input port) Specifies KNX group addresses for the Slider[n].")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("DPTSlider[1-6] [string/dropdown]:")]),e._v(" (Input port) Determines the datapoint type corresponding to the sliders [1-6].")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddressTrigger[1-6] [string]:")]),e._v(" (Event Trigger) Specifies KNX group addresses for the Event Trigger [n]. The event is triggered if ANY action is happening on the given group address. If you need additional data processing, please use the output ports and process the received data values.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("groupAddressOutput[1-6] [string]:")]),e._v(" (Output port) Specifies the KNX group adresses, which are sent to the output ports. If there is anything happening on the given group adresses, the corresponding data is sent to the output ports.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("DPTOutput[1-6] [string/dropdown]:")]),e._v(" (Output port) Determines the datapoint type for the output port. The received data interpretation is defined by the DPTOutput property.")])])]),e._v(" "),t("h2",{attrs:{id:"event-listener"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener"}},[e._v("#")]),e._v(" Event Listener")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("send[1-6]:")]),e._v(" Each time an event is triggered, the corresponding KNX command which is specified in the plugin properties (groupAddress[1-6],dataValue[1-6],DPTEvent[1-6]), is issued.")]),e._v(" "),t("li",[t("strong",[e._v("read[1-6]:")]),e._v(" Trigger a read command on the output port. The settings for the group address and the DPT are the same as for the output ports (groupAddressOutput[1-6], DPTOutput[1-6]).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger"}},[e._v("#")]),e._v(" Event Trigger")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event_out_[1-6]:")]),e._v(" When there is any activity on the given KNX group address, set by the properties (groupAddressTrigger[1-6]) an event is raised by this plugin.")])])])}),[],!1,null,null,null);t.default=s.exports},639:function(e,t,r){e.exports=r.p+"assets/img/knx.98c3039f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/153.b2a56dd3.js b/assets/js/153.414a698e.js similarity index 92% rename from assets/js/153.b2a56dd3.js rename to assets/js/153.414a698e.js index 17ee07bfc3..48792a84ae 100644 --- a/assets/js/153.b2a56dd3.js +++ b/assets/js/153.414a698e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{1089:function(e,t,i){"use strict";i.r(t);var n=i(2),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"linewriter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linewriter"}},[e._v("#")]),e._v(" LineWriter")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This component writes lines from an input port to a text file.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(639),alt:"Screenshot: LineWriter plugin",title:"Screenshot: LineWriter plugin"}})]),e._v(" "),t("p",[e._v("ButtonGrid plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("actLine (string):")]),e._v(" an incoming string is stored into the text file.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("fileName [string]:")]),e._v(" The full path and file name of the text file to be written. The path can be given as absolute path or relative to the ARE executable’s directory")]),e._v(" "),t("li",[t("strong",[e._v("addTimeToFileName [boolean]:")]),e._v(" If selected, a timestamp will be added to the filename, to avoid overwriting files")]),e._v(" "),t("li",[t("strong",[e._v("titleCaption [string]:")]),e._v(" if not empty, this string parameter will be used as first line in the file (e.g. to create table caption in a csv file)")]),e._v(" "),t("li",[t("strong",[e._v("timestamp [integer, combobox selection]:")]),e._v(" The type of timestamp which will be added befor each line (currently either “no timestamp” or “milliseconds” can be chosen).")]),e._v(" "),t("li",[t("strong",[e._v("lineEndMark [integer, combobox selection]:")]),e._v(" The type of line end marker which will be added to each line (currently either “systemDefault”, “newline” or “carriage-return + newline” can be chosen).")]),e._v(" "),t("li",[t("strong",[e._v("append [boolean]:")]),e._v(" if selected, the lines will be appended to an existing file.")])])])}),[],!1,null,null,null);t.default=r.exports},639:function(e,t,i){e.exports=i.p+"assets/img/linewriter.a62b3dc8.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{1091:function(e,t,i){"use strict";i.r(t);var n=i(2),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"linewriter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linewriter"}},[e._v("#")]),e._v(" LineWriter")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This component writes lines from an input port to a text file.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(640),alt:"Screenshot: LineWriter plugin",title:"Screenshot: LineWriter plugin"}})]),e._v(" "),t("p",[e._v("ButtonGrid plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("actLine (string):")]),e._v(" an incoming string is stored into the text file.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("fileName [string]:")]),e._v(" The full path and file name of the text file to be written. The path can be given as absolute path or relative to the ARE executable’s directory")]),e._v(" "),t("li",[t("strong",[e._v("addTimeToFileName [boolean]:")]),e._v(" If selected, a timestamp will be added to the filename, to avoid overwriting files")]),e._v(" "),t("li",[t("strong",[e._v("titleCaption [string]:")]),e._v(" if not empty, this string parameter will be used as first line in the file (e.g. to create table caption in a csv file)")]),e._v(" "),t("li",[t("strong",[e._v("timestamp [integer, combobox selection]:")]),e._v(" The type of timestamp which will be added befor each line (currently either “no timestamp” or “milliseconds” can be chosen).")]),e._v(" "),t("li",[t("strong",[e._v("lineEndMark [integer, combobox selection]:")]),e._v(" The type of line end marker which will be added to each line (currently either “systemDefault”, “newline” or “carriage-return + newline” can be chosen).")]),e._v(" "),t("li",[t("strong",[e._v("append [boolean]:")]),e._v(" if selected, the lines will be appended to an existing file.")])])])}),[],!1,null,null,null);t.default=r.exports},640:function(e,t,i){e.exports=i.p+"assets/img/linewriter.a62b3dc8.jpg"}}]); \ No newline at end of file diff --git a/assets/js/154.5be43710.js b/assets/js/154.f9548897.js similarity index 98% rename from assets/js/154.5be43710.js rename to assets/js/154.f9548897.js index 278eb28109..7be0393048 100644 --- a/assets/js/154.5be43710.js +++ b/assets/js/154.f9548897.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[154],{1092:function(e,t,i){"use strict";i.r(t);var a=i(2),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"mediaplayer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mediaplayer"}},[e._v("#")]),e._v(" MediaPlayer")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This component allows to play media files supported by the local system. The supported file type depends on the installed media CODEC, but generally all media formats supported by the VLC player should work. Please note that the VLC player (32 bit version) should be installed in the default location: C:/Program Files/VideoLan or C:/Program Files (x86)/VideoLan")]),e._v(" "),t("p",[t("img",{attrs:{src:i(643),alt:"Screenshot: MediaPlayer plugin",title:"Screenshot: MediaPlayer plugin"}})]),e._v(" "),t("p",[e._v("MediaPlayer plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename [string]:")]),e._v(" Input port for the mediafile name. The file must be present in the filesystem of the ARE. Sending to this port will change the media file.")]),e._v(" "),t("li",[t("strong",[e._v("position [double]:")]),e._v(" Position in the media file (0-100%) - Sending to this port will set the position in the media file.")]),e._v(" "),t("li",[t("strong",[e._v("rate [double]:")]),e._v(" The playback speed of the media file (0-500%) - Sending to this port will change the playback speed.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pos [double]:")]),e._v(" The current playback position in percent.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("play:")]),e._v(" Triggering this event will start (or resume) the mediafile playback.")]),e._v(" "),t("li",[t("strong",[e._v("pause:")]),e._v(" Triggering this event will pause the mediafile playback.")]),e._v(" "),t("li",[t("strong",[e._v("stop:")]),e._v(" Triggering this event will stop the mediafile playback.")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" Triggering this event will reset the mediafile playback to position 0.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename [string]:")]),e._v(" Initial mediafile name. The file must be present in the filesystem the ARE. This is a dynamic property: a synchronized ARE can suggest available files which are located in the data/videos and data/music subfolders of the ARE.")]),e._v(" "),t("li",[t("strong",[e._v("autoplay [boolean]:")]),e._v(" if selected, the file will play automatically.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")]),e._v(" "),t("li",[t("strong",[e._v("pathToVLC [string]:")]),e._v(" path to the VLC installation (32-bit version needed).")])])])}),[],!1,null,null,null);t.default=s.exports},643:function(e,t,i){e.exports=i.p+"assets/img/mediaplayer.356cc94f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[154],{1093:function(e,t,i){"use strict";i.r(t);var a=i(2),s=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"mediaplayer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mediaplayer"}},[e._v("#")]),e._v(" MediaPlayer")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This component allows to play media files supported by the local system. The supported file type depends on the installed media CODEC, but generally all media formats supported by the VLC player should work. Please note that the VLC player (32 bit version) should be installed in the default location: C:/Program Files/VideoLan or C:/Program Files (x86)/VideoLan")]),e._v(" "),t("p",[t("img",{attrs:{src:i(643),alt:"Screenshot: MediaPlayer plugin",title:"Screenshot: MediaPlayer plugin"}})]),e._v(" "),t("p",[e._v("MediaPlayer plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename [string]:")]),e._v(" Input port for the mediafile name. The file must be present in the filesystem of the ARE. Sending to this port will change the media file.")]),e._v(" "),t("li",[t("strong",[e._v("position [double]:")]),e._v(" Position in the media file (0-100%) - Sending to this port will set the position in the media file.")]),e._v(" "),t("li",[t("strong",[e._v("rate [double]:")]),e._v(" The playback speed of the media file (0-500%) - Sending to this port will change the playback speed.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pos [double]:")]),e._v(" The current playback position in percent.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("play:")]),e._v(" Triggering this event will start (or resume) the mediafile playback.")]),e._v(" "),t("li",[t("strong",[e._v("pause:")]),e._v(" Triggering this event will pause the mediafile playback.")]),e._v(" "),t("li",[t("strong",[e._v("stop:")]),e._v(" Triggering this event will stop the mediafile playback.")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" Triggering this event will reset the mediafile playback to position 0.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename [string]:")]),e._v(" Initial mediafile name. The file must be present in the filesystem the ARE. This is a dynamic property: a synchronized ARE can suggest available files which are located in the data/videos and data/music subfolders of the ARE.")]),e._v(" "),t("li",[t("strong",[e._v("autoplay [boolean]:")]),e._v(" if selected, the file will play automatically.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")]),e._v(" "),t("li",[t("strong",[e._v("pathToVLC [string]:")]),e._v(" path to the VLC installation (32-bit version needed).")])])])}),[],!1,null,null,null);t.default=s.exports},643:function(e,t,i){e.exports=i.p+"assets/img/mediaplayer.356cc94f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/155.cf1f7c31.js b/assets/js/155.bb6e1ba6.js similarity index 97% rename from assets/js/155.cf1f7c31.js rename to assets/js/155.bb6e1ba6.js index 14577a1664..2db4822680 100644 --- a/assets/js/155.cf1f7c31.js +++ b/assets/js/155.bb6e1ba6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[155],{1093:function(e,t,s){"use strict";s.r(t);var i=s(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("The ModelSwitcher component allows to switch from the running model to another model which will be deployed and started. This makes it possible to build menus for different use-cases or switch from one use-case to another.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(644),alt:"Screenshot: ModelSwitcher plugin",title:"Screenshot: ModelSwitcher plugin"}})]),e._v(" "),t("p",[e._v("ModelSwitcher plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("modelName [string]:")]),e._v(" The name of the model (including extension, for example “CameraMouse_sensitive.acs”. The switch is performed as soon as the model name is received. The model must exist in the ARE/models folder of the runtime environment.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("switchModel:")]),e._v(" An incoming event on this port will switch to the default model.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("model[string]:")]),e._v(" A fixed model name can be give here. This model must exist in the ARE/models folder of the runtime environment. The model switch is performed when the switchModel event is received.")])])])}),[],!1,null,null,null);t.default=r.exports},644:function(e,t,s){e.exports=s.p+"assets/img/modelswitcher.9f5158c5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[155],{1094:function(e,t,s){"use strict";s.r(t);var i=s(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("The ModelSwitcher component allows to switch from the running model to another model which will be deployed and started. This makes it possible to build menus for different use-cases or switch from one use-case to another.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(644),alt:"Screenshot: ModelSwitcher plugin",title:"Screenshot: ModelSwitcher plugin"}})]),e._v(" "),t("p",[e._v("ModelSwitcher plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("modelName [string]:")]),e._v(" The name of the model (including extension, for example “CameraMouse_sensitive.acs”. The switch is performed as soon as the model name is received. The model must exist in the ARE/models folder of the runtime environment.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("switchModel:")]),e._v(" An incoming event on this port will switch to the default model.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("model[string]:")]),e._v(" A fixed model name can be give here. This model must exist in the ARE/models folder of the runtime environment. The model switch is performed when the switchModel event is received.")])])])}),[],!1,null,null,null);t.default=r.exports},644:function(e,t,s){e.exports=s.p+"assets/img/modelswitcher.9f5158c5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/156.4b65b291.js b/assets/js/156.82b436e4.js similarity index 99% rename from assets/js/156.4b65b291.js rename to assets/js/156.82b436e4.js index 629098248a..815e48310d 100644 --- a/assets/js/156.4b65b291.js +++ b/assets/js/156.82b436e4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[156],{1095:function(e,t,o){"use strict";o.r(t);var i=o(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"mouse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mouse"}},[e._v("#")]),e._v(" Mouse")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Input Device Emulation)")]),e._v(" "),t("p",[e._v("The Mouse component allows mouse cursor positioning and clicking on the computer the ARE is running on (by software emulation). The mouse x-position, y-position, press/release actions of three mouse buttons and mouse-wheel movements can be controlled via desired input values and event triggers.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(647),alt:"Screenshot: Mouse plugin",title:"Screenshot: Mouse plugin"}})]),e._v(" "),t("p",[e._v("Mouse plugin")]),e._v(" "),t("p",[e._v("**Please Note:**The mouse emulation on "),t("strong",[e._v("Windows 7")]),e._v(" does not always work as expected due to User Account Control (UAC) settings. Especially when you want to use the Windows 7 On-Screen-Keyboard dragging the keyboard does not work. To troubleshoot "),t("a",{attrs:{href:"http://windows.microsoft.com/en-au/windows/turn-user-account-control-on-off#1TC=windows-7",target:"_blank",rel:"noopener noreferrer"}},[e._v("turn off the User Account Control (UAC)"),t("OutboundLink")],1),e._v(" - change the level to “Never notify”")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mouseX [double]:")]),e._v(" The desired X-Position of the mouse. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("mouseY [double]:")]),e._v(" The desired Y-Position of the mouse. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("action [string]:")]),e._v(" Input port for a command string. This command string allows to modify the action of the next left mouse click - it can be set to trigger other types of mouse clicks. A command string may be composed of several items that are delimited by ‘,’ or ’ '. Following command strings are accepted:\n"),t("ul",[t("li",[t("em",[e._v("“@MOUSE:nextclick,right”:")]),e._v(" next left click event will create a right mouse button click.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,double”:")]),e._v(" next left click event will create a double click.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,middle”:")]),e._v(" next left click event will create a middle button click")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,drag”:")]),e._v(" next left click event will hold the left mouse button.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,release”:")]),e._v(" next left click event will release the left mouse button.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:action,enable”:")]),e._v(" enables all mouse actions.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:action,disable”:")]),e._v(" disables all mouse actions.")]),e._v(" "),t("li",[t("em",[e._v('"@MOUSE:action,toggle:')]),e._v(" enables / disables all mouse actions.")])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("outX [double]:")]),e._v(" the current absolute x-value of the mouse, updated every time the mouse position is updated.")]),e._v(" "),t("li",[t("strong",[e._v("outY [double]:")]),e._v(" the current absolute y-value of the mouse, updated every time the mouse position is updated.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("leftClick:")]),e._v(" An incoming event at this port creates a mouse button click. A left mouse button click will be generated, unless a valid “nextclick…” command has been received at the cmd input which changed the click type (see above).")]),e._v(" "),t("li",[t("strong",[e._v("middleClick:")]),e._v(" A click with the middle mouse button is generated.")]),e._v(" "),t("li",[t("strong",[e._v("rightClick:")]),e._v(" A click with the right mouse button is generated.")]),e._v(" "),t("li",[t("strong",[e._v("doubleClick:")]),e._v(" A double click with the left mouse button is generated.")]),e._v(" "),t("li",[t("strong",[e._v("dragPress:")]),e._v(" The left mouse button is pressed (but not released again).")]),e._v(" "),t("li",[t("strong",[e._v("dragRelease:")]),e._v(" The left mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("wheelUp:")]),e._v(" The mouse wheel is turned one position from the user.")]),e._v(" "),t("li",[t("strong",[e._v("wheelDown:")]),e._v(" The mouse wheel is turned one position to the user.")]),e._v(" "),t("li",[t("strong",[e._v("activate:")]),e._v(" enables all mouse actions.")]),e._v(" "),t("li",[t("strong",[e._v("deactivate:")]),e._v(" disables all mouse actions.")]),e._v(" "),t("li",[t("strong",[e._v("toggle:")]),e._v(" enables / disables all mouse actions.")]),e._v(" "),t("li",[t("strong",[e._v("absolutePosition:")]),e._v(" after this event is triggered the incoming values for mouseX and mouseY are interpreted as absolute movement information")]),e._v(" "),t("li",[t("strong",[e._v("relativePosition:")]),e._v(" after this event is triggered the incoming values for mouseX and mouseY are interpreted as relative movement information")]),e._v(" "),t("li",[t("strong",[e._v("nextClickRight")]),e._v(" next left click event will create a right mouse button click.")]),e._v(" "),t("li",[t("strong",[e._v("nextClickDouble")]),e._v(" next left click event will create a double click.")]),e._v(" "),t("li",[t("strong",[e._v("nextClickMiddle")]),e._v("next left click event will create a middle button click")]),e._v(" "),t("li",[t("strong",[e._v("nextClickDrag")]),e._v(" next left click event will hold the left mouse button.")]),e._v(" "),t("li",[t("strong",[e._v("nextClickRelease")]),e._v(" next left click event will release the left mouse button.")]),e._v(" "),t("li",[t("strong",[e._v("moveToLastStable:")]),e._v(" moves the cursor to last stable position (where no movement was made).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enableMouse [boolean]:")]),e._v(" The value of this property specifies if all mouse actions are bypassed (false) or enabled (true).")]),e._v(" "),t("li",[t("strong",[e._v("absolutePosition [boolean]:")]),e._v(" If this property value is set to false, incoming values at the mouseX and mouseY input ports are interpreted as relative movement information. The values are summed up (integrated) to calculate the absolute position. If the property value is set to true, the values of the input ports are treated as absolute x/y positions.")]),e._v(" "),t("li",[t("strong",[e._v("startCentered [boolean]:")]),e._v(" If true the mouse starts in the middle of the screen, if false starting the starting position is the current position.")]),e._v(" "),t("li",[t("strong",[e._v("xMin [integer]:")]),e._v(" The minimum value for the X-coordinate (the mouse will not move farther to the left).")]),e._v(" "),t("li",[t("strong",[e._v("xMax [integer]:")]),e._v(" The maximum value for the X-coordinate (the mouse will not move farther to the right). "),t("strong",[e._v("If the xMax property is set to 0, the horizontal screen resoltion will be assumed as maximum x-position for the mouse cursor.")])]),e._v(" "),t("li",[t("strong",[e._v("yMin [integer]:")]),e._v(" The minimum value for the Y-coordinate (the mouse will not move farther up).")]),e._v(" "),t("li",[t("strong",[e._v("yMax [integer]:")]),e._v(" The maximum value for the Y-coordinate (the mouse will not move farther down) "),t("strong",[e._v("If the yMax property is set to 0, the vertical screen resoltion will be assumed as maximum y-position for the mouse cursor.")])])])])}),[],!1,null,null,null);t.default=s.exports},647:function(e,t,o){e.exports=o.p+"assets/img/mouse.253fc282.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[156],{1096:function(e,t,o){"use strict";o.r(t);var i=o(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"mouse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mouse"}},[e._v("#")]),e._v(" Mouse")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Input Device Emulation)")]),e._v(" "),t("p",[e._v("The Mouse component allows mouse cursor positioning and clicking on the computer the ARE is running on (by software emulation). The mouse x-position, y-position, press/release actions of three mouse buttons and mouse-wheel movements can be controlled via desired input values and event triggers.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(647),alt:"Screenshot: Mouse plugin",title:"Screenshot: Mouse plugin"}})]),e._v(" "),t("p",[e._v("Mouse plugin")]),e._v(" "),t("p",[e._v("**Please Note:**The mouse emulation on "),t("strong",[e._v("Windows 7")]),e._v(" does not always work as expected due to User Account Control (UAC) settings. Especially when you want to use the Windows 7 On-Screen-Keyboard dragging the keyboard does not work. To troubleshoot "),t("a",{attrs:{href:"http://windows.microsoft.com/en-au/windows/turn-user-account-control-on-off#1TC=windows-7",target:"_blank",rel:"noopener noreferrer"}},[e._v("turn off the User Account Control (UAC)"),t("OutboundLink")],1),e._v(" - change the level to “Never notify”")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mouseX [double]:")]),e._v(" The desired X-Position of the mouse. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("mouseY [double]:")]),e._v(" The desired Y-Position of the mouse. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("action [string]:")]),e._v(" Input port for a command string. This command string allows to modify the action of the next left mouse click - it can be set to trigger other types of mouse clicks. A command string may be composed of several items that are delimited by ‘,’ or ’ '. Following command strings are accepted:\n"),t("ul",[t("li",[t("em",[e._v("“@MOUSE:nextclick,right”:")]),e._v(" next left click event will create a right mouse button click.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,double”:")]),e._v(" next left click event will create a double click.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,middle”:")]),e._v(" next left click event will create a middle button click")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,drag”:")]),e._v(" next left click event will hold the left mouse button.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:nextclick,release”:")]),e._v(" next left click event will release the left mouse button.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:action,enable”:")]),e._v(" enables all mouse actions.")]),e._v(" "),t("li",[t("em",[e._v("“@MOUSE:action,disable”:")]),e._v(" disables all mouse actions.")]),e._v(" "),t("li",[t("em",[e._v('"@MOUSE:action,toggle:')]),e._v(" enables / disables all mouse actions.")])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("outX [double]:")]),e._v(" the current absolute x-value of the mouse, updated every time the mouse position is updated.")]),e._v(" "),t("li",[t("strong",[e._v("outY [double]:")]),e._v(" the current absolute y-value of the mouse, updated every time the mouse position is updated.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("leftClick:")]),e._v(" An incoming event at this port creates a mouse button click. A left mouse button click will be generated, unless a valid “nextclick…” command has been received at the cmd input which changed the click type (see above).")]),e._v(" "),t("li",[t("strong",[e._v("middleClick:")]),e._v(" A click with the middle mouse button is generated.")]),e._v(" "),t("li",[t("strong",[e._v("rightClick:")]),e._v(" A click with the right mouse button is generated.")]),e._v(" "),t("li",[t("strong",[e._v("doubleClick:")]),e._v(" A double click with the left mouse button is generated.")]),e._v(" "),t("li",[t("strong",[e._v("dragPress:")]),e._v(" The left mouse button is pressed (but not released again).")]),e._v(" "),t("li",[t("strong",[e._v("dragRelease:")]),e._v(" The left mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("wheelUp:")]),e._v(" The mouse wheel is turned one position from the user.")]),e._v(" "),t("li",[t("strong",[e._v("wheelDown:")]),e._v(" The mouse wheel is turned one position to the user.")]),e._v(" "),t("li",[t("strong",[e._v("activate:")]),e._v(" enables all mouse actions.")]),e._v(" "),t("li",[t("strong",[e._v("deactivate:")]),e._v(" disables all mouse actions.")]),e._v(" "),t("li",[t("strong",[e._v("toggle:")]),e._v(" enables / disables all mouse actions.")]),e._v(" "),t("li",[t("strong",[e._v("absolutePosition:")]),e._v(" after this event is triggered the incoming values for mouseX and mouseY are interpreted as absolute movement information")]),e._v(" "),t("li",[t("strong",[e._v("relativePosition:")]),e._v(" after this event is triggered the incoming values for mouseX and mouseY are interpreted as relative movement information")]),e._v(" "),t("li",[t("strong",[e._v("nextClickRight")]),e._v(" next left click event will create a right mouse button click.")]),e._v(" "),t("li",[t("strong",[e._v("nextClickDouble")]),e._v(" next left click event will create a double click.")]),e._v(" "),t("li",[t("strong",[e._v("nextClickMiddle")]),e._v("next left click event will create a middle button click")]),e._v(" "),t("li",[t("strong",[e._v("nextClickDrag")]),e._v(" next left click event will hold the left mouse button.")]),e._v(" "),t("li",[t("strong",[e._v("nextClickRelease")]),e._v(" next left click event will release the left mouse button.")]),e._v(" "),t("li",[t("strong",[e._v("moveToLastStable:")]),e._v(" moves the cursor to last stable position (where no movement was made).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enableMouse [boolean]:")]),e._v(" The value of this property specifies if all mouse actions are bypassed (false) or enabled (true).")]),e._v(" "),t("li",[t("strong",[e._v("absolutePosition [boolean]:")]),e._v(" If this property value is set to false, incoming values at the mouseX and mouseY input ports are interpreted as relative movement information. The values are summed up (integrated) to calculate the absolute position. If the property value is set to true, the values of the input ports are treated as absolute x/y positions.")]),e._v(" "),t("li",[t("strong",[e._v("startCentered [boolean]:")]),e._v(" If true the mouse starts in the middle of the screen, if false starting the starting position is the current position.")]),e._v(" "),t("li",[t("strong",[e._v("xMin [integer]:")]),e._v(" The minimum value for the X-coordinate (the mouse will not move farther to the left).")]),e._v(" "),t("li",[t("strong",[e._v("xMax [integer]:")]),e._v(" The maximum value for the X-coordinate (the mouse will not move farther to the right). "),t("strong",[e._v("If the xMax property is set to 0, the horizontal screen resoltion will be assumed as maximum x-position for the mouse cursor.")])]),e._v(" "),t("li",[t("strong",[e._v("yMin [integer]:")]),e._v(" The minimum value for the Y-coordinate (the mouse will not move farther up).")]),e._v(" "),t("li",[t("strong",[e._v("yMax [integer]:")]),e._v(" The maximum value for the Y-coordinate (the mouse will not move farther down) "),t("strong",[e._v("If the yMax property is set to 0, the vertical screen resoltion will be assumed as maximum y-position for the mouse cursor.")])])])])}),[],!1,null,null,null);t.default=s.exports},647:function(e,t,o){e.exports=o.p+"assets/img/mouse.253fc282.jpg"}}]); \ No newline at end of file diff --git a/assets/js/157.0a2af865.js b/assets/js/157.608e39b0.js similarity index 97% rename from assets/js/157.0a2af865.js rename to assets/js/157.608e39b0.js index 9c167a035a..23cab0a2e7 100644 --- a/assets/js/157.0a2af865.js +++ b/assets/js/157.608e39b0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[157],{1097:function(t,e,r){"use strict";r.r(e);var s=r(2),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Input Device Emulation)")]),t._v(" "),e("p",[t._v("The MousecursorIcon plugin can be used to modifiy the current default system mouse cursor icon. A number of icon file names can be given as properties and activated by corresponding event listener ports. Currently, only the default system cursor can be modified. The cursor is restored to the default arrow when the model is stopped.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(649),alt:"Screenshot: MousecursorIcon plugin",title:"Screenshot: MousecursorIcon plugin"}})]),t._v(" "),e("p",[t._v("MousecursorIcon plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("iconName [strig]:")]),t._v(" This input port accepts a filename, the plugin tries to load a cursor file with this name from the local plugin working directory.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description:")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setIcon1 - setIcon9:")]),t._v(" an incoming events sets the given cursor as new system cursor.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("iconName1 - iconName9 [string]:")]),t._v(" 9 slots for cursor file names.")])])])}),[],!1,null,null,null);e.default=o.exports},649:function(t,e,r){t.exports=r.p+"assets/img/mousecursoricon.8633b482.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[157],{1098:function(t,e,r){"use strict";r.r(e);var s=r(2),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Input Device Emulation)")]),t._v(" "),e("p",[t._v("The MousecursorIcon plugin can be used to modifiy the current default system mouse cursor icon. A number of icon file names can be given as properties and activated by corresponding event listener ports. Currently, only the default system cursor can be modified. The cursor is restored to the default arrow when the model is stopped.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(649),alt:"Screenshot: MousecursorIcon plugin",title:"Screenshot: MousecursorIcon plugin"}})]),t._v(" "),e("p",[t._v("MousecursorIcon plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("iconName [strig]:")]),t._v(" This input port accepts a filename, the plugin tries to load a cursor file with this name from the local plugin working directory.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description:")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setIcon1 - setIcon9:")]),t._v(" an incoming events sets the given cursor as new system cursor.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("iconName1 - iconName9 [string]:")]),t._v(" 9 slots for cursor file names.")])])])}),[],!1,null,null,null);e.default=o.exports},649:function(t,e,r){t.exports=r.p+"assets/img/mousecursoricon.8633b482.jpg"}}]); \ No newline at end of file diff --git a/assets/js/158.54077b19.js b/assets/js/158.cecdc754.js similarity index 98% rename from assets/js/158.54077b19.js rename to assets/js/158.cecdc754.js index 37479b8e0a..78594dac99 100644 --- a/assets/js/158.54077b19.js +++ b/assets/js/158.cecdc754.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[158],{1096:function(t,e,r){"use strict";r.r(e);var o=r(2),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"net-connection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#net-connection"}},[t._v("#")]),t._v(" Net Connection")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Communication)")]),t._v(" "),e("p",[t._v("This component provides interface to pass the data through the network. It allows to pass data to the another NetConnection component or to the application which uses the NetConnection Native ASAPI library.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(648),alt:"Screenshot: NetConnection plugin",title:"Screenshot: NetConnection plugin"}})]),t._v(" "),e("p",[t._v("NetConnection plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("integerInputPort1…integerInputPort5 [integer]:")]),t._v(" The integer values which are passed to these ports are sent to the remote receiver.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("doubleInputPort1…doubleInputPort5 [double]:")]),t._v(" The double values which are passed to these ports are sent to the remote receiver.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("stringInputPort1…stringInputPort5 [string]:")]),t._v(" The text values which are passed to these ports are sent to the remote receiver.")])])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("integerOutputPort1…integerOutputPort5 [integer]:")]),t._v(" The output ports for the integer values received from the remote sender.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("doubleOutputPort1…doubleOutputPort5 [double]:")]),t._v(" The output ports for the double values received from the remote sender.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("stringOutputPort1…stringOutputPort5 [string]:")]),t._v(" The output ports for the text values received from the remote sender.")])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputEvent1…inputEvent10:")]),t._v(" The events which are sent to the remote receiver.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputEvent1…outputEvent10:")]),t._v(" The events received from the remote sender.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("connectionType [integer]:")]),t._v(" Describes connection mode: client or server.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("IP [string]:")]),t._v(" The IP address of the remote server.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("port [integer]:")]),t._v(" Port used in IP/TCP connection.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("multisession [boolean]:")]),t._v(" If the plugin is set to work as the server and this property is set, the plugin can connect to more than one client.")])])])])}),[],!1,null,null,null);e.default=n.exports},648:function(t,e,r){t.exports=r.p+"assets/img/netconnection.4b305846.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[158],{1097:function(t,e,r){"use strict";r.r(e);var o=r(2),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"net-connection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#net-connection"}},[t._v("#")]),t._v(" Net Connection")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Communication)")]),t._v(" "),e("p",[t._v("This component provides interface to pass the data through the network. It allows to pass data to the another NetConnection component or to the application which uses the NetConnection Native ASAPI library.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(648),alt:"Screenshot: NetConnection plugin",title:"Screenshot: NetConnection plugin"}})]),t._v(" "),e("p",[t._v("NetConnection plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("integerInputPort1…integerInputPort5 [integer]:")]),t._v(" The integer values which are passed to these ports are sent to the remote receiver.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("doubleInputPort1…doubleInputPort5 [double]:")]),t._v(" The double values which are passed to these ports are sent to the remote receiver.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("stringInputPort1…stringInputPort5 [string]:")]),t._v(" The text values which are passed to these ports are sent to the remote receiver.")])])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("integerOutputPort1…integerOutputPort5 [integer]:")]),t._v(" The output ports for the integer values received from the remote sender.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("doubleOutputPort1…doubleOutputPort5 [double]:")]),t._v(" The output ports for the double values received from the remote sender.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("stringOutputPort1…stringOutputPort5 [string]:")]),t._v(" The output ports for the text values received from the remote sender.")])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputEvent1…inputEvent10:")]),t._v(" The events which are sent to the remote receiver.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputEvent1…outputEvent10:")]),t._v(" The events received from the remote sender.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("connectionType [integer]:")]),t._v(" Describes connection mode: client or server.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("IP [string]:")]),t._v(" The IP address of the remote server.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("port [integer]:")]),t._v(" Port used in IP/TCP connection.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("multisession [boolean]:")]),t._v(" If the plugin is set to work as the server and this property is set, the plugin can connect to more than one client.")])])])])}),[],!1,null,null,null);e.default=n.exports},648:function(t,e,r){t.exports=r.p+"assets/img/netconnection.4b305846.jpg"}}]); \ No newline at end of file diff --git a/assets/js/159.e6ef3b94.js b/assets/js/159.7bdcbd33.js similarity index 98% rename from assets/js/159.e6ef3b94.js rename to assets/js/159.7bdcbd33.js index e5da350368..2d432d9428 100644 --- a/assets/js/159.e6ef3b94.js +++ b/assets/js/159.7bdcbd33.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[159],{1098:function(e,t,s){"use strict";s.r(t);var r=s(2),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"osc-out-client"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#osc-out-client"}},[e._v("#")]),e._v(" Osc Out Client")]),e._v(" "),t("p",[e._v("Component Type: actuator (Subcategory: Communication)")]),e._v(" "),t("p",[e._v("The OscOutClient plugin enables the ARE to broadcast messages using the OpenSoundControl (OSC) protocol. This plugin utilizes the NetUtil java library (http://www.sciss.de/netutil/) for the OSC implementation, it is ©opyrighted 2004-2011 by Hanns Holger Rutz and released under the GNU Lesser General Public License.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(650),alt:"Screenshot: OscServer plugin",title:"Screenshot: OscServer plugin"}})]),e._v(" "),t("p",[e._v("OscOutClient plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("Nothing, works sand-alone within ARE")]),e._v(" "),t("li",[e._v("Check your firewall configuration and network settings to ensure that OSC messages are not blocked.")])]),e._v(" "),t("h2",{attrs:{id:"functional-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-description"}},[e._v("#")]),e._v(" Functional Description")]),e._v(" "),t("p",[e._v("The OscOutClient collects data form the inputs CH1-4 and assamble it to one OSC message with 4 arguments. The address for the OSC channel is set by the property AddressCh1. Furthermore the plugin has a StringIN input port. If the plugin receives a string it broadcast one OSC message with one string argument. The address for the string OSC channel is set by the property AddressStringCh.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CH[1-4] [double]:")]),e._v(" Input port for the data, eg. a oszilloscope or any other double value.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Port [integer]:")]),e._v(" This value specifies the OscOutClient port.")]),e._v(" "),t("li",[t("strong",[e._v("PeerAddress [string]:")]),e._v(" Specifies the IP where the OSC server is listening.")]),e._v(" "),t("li",[t("strong",[e._v("AddressCH1 [string]:")]),e._v(" This value specifies the OSC data output address e.g. “/path/to/receiver/accxyz”.")]),e._v(" "),t("li",[t("strong",[e._v("AddressStringCh [string]:")]),e._v(" This value specifies the OSC string output address.")])]),e._v(" "),t("h2",{attrs:{id:"referred-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#referred-plugins"}},[e._v("#")]),e._v(" Referred Plugins")]),e._v(" "),t("ul",[t("li",[e._v("OscServer")]),e._v(" "),t("li",[e._v("OpenVibe")]),e._v(" "),t("li",[e._v("OscGestureFollower")])])])}),[],!1,null,null,null);t.default=i.exports},650:function(e,t,s){e.exports=s.p+"assets/img/oscoutclient.dae373d7.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[159],{1099:function(e,t,s){"use strict";s.r(t);var r=s(2),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"osc-out-client"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#osc-out-client"}},[e._v("#")]),e._v(" Osc Out Client")]),e._v(" "),t("p",[e._v("Component Type: actuator (Subcategory: Communication)")]),e._v(" "),t("p",[e._v("The OscOutClient plugin enables the ARE to broadcast messages using the OpenSoundControl (OSC) protocol. This plugin utilizes the NetUtil java library (http://www.sciss.de/netutil/) for the OSC implementation, it is ©opyrighted 2004-2011 by Hanns Holger Rutz and released under the GNU Lesser General Public License.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(650),alt:"Screenshot: OscServer plugin",title:"Screenshot: OscServer plugin"}})]),e._v(" "),t("p",[e._v("OscOutClient plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("Nothing, works sand-alone within ARE")]),e._v(" "),t("li",[e._v("Check your firewall configuration and network settings to ensure that OSC messages are not blocked.")])]),e._v(" "),t("h2",{attrs:{id:"functional-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-description"}},[e._v("#")]),e._v(" Functional Description")]),e._v(" "),t("p",[e._v("The OscOutClient collects data form the inputs CH1-4 and assamble it to one OSC message with 4 arguments. The address for the OSC channel is set by the property AddressCh1. Furthermore the plugin has a StringIN input port. If the plugin receives a string it broadcast one OSC message with one string argument. The address for the string OSC channel is set by the property AddressStringCh.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CH[1-4] [double]:")]),e._v(" Input port for the data, eg. a oszilloscope or any other double value.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Port [integer]:")]),e._v(" This value specifies the OscOutClient port.")]),e._v(" "),t("li",[t("strong",[e._v("PeerAddress [string]:")]),e._v(" Specifies the IP where the OSC server is listening.")]),e._v(" "),t("li",[t("strong",[e._v("AddressCH1 [string]:")]),e._v(" This value specifies the OSC data output address e.g. “/path/to/receiver/accxyz”.")]),e._v(" "),t("li",[t("strong",[e._v("AddressStringCh [string]:")]),e._v(" This value specifies the OSC string output address.")])]),e._v(" "),t("h2",{attrs:{id:"referred-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#referred-plugins"}},[e._v("#")]),e._v(" Referred Plugins")]),e._v(" "),t("ul",[t("li",[e._v("OscServer")]),e._v(" "),t("li",[e._v("OpenVibe")]),e._v(" "),t("li",[e._v("OscGestureFollower")])])])}),[],!1,null,null,null);t.default=i.exports},650:function(e,t,s){e.exports=s.p+"assets/img/oscoutclient.dae373d7.jpg"}}]); \ No newline at end of file diff --git a/assets/js/16.df2bbddd.js b/assets/js/16.13723687.js similarity index 99% rename from assets/js/16.df2bbddd.js rename to assets/js/16.13723687.js index 087d0afd85..2d2aecbaf6 100644 --- a/assets/js/16.df2bbddd.js +++ b/assets/js/16.13723687.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{1049:function(e,t,i){"use strict";i.r(t);var a=i(2),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"navigation-and-basic-functionality"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#navigation-and-basic-functionality"}},[e._v("#")]),e._v(" Navigation and basic functionality")]),e._v(" "),t("p",[e._v("This chapter is about general appearance, navigation and basic functionality of the different views in AsTeRICS Grid:")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#welcome-view"}},[e._v("Welcome view")]),e._v(": intial view shown at first usage")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#main---view"}},[e._v("Main view")]),e._v(": starting view showing the recently used grid and navigation")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#edit-view---editing-on"}},[e._v("Edit view")]),e._v(": view that allows modification of a grid")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("Manage grids view")]),e._v(": show all grids, create new ones, create a backup")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-dictionaries---view"}},[e._v("Manage dictionaries view")]),e._v(": show, edit and create new dictionaries")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#change-user---view"}},[e._v("Change user view")]),e._v(": switch users or login an existing one")],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"welcome-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#welcome-view"}},[e._v("#")]),e._v(" Welcome view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=5ffLB4a9APc&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=2&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("First Start"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("AsTeRICS Grid initially starts with a welcome view giving the choice between:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Use AsTeRICS Grid without registration:")]),e._v(" choose this option in order to create a local default user and directly start using AsTeRICS Grid.")]),e._v(" "),t("li",[t("strong",[e._v("Register now:")]),e._v(" choose this option in order to sign up for an online user, which makes it possible to synchronize the grids across devices.")])]),e._v(" "),t("p",[e._v("See "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#User"}},[e._v("Terms")]),e._v(" for more information about offline/online users.")],1),e._v(" "),t("h2",{attrs:{id:"main-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#main-view"}},[e._v("#")]),e._v(" “Main” - view")]),e._v(" "),t("p",[t("strong",[e._v("Videos on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=OU4sI2UcNUo&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=3&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Demo configuration"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=CK8Lv2bVr-g&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=4&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Fullscreen and lock mode"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("Once taken a decision in the welcome view AsTeRICS Grid subsequently starts in the “main view” which looks like Figure 1 (desktop view on the left, mobile view on the right):")]),e._v(" "),t("p",[t("img",{attrs:{src:i(500),alt:"main view"}}),e._v(" "),t("em",[e._v("Fig. 1: “Main” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The elements have this functionality:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the left navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Main")]),e._v(": navigate to the main view (currently shown)")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("Manage grids")])],1),e._v(": show all grids of the current user, add new ones or backup them to a file, manage the global grid")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-dictionaries---view"}},[e._v("Manage Dictionaries")])],1),e._v(": show all saved dictionaries, edit them or add new empty ones or import existing dictionaries")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#change-user---view"}},[e._v("Change User")])],1),e._v(": switch between saved users or log in an existing online user")]),e._v(" "),t("li",[t("strong",[e._v("Add online user")]),e._v(": register a new online user (synchronized across devices), see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/06_users.html"}},[e._v("Users")])],1),e._v(" "),t("li",[t("strong",[e._v("Add offline users")]),e._v(": add a new offline user (only for this device)")]),e._v(" "),t("li",[t("strong",[e._v("Settings")]),e._v(": select between general settings like application language and user settings like grid content language, voice or colors")]),e._v(" "),t("li",[t("strong",[e._v("About AsTeRICS Grid")]),e._v(": Show general information, links, contact address")]),e._v(" "),t("li",[t("strong",[e._v("Help")]),e._v(": find the AsTeRICS Grid user manuel, the ARASAAC tutorial or video tutorials")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html##edit-view---editing-on"}},[e._v("Editing on")])],1),e._v(": edit the layout of the grid, add new elements, actions for grid elements")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html"}},[e._v("Input options")])],1),e._v(": Options about how to select grid elements (e.g. click, hover, scanning)")]),e._v(" "),t("li",[t("strong",[e._v("Fullscreen")]),e._v(": hide the sidebar and the bar on the top, only showing the current grid")]),e._v(" "),t("li",[t("strong",[e._v("Lock")]),e._v(": lock the screen in order to prevent unintended input or changes beside using and navigating the grid")]),e._v(" "),t("li",[t("strong",[e._v("Grid")]),e._v(": demo grid consisting of some grid elements which are navigating to other grids if selected (possible for those which show the grey symbol in the upper right corner)")])]),e._v(" "),t("h2",{attrs:{id:"edit-view-editing-on"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#edit-view-editing-on"}},[e._v("#")]),e._v(" Edit view - “Editing on”")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=KWwWgCgidXM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=13&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Add and edit elements"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("Clicking on Button “Editing on” (Fig. 1, number 11) opens the edit view where a grid can be adapted, see Figure 2:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(501),alt:"edit view"}}),e._v(" "),t("em",[e._v("Fig.2: “Editing on” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the edit view:")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Open or close the navigation sidebar")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Editing off")]),e._v(": navigate back to main view")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Undo")]),e._v(": reverts the last action")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Redo")]),e._v(": redoes the last action after reverting it")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("More")]),e._v(": opens a menu with additional actions, e.g adding new elements")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Right click on a grid element")]),e._v(": opens a menu for editing / deleting / etc. the element (open it with long tap on a mobile device/touchscreen)")]),e._v(" "),t("p",[t("strong",[e._v("Reposition grid element / Edit area")]),e._v(": Grid elements can be repositioned by dragging them (drag & drop). On the right bottom corner it’s possible to resize a grid element.")])])]),e._v(" "),t("p",[e._v("See page "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html"}},[e._v("Edit grid appearance and layout")]),e._v(" for more details about editing a grid.")],1),e._v(" "),t("h2",{attrs:{id:"manage-grids-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manage-grids-view"}},[e._v("#")]),e._v(" “Manage grids” - view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=HQTgvv1Dnn0&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=15&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Manage grids"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The manage grids view provides an overview about the current grids of a user, see Figure 3:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(502),alt:"manage grids view"}}),e._v(" "),t("em",[e._v("Fig.3: “Manage grids” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the manage grids view:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Name of grid")]),e._v(": type name of the grid and confirm by clicking on the tick")]),e._v(" "),t("li",[t("strong",[e._v("New grid")]),e._v(": add a new, empty grid")]),e._v(" "),t("li",[t("strong",[e._v("more")]),e._v(": shows menu with additional actions, e.g. backup the grids to file or restore backups from file")]),e._v(" "),t("li",[t("strong",[e._v("Show")]),e._v(": open this grid in main view")]),e._v(" "),t("li",[t("strong",[e._v("Edit")]),e._v(": open this grid in edit view")]),e._v(" "),t("li",[t("strong",[e._v("Clone")]),e._v(": duplicate this grid, creating a copy of it with a different name")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": delete this grid")]),e._v(" "),t("li",[t("strong",[e._v("Export")]),e._v(": saves and downloads this specific grid to a "),t("code",[e._v(".grd")]),e._v(" file creating a backup of it (saves only this single grid, see “More” menu (Number 4) to backup all grids)")]),e._v(" "),t("li",[t("strong",[e._v("Save as PDF")]),e._v(": saves and downloades the grid as PDF")]),e._v(" "),t("li",[t("strong",[e._v("Grids to show")]),e._v(": select which grids shall be shown in the grid list")]),e._v(" "),t("li",[t("strong",[e._v("Sort grids by")]),e._v(": select how the grids in the grid list shall be sorted")])]),e._v(" "),t("h3",{attrs:{id:"more-button-additional-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#more-button-additional-options"}},[e._v("#")]),e._v(" “more” button - Additional options")]),e._v(" "),t("p",[e._v("Clicking on Button “more” (Fig. 3, number 4) opens menu with additional options:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(503),alt:"manage grids more menu"}})]),e._v(" "),t("p",[t("em",[e._v("Fig.3.1: “Manage grids” - view - “more” button")])]),e._v(" "),t("p",[e._v("These are the possible options:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("New Grid")]),e._v(": creates a new and empty grid, same as Fig. 3, number 3")]),e._v(" "),t("li",[t("strong",[e._v("Save backup to file")]),e._v(": creates and downloads a "),t("code",[e._v(".grd")]),e._v(" file containing a backup of all current grids, dictionaries and input configuration. In this case, a file called "),t("code",[e._v("asterics-grid-backup.grd")]),e._v(" is downloaded that can be renamed to more easily identify the contents of the copy")]),e._v(" "),t("li",[t("strong",[e._v("Save custom data to file")]),e._v(": creates and downloads a backup copy as well, but data can be customized with the following options:\n"),t("ol",[t("li",[e._v("Select grid: export a specific (group of) grid(s) or all available grids")]),e._v(" "),t("li",[e._v("Export languages: select wheter to export all the languages in which the communicator is translated or only one of them (current content language)")]),e._v(" "),t("li",[e._v("Export dictionaries: can be activated / deactivated")]),e._v(" "),t("li",[e._v("Export user settings and input configuration: can be activated / deactivated (preserves specific adjustments like color settings, content language or input settings (scanning or direct slection))")]),e._v(" "),t("li",[e._v("Export global grid: can be activated / deactivated")])])]),e._v(" "),t("li",[t("strong",[e._v("Save grids to PDF")]),e._v(": creates and downloads a "),t("code",[e._v(".pdf")]),e._v(" file of one or all grids, which can be used for later printing")]),e._v(" "),t("li",[t("strong",[e._v("Restore backup from file")]),e._v(": deletes the existing configuration and replaces it with data from a "),t("code",[e._v(".grd")]),e._v(" file")]),e._v(" "),t("li",[t("strong",[e._v("Import custom data from file")]),e._v(": imports data from a "),t("code",[e._v(".grd")]),e._v(" file as well, but data can be customized. You can choose if you want to import dictionaries, of you want to import user settings and input configuration and if oyu want to delet existing data before importing.")]),e._v(" "),t("li",[t("strong",[e._v("Reset to default configuration")]),e._v(": deletes all current grids and replaces them with the default demo configuration")])]),e._v(" "),t("p",[t("strong",[e._v("Info about Open Board Format (OBF)")]),e._v(": OBF is an open format for exchanging grids across different AAC tools and is specified on the "),t("a",{attrs:{href:"https://www.openboardformat.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("official website"),t("OutboundLink")],1),e._v(". AsTeRICS Grid supports importing OBF files ("),t("code",[e._v(".obf")]),e._v(" and "),t("code",[e._v(".obz")]),e._v(") using the options "),t("em",[e._v("Restore backup from file")]),e._v(" or "),t("em",[e._v("Import custom data from file")]),e._v(".")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Tpez_-4ILRA&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=26&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Complex grids and OBF"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("h3",{attrs:{id:"global-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#global-grid"}},[e._v("#")]),e._v(" Global grid")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=bbmMODbqbhk&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=25&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Global Grid"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("A global grid is a grid that is visible on every grid page. It may contain general elements that make sense within every grid like e.g. a “Home” grid element that navigates to the start page. A global grid could also contain some kind of core vocabulary that should be visible any time. The global grid of the main page of figure 1 contains the following elements:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(504),alt:"global grid"}})]),e._v(" "),t("p",[t("em",[e._v("Fig.3.2: Global Grid")])]),e._v(" "),t("p",[e._v("All the elements shown here are elements contained within the global grid. They are visible on every grid page.\nWhile editing the global grid it’s possible to define its height by opening "),t("em",[e._v("More -> Change grid dimensions")]),e._v(" and setting the value for "),t("em",[e._v("height of first global grid row")]),e._v(".")]),e._v(" "),t("p",[e._v("The global grid can be activated/deactivated and edited in the “Manage Grids” view at the bottom or by "),t("em",[e._v("More -> Edit global grid")]),e._v(" while editing any other grid:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(505),alt:"de/activate global grid"}})]),e._v(" "),t("p",[t("em",[e._v("Fig.3.3: “Manage grids” - view - Global Grid")])]),e._v(" "),t("h3",{attrs:{id:"home-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#home-grid"}},[e._v("#")]),e._v(" Home grid")]),e._v(" "),t("p",[e._v("At the bottom of “Manage grids” it’s possible to define a "),t("code",[e._v("Home grid")]),e._v(". This grid is automatically opened at startup of AsTeRICS Grid. If no home grid is defined, the last opened grid is opened.")]),e._v(" "),t("p",[t("code",[e._v("Navigate to home grid after selecting an element")]),e._v(" can be selected in order to automatically navigate to home grid after any element (which doesn’t navigate to an other grid) is selected. This can speed up the construction of sentences in more complex communicator interfaces.")]),e._v(" "),t("p",[e._v("It’s possible to define an action that navigates to the home grid, see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html#navigate-to-other-grid"}},[e._v("action “Navigate to other grid”")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"manage-dictionaries-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manage-dictionaries-view"}},[e._v("#")]),e._v(" “Manage Dictionaries” - view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=DS9om8MDEDY&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=19&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Manage dictionaries"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("In the manage dictionaries view currently saved dictionaries that are used for filling prediction elements (see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#grid-element"}},[e._v("Terms")]),e._v(") can be shown and adapted (Figure 4):")],1),e._v(" "),t("p",[t("img",{attrs:{src:i(506),alt:"manage dictionaries view"}}),e._v(" "),t("em",[e._v("Fig. 4: “Manage dictionaries” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the manage dictionaries view:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Import dictionary")]),e._v(": imports a dictionary from online dictionaries or from a "),t("code",[e._v(".json")]),e._v(" file")]),e._v(" "),t("li",[t("strong",[e._v("New empty dictionary")]),e._v(": add a new, empty dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Edit")]),e._v(": show, edit and add new words to the dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Clone")]),e._v(": create a copy of the dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": removes the dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Save")]),e._v(": saves the dictionary as "),t("code",[e._v(".json")]),e._v(" file")]),e._v(" "),t("li",[t("strong",[e._v("Edit dictionary name")]),e._v(": change the name of a dictionary")])]),e._v(" "),t("p",[e._v("For more information about using dictionaries see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/07_dictionaries.html"}},[e._v("Dictionaries")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"change-user-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-user-view"}},[e._v("#")]),e._v(" “Change User” - view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=CoRUQJJnYaY&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=16&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Offline and online users"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("In the “Change User” - view it’s possible to switch between users or login an existing one (Figure 5):")]),e._v(" "),t("p",[t("img",{attrs:{src:i(507),alt:"change user view"}}),e._v(" "),t("em",[e._v("Fig. 5: “Change user” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the change users view:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Active offline user")]),e._v(": the currently active user is recognizable by a black user symbol and the word “active” next to the username. The active user is the user whose grids and configuration are currently used and shown in all other views.")]),e._v(" "),t("li",[t("strong",[e._v("Inactive online user")]),e._v(": The little cloud symbol indicates an online user (see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#user"}},[e._v("Terms")]),e._v(") and the gray user symbol that he is currently inactive, meaning that the user’s grids are currently not used.")],1),e._v(" "),t("li",[t("strong",[e._v("Inactive offline user")]),e._v(": The gray user symbol without a cloud indicates an inactive offline user (see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#user"}},[e._v("Terms")]),e._v(")")],1),e._v(" "),t("li",[t("strong",[e._v("Open")]),e._v(": sets the user “active” and opens the main view, showing the user’s grid(s). Sets all other users inactive, there is always only one active user.")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": deletes the user and all of his grids and configuration. Use with caution, this action cannot be undone. This option is only available for offline users.")]),e._v(" "),t("li",[t("strong",[e._v("Logout")]),e._v(": deletes the user and all of his grids and configuration, but only on the current device. Data in the cloud and on other devices that are logged in with the same user will not be deleted. This option is only available for online users.")]),e._v(" "),t("li",[t("strong",[e._v("Login with other user")]),e._v(": put in username and password of an existing online user in order to add it to the current device. In order to create a new online or offline user, follow one of the links below.")]),e._v(" "),t("li",[t("strong",[e._v("Remember checkbox")]),e._v(": if checked, the newly logged in online user will be saved to the device and listed in the list of users in the current user view. If unchecked the user will only be opened temporarily and no user data will be saved on the device (recommended for logging in on foreign devices).")])]),e._v(" "),t("p",[e._v("For information about offline or online users and how to add them see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/06_users.html"}},[e._v("Users")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"search-function"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#search-function"}},[e._v("#")]),e._v(" Search function")]),e._v(" "),t("p",[e._v("These are the possibilities to open the dialog for searching for grid elements in the current configuration:")]),e._v(" "),t("ol",[t("li",[e._v("Click the button "),t("code",[e._v("Search")]),e._v(" in the top bar in the Main View")]),e._v(" "),t("li",[e._v("Press "),t("code",[e._v("Ctrl + F")]),e._v(" on the keyboard in one of these views: “Main”, “Manage Grids” or “Edit grid”")]),e._v(" "),t("li",[e._v("Click on "),t("code",[e._v("More -> Search")]),e._v(" in the top bar of “Edit grid” view")]),e._v(" "),t("li",[e._v("Grid element action "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html#navigate-to-other-grid"}},[e._v("navigate to other grid")]),e._v(" with navigation type "),t("code",[e._v("Open search dialog")]),e._v(" (e.g. to be added to "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#global-grid"}},[e._v("global grid")]),e._v(" in order to be able to open the search dialog in fullscreen mode).")],1)]),e._v(" "),t("p",[t("img",{attrs:{src:i(508),alt:"change user view"}}),e._v(" "),t("em",[e._v("Fig. 6: Search dialog and search results")])]),e._v(" "),t("p",[e._v("Figure 6 shows the search dialog:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("search term")]),e._v(": text input field for the search term")]),e._v(" "),t("li",[t("strong",[e._v("result image")]),e._v(": directly navigates to the selected element and highlights it. Keyboard shortcut for first search result: "),t("code",[e._v("[Enter]")])]),e._v(" "),t("li",[t("strong",[e._v("result path")]),e._v(": navigates to the selected element step-by-step by highlighting the path beginning from the home grid. Keyboard shortcut for first search result: "),t("code",[e._v("[Ctrl + Enter]")])])]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=n.exports},500:function(e,t,i){e.exports=i.p+"assets/img/main_en.0dfdaa0e.jpg"},501:function(e,t,i){e.exports=i.p+"assets/img/edit_en.c2cbce4a.jpg"},502:function(e,t,i){e.exports=i.p+"assets/img/manage_grids_en.7487da8f.jpg"},503:function(e,t,i){e.exports=i.p+"assets/img/manage_grids_more_en.6f493d95.jpg"},504:function(e,t,i){e.exports=i.p+"assets/img/global_grid_empty_en.27f7b39a.JPG"},505:function(e,t,i){e.exports=i.p+"assets/img/global_grid_en.7962d28c.JPG"},506:function(e,t,i){e.exports=i.p+"assets/img/manage_dict_en.9115ef99.jpg"},507:function(e,t,i){e.exports=i.p+"assets/img/login_en.ea0b3060.jpg"},508:function(e,t,i){e.exports=i.p+"assets/img/search-dialog.cdc09620.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{1050:function(e,t,i){"use strict";i.r(t);var a=i(2),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"navigation-and-basic-functionality"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#navigation-and-basic-functionality"}},[e._v("#")]),e._v(" Navigation and basic functionality")]),e._v(" "),t("p",[e._v("This chapter is about general appearance, navigation and basic functionality of the different views in AsTeRICS Grid:")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#welcome-view"}},[e._v("Welcome view")]),e._v(": intial view shown at first usage")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#main---view"}},[e._v("Main view")]),e._v(": starting view showing the recently used grid and navigation")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#edit-view---editing-on"}},[e._v("Edit view")]),e._v(": view that allows modification of a grid")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("Manage grids view")]),e._v(": show all grids, create new ones, create a backup")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-dictionaries---view"}},[e._v("Manage dictionaries view")]),e._v(": show, edit and create new dictionaries")],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#change-user---view"}},[e._v("Change user view")]),e._v(": switch users or login an existing one")],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"welcome-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#welcome-view"}},[e._v("#")]),e._v(" Welcome view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=5ffLB4a9APc&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=2&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("First Start"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("AsTeRICS Grid initially starts with a welcome view giving the choice between:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Use AsTeRICS Grid without registration:")]),e._v(" choose this option in order to create a local default user and directly start using AsTeRICS Grid.")]),e._v(" "),t("li",[t("strong",[e._v("Register now:")]),e._v(" choose this option in order to sign up for an online user, which makes it possible to synchronize the grids across devices.")])]),e._v(" "),t("p",[e._v("See "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#User"}},[e._v("Terms")]),e._v(" for more information about offline/online users.")],1),e._v(" "),t("h2",{attrs:{id:"main-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#main-view"}},[e._v("#")]),e._v(" “Main” - view")]),e._v(" "),t("p",[t("strong",[e._v("Videos on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=OU4sI2UcNUo&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=3&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Demo configuration"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=CK8Lv2bVr-g&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=4&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Fullscreen and lock mode"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("Once taken a decision in the welcome view AsTeRICS Grid subsequently starts in the “main view” which looks like Figure 1 (desktop view on the left, mobile view on the right):")]),e._v(" "),t("p",[t("img",{attrs:{src:i(500),alt:"main view"}}),e._v(" "),t("em",[e._v("Fig. 1: “Main” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The elements have this functionality:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the left navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Main")]),e._v(": navigate to the main view (currently shown)")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("Manage grids")])],1),e._v(": show all grids of the current user, add new ones or backup them to a file, manage the global grid")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-dictionaries---view"}},[e._v("Manage Dictionaries")])],1),e._v(": show all saved dictionaries, edit them or add new empty ones or import existing dictionaries")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#change-user---view"}},[e._v("Change User")])],1),e._v(": switch between saved users or log in an existing online user")]),e._v(" "),t("li",[t("strong",[e._v("Add online user")]),e._v(": register a new online user (synchronized across devices), see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/06_users.html"}},[e._v("Users")])],1),e._v(" "),t("li",[t("strong",[e._v("Add offline users")]),e._v(": add a new offline user (only for this device)")]),e._v(" "),t("li",[t("strong",[e._v("Settings")]),e._v(": select between general settings like application language and user settings like grid content language, voice or colors")]),e._v(" "),t("li",[t("strong",[e._v("About AsTeRICS Grid")]),e._v(": Show general information, links, contact address")]),e._v(" "),t("li",[t("strong",[e._v("Help")]),e._v(": find the AsTeRICS Grid user manuel, the ARASAAC tutorial or video tutorials")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html##edit-view---editing-on"}},[e._v("Editing on")])],1),e._v(": edit the layout of the grid, add new elements, actions for grid elements")]),e._v(" "),t("li",[t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html"}},[e._v("Input options")])],1),e._v(": Options about how to select grid elements (e.g. click, hover, scanning)")]),e._v(" "),t("li",[t("strong",[e._v("Fullscreen")]),e._v(": hide the sidebar and the bar on the top, only showing the current grid")]),e._v(" "),t("li",[t("strong",[e._v("Lock")]),e._v(": lock the screen in order to prevent unintended input or changes beside using and navigating the grid")]),e._v(" "),t("li",[t("strong",[e._v("Grid")]),e._v(": demo grid consisting of some grid elements which are navigating to other grids if selected (possible for those which show the grey symbol in the upper right corner)")])]),e._v(" "),t("h2",{attrs:{id:"edit-view-editing-on"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#edit-view-editing-on"}},[e._v("#")]),e._v(" Edit view - “Editing on”")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=KWwWgCgidXM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=13&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Add and edit elements"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("Clicking on Button “Editing on” (Fig. 1, number 11) opens the edit view where a grid can be adapted, see Figure 2:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(501),alt:"edit view"}}),e._v(" "),t("em",[e._v("Fig.2: “Editing on” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the edit view:")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Open or close the navigation sidebar")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Editing off")]),e._v(": navigate back to main view")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Undo")]),e._v(": reverts the last action")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Redo")]),e._v(": redoes the last action after reverting it")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("More")]),e._v(": opens a menu with additional actions, e.g adding new elements")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Right click on a grid element")]),e._v(": opens a menu for editing / deleting / etc. the element (open it with long tap on a mobile device/touchscreen)")]),e._v(" "),t("p",[t("strong",[e._v("Reposition grid element / Edit area")]),e._v(": Grid elements can be repositioned by dragging them (drag & drop). On the right bottom corner it’s possible to resize a grid element.")])])]),e._v(" "),t("p",[e._v("See page "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html"}},[e._v("Edit grid appearance and layout")]),e._v(" for more details about editing a grid.")],1),e._v(" "),t("h2",{attrs:{id:"manage-grids-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manage-grids-view"}},[e._v("#")]),e._v(" “Manage grids” - view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=HQTgvv1Dnn0&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=15&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Manage grids"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The manage grids view provides an overview about the current grids of a user, see Figure 3:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(502),alt:"manage grids view"}}),e._v(" "),t("em",[e._v("Fig.3: “Manage grids” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the manage grids view:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Name of grid")]),e._v(": type name of the grid and confirm by clicking on the tick")]),e._v(" "),t("li",[t("strong",[e._v("New grid")]),e._v(": add a new, empty grid")]),e._v(" "),t("li",[t("strong",[e._v("more")]),e._v(": shows menu with additional actions, e.g. backup the grids to file or restore backups from file")]),e._v(" "),t("li",[t("strong",[e._v("Show")]),e._v(": open this grid in main view")]),e._v(" "),t("li",[t("strong",[e._v("Edit")]),e._v(": open this grid in edit view")]),e._v(" "),t("li",[t("strong",[e._v("Clone")]),e._v(": duplicate this grid, creating a copy of it with a different name")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": delete this grid")]),e._v(" "),t("li",[t("strong",[e._v("Export")]),e._v(": saves and downloads this specific grid to a "),t("code",[e._v(".grd")]),e._v(" file creating a backup of it (saves only this single grid, see “More” menu (Number 4) to backup all grids)")]),e._v(" "),t("li",[t("strong",[e._v("Save as PDF")]),e._v(": saves and downloades the grid as PDF")]),e._v(" "),t("li",[t("strong",[e._v("Grids to show")]),e._v(": select which grids shall be shown in the grid list")]),e._v(" "),t("li",[t("strong",[e._v("Sort grids by")]),e._v(": select how the grids in the grid list shall be sorted")])]),e._v(" "),t("h3",{attrs:{id:"more-button-additional-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#more-button-additional-options"}},[e._v("#")]),e._v(" “more” button - Additional options")]),e._v(" "),t("p",[e._v("Clicking on Button “more” (Fig. 3, number 4) opens menu with additional options:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(503),alt:"manage grids more menu"}})]),e._v(" "),t("p",[t("em",[e._v("Fig.3.1: “Manage grids” - view - “more” button")])]),e._v(" "),t("p",[e._v("These are the possible options:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("New Grid")]),e._v(": creates a new and empty grid, same as Fig. 3, number 3")]),e._v(" "),t("li",[t("strong",[e._v("Save backup to file")]),e._v(": creates and downloads a "),t("code",[e._v(".grd")]),e._v(" file containing a backup of all current grids, dictionaries and input configuration. In this case, a file called "),t("code",[e._v("asterics-grid-backup.grd")]),e._v(" is downloaded that can be renamed to more easily identify the contents of the copy")]),e._v(" "),t("li",[t("strong",[e._v("Save custom data to file")]),e._v(": creates and downloads a backup copy as well, but data can be customized with the following options:\n"),t("ol",[t("li",[e._v("Select grid: export a specific (group of) grid(s) or all available grids")]),e._v(" "),t("li",[e._v("Export languages: select wheter to export all the languages in which the communicator is translated or only one of them (current content language)")]),e._v(" "),t("li",[e._v("Export dictionaries: can be activated / deactivated")]),e._v(" "),t("li",[e._v("Export user settings and input configuration: can be activated / deactivated (preserves specific adjustments like color settings, content language or input settings (scanning or direct slection))")]),e._v(" "),t("li",[e._v("Export global grid: can be activated / deactivated")])])]),e._v(" "),t("li",[t("strong",[e._v("Save grids to PDF")]),e._v(": creates and downloads a "),t("code",[e._v(".pdf")]),e._v(" file of one or all grids, which can be used for later printing")]),e._v(" "),t("li",[t("strong",[e._v("Restore backup from file")]),e._v(": deletes the existing configuration and replaces it with data from a "),t("code",[e._v(".grd")]),e._v(" file")]),e._v(" "),t("li",[t("strong",[e._v("Import custom data from file")]),e._v(": imports data from a "),t("code",[e._v(".grd")]),e._v(" file as well, but data can be customized. You can choose if you want to import dictionaries, of you want to import user settings and input configuration and if oyu want to delet existing data before importing.")]),e._v(" "),t("li",[t("strong",[e._v("Reset to default configuration")]),e._v(": deletes all current grids and replaces them with the default demo configuration")])]),e._v(" "),t("p",[t("strong",[e._v("Info about Open Board Format (OBF)")]),e._v(": OBF is an open format for exchanging grids across different AAC tools and is specified on the "),t("a",{attrs:{href:"https://www.openboardformat.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("official website"),t("OutboundLink")],1),e._v(". AsTeRICS Grid supports importing OBF files ("),t("code",[e._v(".obf")]),e._v(" and "),t("code",[e._v(".obz")]),e._v(") using the options "),t("em",[e._v("Restore backup from file")]),e._v(" or "),t("em",[e._v("Import custom data from file")]),e._v(".")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Tpez_-4ILRA&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=26&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Complex grids and OBF"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("h3",{attrs:{id:"global-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#global-grid"}},[e._v("#")]),e._v(" Global grid")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=bbmMODbqbhk&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=25&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Global Grid"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("A global grid is a grid that is visible on every grid page. It may contain general elements that make sense within every grid like e.g. a “Home” grid element that navigates to the start page. A global grid could also contain some kind of core vocabulary that should be visible any time. The global grid of the main page of figure 1 contains the following elements:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(504),alt:"global grid"}})]),e._v(" "),t("p",[t("em",[e._v("Fig.3.2: Global Grid")])]),e._v(" "),t("p",[e._v("All the elements shown here are elements contained within the global grid. They are visible on every grid page.\nWhile editing the global grid it’s possible to define its height by opening "),t("em",[e._v("More -> Change grid dimensions")]),e._v(" and setting the value for "),t("em",[e._v("height of first global grid row")]),e._v(".")]),e._v(" "),t("p",[e._v("The global grid can be activated/deactivated and edited in the “Manage Grids” view at the bottom or by "),t("em",[e._v("More -> Edit global grid")]),e._v(" while editing any other grid:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(505),alt:"de/activate global grid"}})]),e._v(" "),t("p",[t("em",[e._v("Fig.3.3: “Manage grids” - view - Global Grid")])]),e._v(" "),t("h3",{attrs:{id:"home-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#home-grid"}},[e._v("#")]),e._v(" Home grid")]),e._v(" "),t("p",[e._v("At the bottom of “Manage grids” it’s possible to define a "),t("code",[e._v("Home grid")]),e._v(". This grid is automatically opened at startup of AsTeRICS Grid. If no home grid is defined, the last opened grid is opened.")]),e._v(" "),t("p",[t("code",[e._v("Navigate to home grid after selecting an element")]),e._v(" can be selected in order to automatically navigate to home grid after any element (which doesn’t navigate to an other grid) is selected. This can speed up the construction of sentences in more complex communicator interfaces.")]),e._v(" "),t("p",[e._v("It’s possible to define an action that navigates to the home grid, see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html#navigate-to-other-grid"}},[e._v("action “Navigate to other grid”")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"manage-dictionaries-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manage-dictionaries-view"}},[e._v("#")]),e._v(" “Manage Dictionaries” - view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=DS9om8MDEDY&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=19&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Manage dictionaries"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("In the manage dictionaries view currently saved dictionaries that are used for filling prediction elements (see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#grid-element"}},[e._v("Terms")]),e._v(") can be shown and adapted (Figure 4):")],1),e._v(" "),t("p",[t("img",{attrs:{src:i(506),alt:"manage dictionaries view"}}),e._v(" "),t("em",[e._v("Fig. 4: “Manage dictionaries” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the manage dictionaries view:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Import dictionary")]),e._v(": imports a dictionary from online dictionaries or from a "),t("code",[e._v(".json")]),e._v(" file")]),e._v(" "),t("li",[t("strong",[e._v("New empty dictionary")]),e._v(": add a new, empty dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Edit")]),e._v(": show, edit and add new words to the dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Clone")]),e._v(": create a copy of the dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": removes the dictionary")]),e._v(" "),t("li",[t("strong",[e._v("Save")]),e._v(": saves the dictionary as "),t("code",[e._v(".json")]),e._v(" file")]),e._v(" "),t("li",[t("strong",[e._v("Edit dictionary name")]),e._v(": change the name of a dictionary")])]),e._v(" "),t("p",[e._v("For more information about using dictionaries see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/07_dictionaries.html"}},[e._v("Dictionaries")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"change-user-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-user-view"}},[e._v("#")]),e._v(" “Change User” - view")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=CoRUQJJnYaY&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=16&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Offline and online users"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("In the “Change User” - view it’s possible to switch between users or login an existing one (Figure 5):")]),e._v(" "),t("p",[t("img",{attrs:{src:i(507),alt:"change user view"}}),e._v(" "),t("em",[e._v("Fig. 5: “Change user” - view (desktop view on the left, mobile view on the right)")])]),e._v(" "),t("p",[e._v("The following elements are available in the change users view:")]),e._v(" "),t("ol",[t("li",[e._v("Open or close the navigation sidebar")]),e._v(" "),t("li",[t("strong",[e._v("Active offline user")]),e._v(": the currently active user is recognizable by a black user symbol and the word “active” next to the username. The active user is the user whose grids and configuration are currently used and shown in all other views.")]),e._v(" "),t("li",[t("strong",[e._v("Inactive online user")]),e._v(": The little cloud symbol indicates an online user (see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#user"}},[e._v("Terms")]),e._v(") and the gray user symbol that he is currently inactive, meaning that the user’s grids are currently not used.")],1),e._v(" "),t("li",[t("strong",[e._v("Inactive offline user")]),e._v(": The gray user symbol without a cloud indicates an inactive offline user (see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#user"}},[e._v("Terms")]),e._v(")")],1),e._v(" "),t("li",[t("strong",[e._v("Open")]),e._v(": sets the user “active” and opens the main view, showing the user’s grid(s). Sets all other users inactive, there is always only one active user.")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": deletes the user and all of his grids and configuration. Use with caution, this action cannot be undone. This option is only available for offline users.")]),e._v(" "),t("li",[t("strong",[e._v("Logout")]),e._v(": deletes the user and all of his grids and configuration, but only on the current device. Data in the cloud and on other devices that are logged in with the same user will not be deleted. This option is only available for online users.")]),e._v(" "),t("li",[t("strong",[e._v("Login with other user")]),e._v(": put in username and password of an existing online user in order to add it to the current device. In order to create a new online or offline user, follow one of the links below.")]),e._v(" "),t("li",[t("strong",[e._v("Remember checkbox")]),e._v(": if checked, the newly logged in online user will be saved to the device and listed in the list of users in the current user view. If unchecked the user will only be opened temporarily and no user data will be saved on the device (recommended for logging in on foreign devices).")])]),e._v(" "),t("p",[e._v("For information about offline or online users and how to add them see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/06_users.html"}},[e._v("Users")]),e._v(".")],1),e._v(" "),t("h2",{attrs:{id:"search-function"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#search-function"}},[e._v("#")]),e._v(" Search function")]),e._v(" "),t("p",[e._v("These are the possibilities to open the dialog for searching for grid elements in the current configuration:")]),e._v(" "),t("ol",[t("li",[e._v("Click the button "),t("code",[e._v("Search")]),e._v(" in the top bar in the Main View")]),e._v(" "),t("li",[e._v("Press "),t("code",[e._v("Ctrl + F")]),e._v(" on the keyboard in one of these views: “Main”, “Manage Grids” or “Edit grid”")]),e._v(" "),t("li",[e._v("Click on "),t("code",[e._v("More -> Search")]),e._v(" in the top bar of “Edit grid” view")]),e._v(" "),t("li",[e._v("Grid element action "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html#navigate-to-other-grid"}},[e._v("navigate to other grid")]),e._v(" with navigation type "),t("code",[e._v("Open search dialog")]),e._v(" (e.g. to be added to "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#global-grid"}},[e._v("global grid")]),e._v(" in order to be able to open the search dialog in fullscreen mode).")],1)]),e._v(" "),t("p",[t("img",{attrs:{src:i(508),alt:"change user view"}}),e._v(" "),t("em",[e._v("Fig. 6: Search dialog and search results")])]),e._v(" "),t("p",[e._v("Figure 6 shows the search dialog:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("search term")]),e._v(": text input field for the search term")]),e._v(" "),t("li",[t("strong",[e._v("result image")]),e._v(": directly navigates to the selected element and highlights it. Keyboard shortcut for first search result: "),t("code",[e._v("[Enter]")])]),e._v(" "),t("li",[t("strong",[e._v("result path")]),e._v(": navigates to the selected element step-by-step by highlighting the path beginning from the home grid. Keyboard shortcut for first search result: "),t("code",[e._v("[Ctrl + Enter]")])])]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=n.exports},500:function(e,t,i){e.exports=i.p+"assets/img/main_en.0dfdaa0e.jpg"},501:function(e,t,i){e.exports=i.p+"assets/img/edit_en.c2cbce4a.jpg"},502:function(e,t,i){e.exports=i.p+"assets/img/manage_grids_en.7487da8f.jpg"},503:function(e,t,i){e.exports=i.p+"assets/img/manage_grids_more_en.6f493d95.jpg"},504:function(e,t,i){e.exports=i.p+"assets/img/global_grid_empty_en.27f7b39a.JPG"},505:function(e,t,i){e.exports=i.p+"assets/img/global_grid_en.7962d28c.JPG"},506:function(e,t,i){e.exports=i.p+"assets/img/manage_dict_en.9115ef99.jpg"},507:function(e,t,i){e.exports=i.p+"assets/img/login_en.ea0b3060.jpg"},508:function(e,t,i){e.exports=i.p+"assets/img/search-dialog.cdc09620.png"}}]); \ No newline at end of file diff --git a/assets/js/160.fb9f1818.js b/assets/js/160.c56bfeed.js similarity index 94% rename from assets/js/160.fb9f1818.js rename to assets/js/160.c56bfeed.js index 3fcfca91b7..36713798e7 100644 --- a/assets/js/160.fb9f1818.js +++ b/assets/js/160.c56bfeed.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[160],{1099:function(e,o,i){"use strict";i.r(o);var s=i(2),t=Object(s.a)({},(function(){var e=this,o=e._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"oscilloscope"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#oscilloscope"}},[e._v("#")]),e._v(" Oscilloscope")]),e._v(" "),o("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),o("p",[e._v("The Oscilloscope provides graphical output of one or two signal values. It is a very basic implementation but useful to visualize sensor values, changes in values and value history. The trace colours and update speed can be configured via component parameters.")]),e._v(" "),o("p",[o("img",{attrs:{src:i(651),alt:"Screenshot: Oscilloscope plugin",title:"Screenshot: Oscilloscope plugin"}})]),e._v(" "),o("p",[e._v("Oscilloscope plugin")]),e._v(" "),o("h2",{attrs:{id:"input-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),o("ul",[o("li",[o("strong",[e._v("in [double]:")]),e._v(" The input signal for the oscilloscope.")])]),e._v(" "),o("h2",{attrs:{id:"properties"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),o("ul",[o("li",[o("strong",[e._v("displayBuffer [integer]:")]),e._v(" This property value specifies how often the oscilloscope window is drawn. For example if the display buffer size is 0, the oscilloscope traces are redrawn at every incoming value. If the display buffer size is set to 10, 10 values are stored in a buffer and drawn at once as the tenth value is received. This significantly reduces the computational resources spent for drawing the oscilloscope, which is useful especially at high update rates.")]),e._v(" "),o("li",[o("strong",[e._v("drawingMode [integer]:")]),e._v(" Declares whether the y axis is adapting to mininum and maximum values automatically or to stay in preset bounds.")]),e._v(" "),o("li",[o("strong",[e._v("displayMode [integer]:")]),e._v(" Affects the time when oscilloscope is redrawn. Can be set to the values “redraw on incoming samples” or “redraw periodically”.")]),e._v(" "),o("li",[o("strong",[e._v("drawInterval [integer]:")]),e._v(" Redraw interval in milliseconds (if periodic drawing is used).")]),e._v(" "),o("li",[o("strong",[e._v("min [integer]:")]),e._v(" Preset minimum value for y axis of oscilloscope.")]),e._v(" "),o("li",[o("strong",[e._v("max [integer]:")]),e._v(" Preset maximum value for y axis of oscilloscope.")]),e._v(" "),o("li",[o("strong",[e._v("gridColor [integer]:")]),e._v(" The colour of the value-grid.")]),e._v(" "),o("li",[o("strong",[e._v("channelColor [integer]:")]),e._v(" The colour of the signal trace for the channel.")]),e._v(" "),o("li",[o("strong",[e._v("backgroundColor [integer]:")]),e._v(" The colour of the background of the oscilloscope window.")]),e._v(" "),o("li",[o("strong",[e._v("fontSize [integer]:")]),e._v(" The size of the oscilloscope’s caption.")]),e._v(" "),o("li",[o("strong",[e._v("caption [string]:")]),e._v(" The caption to be displayed on the oscilloscope.")]),e._v(" "),o("li",[o("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);o.default=t.exports},651:function(e,o,i){e.exports=i.p+"assets/img/oscilloscope.1a3665f5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[160],{1101:function(e,o,i){"use strict";i.r(o);var s=i(2),t=Object(s.a)({},(function(){var e=this,o=e._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"oscilloscope"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#oscilloscope"}},[e._v("#")]),e._v(" Oscilloscope")]),e._v(" "),o("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),o("p",[e._v("The Oscilloscope provides graphical output of one or two signal values. It is a very basic implementation but useful to visualize sensor values, changes in values and value history. The trace colours and update speed can be configured via component parameters.")]),e._v(" "),o("p",[o("img",{attrs:{src:i(653),alt:"Screenshot: Oscilloscope plugin",title:"Screenshot: Oscilloscope plugin"}})]),e._v(" "),o("p",[e._v("Oscilloscope plugin")]),e._v(" "),o("h2",{attrs:{id:"input-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),o("ul",[o("li",[o("strong",[e._v("in [double]:")]),e._v(" The input signal for the oscilloscope.")])]),e._v(" "),o("h2",{attrs:{id:"properties"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),o("ul",[o("li",[o("strong",[e._v("displayBuffer [integer]:")]),e._v(" This property value specifies how often the oscilloscope window is drawn. For example if the display buffer size is 0, the oscilloscope traces are redrawn at every incoming value. If the display buffer size is set to 10, 10 values are stored in a buffer and drawn at once as the tenth value is received. This significantly reduces the computational resources spent for drawing the oscilloscope, which is useful especially at high update rates.")]),e._v(" "),o("li",[o("strong",[e._v("drawingMode [integer]:")]),e._v(" Declares whether the y axis is adapting to mininum and maximum values automatically or to stay in preset bounds.")]),e._v(" "),o("li",[o("strong",[e._v("displayMode [integer]:")]),e._v(" Affects the time when oscilloscope is redrawn. Can be set to the values “redraw on incoming samples” or “redraw periodically”.")]),e._v(" "),o("li",[o("strong",[e._v("drawInterval [integer]:")]),e._v(" Redraw interval in milliseconds (if periodic drawing is used).")]),e._v(" "),o("li",[o("strong",[e._v("min [integer]:")]),e._v(" Preset minimum value for y axis of oscilloscope.")]),e._v(" "),o("li",[o("strong",[e._v("max [integer]:")]),e._v(" Preset maximum value for y axis of oscilloscope.")]),e._v(" "),o("li",[o("strong",[e._v("gridColor [integer]:")]),e._v(" The colour of the value-grid.")]),e._v(" "),o("li",[o("strong",[e._v("channelColor [integer]:")]),e._v(" The colour of the signal trace for the channel.")]),e._v(" "),o("li",[o("strong",[e._v("backgroundColor [integer]:")]),e._v(" The colour of the background of the oscilloscope window.")]),e._v(" "),o("li",[o("strong",[e._v("fontSize [integer]:")]),e._v(" The size of the oscilloscope’s caption.")]),e._v(" "),o("li",[o("strong",[e._v("caption [string]:")]),e._v(" The caption to be displayed on the oscilloscope.")]),e._v(" "),o("li",[o("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);o.default=t.exports},653:function(e,o,i){e.exports=i.p+"assets/img/oscilloscope.1a3665f5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/161.90f1a436.js b/assets/js/161.595fa06b.js similarity index 95% rename from assets/js/161.90f1a436.js rename to assets/js/161.595fa06b.js index ac5e469694..453bb1845f 100644 --- a/assets/js/161.90f1a436.js +++ b/assets/js/161.595fa06b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[161],{1101:function(e,t,n){"use strict";n.r(t);var o=n(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"phone-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#phone-control"}},[e._v("#")]),e._v(" Phone Control")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Phone Interface)")]),e._v(" "),t("p",[e._v("This component controls a mobile phone with Windows Mobile operating system (v. 5.0 and above) through a Bluetooth connection. Currently supported functions are: Calling a phone number and accepting an incoming call, sending and receiving SMS messages. These functions can either be triggered by incoming events or by sending string commands to the phone plugin.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(653),alt:"Screenshot: PhoneControl plugin",title:"Screenshot: PhoneControl plugin"}})]),e._v(" "),t("p",[e._v("PhoneControl plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A Phone running Windows Mobile, a Bluetooth dongle or Bluetooth HW support, Microsoft Bluetooth stack active. AsTeRICS Phone server application running on the mobile phone.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("phoneID [string]:")]),e._v(" This is the phone number which will be used for actions like: send SMS, make phone call.")]),e._v(" "),t("li",[t("strong",[e._v("SMSContent [string]:")]),e._v(" This is the SMS content which will be used for sending SMS action.")]),e._v(" "),t("li",[t("strong",[e._v("command [string]:")]),e._v(" String command that can be sent to this component from other plugins to trigger phone actions. Currently supported commands are:\n"),t("ul",[t("li",[e._v("@PHONE: SMS:Phone_ID, “Message_content”")]),e._v(" "),t("li",[e._v("@PHONE: CALL: Phone_ID")]),e._v(" "),t("li",[e._v("@PHONE: ACCEPT")]),e._v(" "),t("li",[e._v("@PHONE: DROP")])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("remotePhoneID [string]:")]),e._v(" This is a phone number of the caller or SMS sender.")]),e._v(" "),t("li",[t("strong",[e._v("receivedSMS [string]:")]),e._v(" This is the content of the incoming SMS.")]),e._v(" "),t("li",[t("strong",[e._v("errorNumber [integer]:")]),e._v(" The number of the error.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendSMS:")]),e._v(" Sends SMS.")]),e._v(" "),t("li",[t("strong",[e._v("makePhoneCall:")]),e._v(" Makes the phone call.")]),e._v(" "),t("li",[t("strong",[e._v("acceptPhoneCall:")]),e._v(" Accepts the incoming phone call.")]),e._v(" "),t("li",[t("strong",[e._v("dropPhoneCall:")]),e._v(" Drops the phone call.")]),e._v(" "),t("li",[t("strong",[e._v("reconnect:")]),e._v(" Reconnects the phone.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("idleState:")]),e._v(" Phone is in the idle state.")]),e._v(" "),t("li",[t("strong",[e._v("ringState:")]),e._v(" Phone is in the ring state.")]),e._v(" "),t("li",[t("strong",[e._v("connectedState:")]),e._v(" Phone is connected with the remote phone.")]),e._v(" "),t("li",[t("strong",[e._v("newSMS:")]),e._v(" There is a new SMS.")]),e._v(" "),t("li",[t("strong",[e._v("error:")]),e._v(" The error occurs.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("defaultPhoneID [string]:")]),e._v(" This is a default phone number, which will be used for send SMS and make phone call actions.")]),e._v(" "),t("li",[t("strong",[e._v("bluetoothPhoneName [string]:")]),e._v(" This is a Bluetooth name of the phone which the component will connect.")]),e._v(" "),t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This is a Bluetooth port number.")])])])}),[],!1,null,null,null);t.default=r.exports},653:function(e,t,n){e.exports=n.p+"assets/img/phonecontrol.738f8590.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[161],{1102:function(e,t,n){"use strict";n.r(t);var o=n(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"phone-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#phone-control"}},[e._v("#")]),e._v(" Phone Control")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Phone Interface)")]),e._v(" "),t("p",[e._v("This component controls a mobile phone with Windows Mobile operating system (v. 5.0 and above) through a Bluetooth connection. Currently supported functions are: Calling a phone number and accepting an incoming call, sending and receiving SMS messages. These functions can either be triggered by incoming events or by sending string commands to the phone plugin.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(654),alt:"Screenshot: PhoneControl plugin",title:"Screenshot: PhoneControl plugin"}})]),e._v(" "),t("p",[e._v("PhoneControl plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A Phone running Windows Mobile, a Bluetooth dongle or Bluetooth HW support, Microsoft Bluetooth stack active. AsTeRICS Phone server application running on the mobile phone.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("phoneID [string]:")]),e._v(" This is the phone number which will be used for actions like: send SMS, make phone call.")]),e._v(" "),t("li",[t("strong",[e._v("SMSContent [string]:")]),e._v(" This is the SMS content which will be used for sending SMS action.")]),e._v(" "),t("li",[t("strong",[e._v("command [string]:")]),e._v(" String command that can be sent to this component from other plugins to trigger phone actions. Currently supported commands are:\n"),t("ul",[t("li",[e._v("@PHONE: SMS:Phone_ID, “Message_content”")]),e._v(" "),t("li",[e._v("@PHONE: CALL: Phone_ID")]),e._v(" "),t("li",[e._v("@PHONE: ACCEPT")]),e._v(" "),t("li",[e._v("@PHONE: DROP")])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("remotePhoneID [string]:")]),e._v(" This is a phone number of the caller or SMS sender.")]),e._v(" "),t("li",[t("strong",[e._v("receivedSMS [string]:")]),e._v(" This is the content of the incoming SMS.")]),e._v(" "),t("li",[t("strong",[e._v("errorNumber [integer]:")]),e._v(" The number of the error.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendSMS:")]),e._v(" Sends SMS.")]),e._v(" "),t("li",[t("strong",[e._v("makePhoneCall:")]),e._v(" Makes the phone call.")]),e._v(" "),t("li",[t("strong",[e._v("acceptPhoneCall:")]),e._v(" Accepts the incoming phone call.")]),e._v(" "),t("li",[t("strong",[e._v("dropPhoneCall:")]),e._v(" Drops the phone call.")]),e._v(" "),t("li",[t("strong",[e._v("reconnect:")]),e._v(" Reconnects the phone.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("idleState:")]),e._v(" Phone is in the idle state.")]),e._v(" "),t("li",[t("strong",[e._v("ringState:")]),e._v(" Phone is in the ring state.")]),e._v(" "),t("li",[t("strong",[e._v("connectedState:")]),e._v(" Phone is connected with the remote phone.")]),e._v(" "),t("li",[t("strong",[e._v("newSMS:")]),e._v(" There is a new SMS.")]),e._v(" "),t("li",[t("strong",[e._v("error:")]),e._v(" The error occurs.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("defaultPhoneID [string]:")]),e._v(" This is a default phone number, which will be used for send SMS and make phone call actions.")]),e._v(" "),t("li",[t("strong",[e._v("bluetoothPhoneName [string]:")]),e._v(" This is a Bluetooth name of the phone which the component will connect.")]),e._v(" "),t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This is a Bluetooth port number.")])])])}),[],!1,null,null,null);t.default=r.exports},654:function(e,t,n){e.exports=n.p+"assets/img/phonecontrol.738f8590.jpg"}}]); \ No newline at end of file diff --git a/assets/js/162.5aceeeb6.js b/assets/js/162.5f17702d.js similarity index 91% rename from assets/js/162.5aceeeb6.js rename to assets/js/162.5f17702d.js index 95485c0ea0..9363d952ba 100644 --- a/assets/js/162.5aceeeb6.js +++ b/assets/js/162.5f17702d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[162],{1100:function(t,e,i){"use strict";i.r(e);var n=i(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"picotts-text-to-speech"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#picotts-text-to-speech"}},[t._v("#")]),t._v(" PicoTTS (text-to-speech)")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),t._v(" "),e("p",[t._v("The PicoTTS component creates speech output of given input text.")]),t._v(" "),e("p",[t._v("This component uses the picoTTS binary to create a temporary wavefile, which is played after creation.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(652),alt:"Screenshot: picoTTS plugin",title:"Screenshot: picoTTS plugin"}})]),t._v(" "),e("p",[t._v("picoTTS plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[e("strong",[t._v("Linux environment only!")]),e("br"),t._v("\nPlease install the pico2wave binary with following command (on Debian/Ubuntu based platforms):"),e("br"),t._v(" "),e("em",[t._v("“sudo apt install libttspico-utils”")]),e("br"),t._v("\nIf this plugin is not working (no speech output), please ensure, that the "),e("em",[t._v("aplay")]),t._v(" command is available.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" The text sentence, which will be converted into speech.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("language [choice]:")]),t._v(" Defines the output language. Available by picoTTS: English (UK/US), German, Italian, Spanish, French")])])])}),[],!1,null,null,null);e.default=s.exports},652:function(t,e,i){t.exports=i.p+"assets/img/picotts.5a9c73c4.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[162],{1103:function(t,e,i){"use strict";i.r(e);var n=i(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"picotts-text-to-speech"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#picotts-text-to-speech"}},[t._v("#")]),t._v(" PicoTTS (text-to-speech)")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),t._v(" "),e("p",[t._v("The PicoTTS component creates speech output of given input text.")]),t._v(" "),e("p",[t._v("This component uses the picoTTS binary to create a temporary wavefile, which is played after creation.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(655),alt:"Screenshot: picoTTS plugin",title:"Screenshot: picoTTS plugin"}})]),t._v(" "),e("p",[t._v("picoTTS plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[e("strong",[t._v("Linux environment only!")]),e("br"),t._v("\nPlease install the pico2wave binary with following command (on Debian/Ubuntu based platforms):"),e("br"),t._v(" "),e("em",[t._v("“sudo apt install libttspico-utils”")]),e("br"),t._v("\nIf this plugin is not working (no speech output), please ensure, that the "),e("em",[t._v("aplay")]),t._v(" command is available.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" The text sentence, which will be converted into speech.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("language [choice]:")]),t._v(" Defines the output language. Available by picoTTS: English (UK/US), German, Italian, Spanish, French")])])])}),[],!1,null,null,null);e.default=s.exports},655:function(t,e,i){t.exports=i.p+"assets/img/picotts.5a9c73c4.png"}}]); \ No newline at end of file diff --git a/assets/js/163.30322116.js b/assets/js/163.b8f9482f.js similarity index 97% rename from assets/js/163.30322116.js rename to assets/js/163.b8f9482f.js index 01391dbe12..feb0d28835 100644 --- a/assets/js/163.30322116.js +++ b/assets/js/163.b8f9482f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[163],{1103:function(t,e,o){"use strict";o.r(e);var r=o(2),a=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"platform-digital-out"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-digital-out"}},[t._v("#")]),t._v(" Platform Digital Out")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Personal Platform)")]),t._v(" "),e("p",[t._v("The PlatformDigitalOut plugin operates the output ports of the AsTeRICS Personal Platform. The output ports 1-2 are open-collector outputs with a deactivated pull-up resistor.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(656),alt:"Screenshot: PlatformDigitalOut plugin",title:"Screenshot: PlatformDigitalOut plugin"}})]),t._v(" "),e("p",[t._v("PlatformDigitalOut plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the Core CIM (CIM Id: 0x0602) of the AsTeRICS Personal Platform.")]),t._v(" "),e("p",[t._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),t._v(" "),e("p",[t._v("The AsteRICS Personal Platform")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("command [string]:")]),t._v(" The plugin reacts to incoming action strings starting with “@GPIO:” and a command. Valid commands are “set”, “clear”, “toggle” and “press”. The command has to be followed by a comma and the port number, for example: “@GPIO:set,1” or “@GPIO:toggle,2”. The following examples illustrate the available action strings:\n"),e("ul",[e("li",[t._v('_"@DIGITALOUT:set,1":_Output port 1 of the Personal Platform will be set (5 Volt)')]),t._v(" "),e("li",[t._v('_"@DIGITALOUT:clear,2":_Output port 2 of the Personal Platform will be cleared (0 Volt)')]),t._v(" "),e("li",[t._v('_"@DIGITALOUT:toggle,1":_Output port 1 of the Personal Platform will be changed')])])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setOutput1 to setOutput2:")]),t._v(" an incoming event on these ports will cause the corresponding output port to go to the high level.")]),t._v(" "),e("li",[e("strong",[t._v("clearOutput1 to clearOutput2:")]),t._v(" an incoming event on these ports will cause the corresponding output port to go to the low level.")])])])}),[],!1,null,null,null);e.default=a.exports},656:function(t,e,o){t.exports=o.p+"assets/img/platformdigitalout.eb94b6a5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[163],{1104:function(t,e,o){"use strict";o.r(e);var r=o(2),a=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"platform-digital-out"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-digital-out"}},[t._v("#")]),t._v(" Platform Digital Out")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Personal Platform)")]),t._v(" "),e("p",[t._v("The PlatformDigitalOut plugin operates the output ports of the AsTeRICS Personal Platform. The output ports 1-2 are open-collector outputs with a deactivated pull-up resistor.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(656),alt:"Screenshot: PlatformDigitalOut plugin",title:"Screenshot: PlatformDigitalOut plugin"}})]),t._v(" "),e("p",[t._v("PlatformDigitalOut plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the Core CIM (CIM Id: 0x0602) of the AsTeRICS Personal Platform.")]),t._v(" "),e("p",[t._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),t._v(" "),e("p",[t._v("The AsteRICS Personal Platform")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("command [string]:")]),t._v(" The plugin reacts to incoming action strings starting with “@GPIO:” and a command. Valid commands are “set”, “clear”, “toggle” and “press”. The command has to be followed by a comma and the port number, for example: “@GPIO:set,1” or “@GPIO:toggle,2”. The following examples illustrate the available action strings:\n"),e("ul",[e("li",[t._v('_"@DIGITALOUT:set,1":_Output port 1 of the Personal Platform will be set (5 Volt)')]),t._v(" "),e("li",[t._v('_"@DIGITALOUT:clear,2":_Output port 2 of the Personal Platform will be cleared (0 Volt)')]),t._v(" "),e("li",[t._v('_"@DIGITALOUT:toggle,1":_Output port 1 of the Personal Platform will be changed')])])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setOutput1 to setOutput2:")]),t._v(" an incoming event on these ports will cause the corresponding output port to go to the high level.")]),t._v(" "),e("li",[e("strong",[t._v("clearOutput1 to clearOutput2:")]),t._v(" an incoming event on these ports will cause the corresponding output port to go to the low level.")])])])}),[],!1,null,null,null);e.default=a.exports},656:function(t,e,o){t.exports=o.p+"assets/img/platformdigitalout.eb94b6a5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/164.50f9608f.js b/assets/js/164.6a0d4d64.js similarity index 89% rename from assets/js/164.50f9608f.js rename to assets/js/164.6a0d4d64.js index ec96d4cf59..b98c9ae22a 100644 --- a/assets/js/164.50f9608f.js +++ b/assets/js/164.6a0d4d64.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[164],{1104:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"platform-lcd"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-lcd"}},[t._v("#")]),t._v(" Platform LCD")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Personal Platform)")]),t._v(" "),e("p",[t._v("The PlatformLCD component handles interaction with the display and the input buttons of the AsTeRICS Personal Platform. The component allows other components to send messages to the display.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(657),alt:"Screenshot: PlatformLCD plugin",title:"Screenshot: PlatformLCD plugin"}})]),t._v(" "),e("p",[t._v("PlatformLCD plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the Core CIM (CIM Id: 0x0601) of the AsTeRICS Personal Platform.")]),t._v(" "),e("p",[t._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),t._v(" "),e("p",[t._v("The AsteRICS Personal Platform")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" The Input of the port will be displayed on the Core CIM’s display")])])])}),[],!1,null,null,null);e.default=s.exports},657:function(t,e,r){t.exports=r.p+"assets/img/platformlcd.86b9e06e.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[164],{1108:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"platform-lcd"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-lcd"}},[t._v("#")]),t._v(" Platform LCD")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Personal Platform)")]),t._v(" "),e("p",[t._v("The PlatformLCD component handles interaction with the display and the input buttons of the AsTeRICS Personal Platform. The component allows other components to send messages to the display.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(662),alt:"Screenshot: PlatformLCD plugin",title:"Screenshot: PlatformLCD plugin"}})]),t._v(" "),e("p",[t._v("PlatformLCD plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the Core CIM (CIM Id: 0x0601) of the AsTeRICS Personal Platform.")]),t._v(" "),e("p",[t._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),t._v(" "),e("p",[t._v("The AsteRICS Personal Platform")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" The Input of the port will be displayed on the Core CIM’s display")])])])}),[],!1,null,null,null);e.default=s.exports},662:function(t,e,r){t.exports=r.p+"assets/img/platformlcd.86b9e06e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/165.1c1cb742.js b/assets/js/165.e291f50e.js similarity index 95% rename from assets/js/165.1c1cb742.js rename to assets/js/165.e291f50e.js index d2f9e9ee54..5527492cee 100644 --- a/assets/js/165.1c1cb742.js +++ b/assets/js/165.e291f50e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[165],{1108:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"remotewindow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remotewindow"}},[e._v("#")]),e._v(" RemoteWindow")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("This component allows moving or setting the state of a specific window (which is active and can be identified via the window title) to desired locations on the screen. Several default locations can be selected via incoming events (top, left, bottom, right or center of the screen). X- and Y- offset values can be defined - thus it becomes possible to move the remote window e.g to a second screen.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(661),alt:"Screenshot: RemoteWindow plugin",title:"Screenshot: RemoteWindow plugin"}})]),e._v(" "),t("p",[e._v("RemoteWindow plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" The x offest value for positioning the window")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" The y offest value for positioning the window")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("moveToTop:")]),e._v(" moves the window to the top of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToBottom:")]),e._v(" moves the window to the bottom of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToLeft:")]),e._v(" moves the window to the left side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToRight:")]),e._v(" moves the window to the right side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToCenter:")]),e._v(" moves the window to the center of the screen (x and y offsets will be applied).")]),e._v(" "),t("li",[t("strong",[e._v("minimize:")]),e._v(" minimizes the window to the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("restore:")]),e._v(" restores the window from the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("bringToFront:")]),e._v(" places the window on top of other windows")]),e._v(" "),t("li",[t("strong",[e._v("moveNow:")]),e._v(" moves the window to the selected xPos and yPos positions")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("windowName [string]:")]),e._v(" the window title / name")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer, combobox selection]:")]),e._v(" the search mode for finding the window. If “exact match” is selected, the window title must be exactly the same as the given name. If “contains text” is selected, the any window title which contains the given text will be found. Note that both modes are case-sensitive !")]),e._v(" "),t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" default value for the x offset")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" default value for the y offset")]),e._v(" "),t("li",[t("strong",[e._v("autoSetPosition [boolean]:")]),e._v(" if selected, the position of the window will be set to xPos/yPos at startup")])])])}),[],!1,null,null,null);t.default=n.exports},661:function(e,t,o){e.exports=o.p+"assets/img/remotewindow.4f4d5172.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[165],{1111:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"remotewindow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remotewindow"}},[e._v("#")]),e._v(" RemoteWindow")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("This component allows moving or setting the state of a specific window (which is active and can be identified via the window title) to desired locations on the screen. Several default locations can be selected via incoming events (top, left, bottom, right or center of the screen). X- and Y- offset values can be defined - thus it becomes possible to move the remote window e.g to a second screen.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(665),alt:"Screenshot: RemoteWindow plugin",title:"Screenshot: RemoteWindow plugin"}})]),e._v(" "),t("p",[e._v("RemoteWindow plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" The x offest value for positioning the window")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" The y offest value for positioning the window")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("moveToTop:")]),e._v(" moves the window to the top of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToBottom:")]),e._v(" moves the window to the bottom of the screen (y offset will be applied). The x position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToLeft:")]),e._v(" moves the window to the left side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToRight:")]),e._v(" moves the window to the right side of the screen (x offset will be applied). The y position will not be changed.")]),e._v(" "),t("li",[t("strong",[e._v("moveToCenter:")]),e._v(" moves the window to the center of the screen (x and y offsets will be applied).")]),e._v(" "),t("li",[t("strong",[e._v("minimize:")]),e._v(" minimizes the window to the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("restore:")]),e._v(" restores the window from the taskbar")]),e._v(" "),t("li",[t("strong",[e._v("bringToFront:")]),e._v(" places the window on top of other windows")]),e._v(" "),t("li",[t("strong",[e._v("moveNow:")]),e._v(" moves the window to the selected xPos and yPos positions")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("windowName [string]:")]),e._v(" the window title / name")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer, combobox selection]:")]),e._v(" the search mode for finding the window. If “exact match” is selected, the window title must be exactly the same as the given name. If “contains text” is selected, the any window title which contains the given text will be found. Note that both modes are case-sensitive !")]),e._v(" "),t("li",[t("strong",[e._v("xPos [integer]:")]),e._v(" default value for the x offset")]),e._v(" "),t("li",[t("strong",[e._v("yPos [integer]:")]),e._v(" default value for the y offset")]),e._v(" "),t("li",[t("strong",[e._v("autoSetPosition [boolean]:")]),e._v(" if selected, the position of the window will be set to xPos/yPos at startup")])])])}),[],!1,null,null,null);t.default=n.exports},665:function(e,t,o){e.exports=o.p+"assets/img/remotewindow.4f4d5172.jpg"}}]); \ No newline at end of file diff --git a/assets/js/166.f1dd8334.js b/assets/js/166.7f1f68e1.js similarity index 93% rename from assets/js/166.f1dd8334.js rename to assets/js/166.7f1f68e1.js index e4a5827b5c..3400c8b662 100644 --- a/assets/js/166.f1dd8334.js +++ b/assets/js/166.7f1f68e1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[166],{1110:function(t,e,i){"use strict";i.r(e);var r=i(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ssvep-file-writer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssvep-file-writer"}},[t._v("#")]),t._v(" SSVEP File Writer")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Brain Computer Interface)")]),t._v(" "),e("p",[t._v("This plugin writes to a text file the 4 EEG channels along with a software trigger received through the event listener ports. This file is lately analyzed by the "),e("a",{attrs:{href:"../processors/ProtocolSSVEPTrain.htm"}},[t._v("ProtocolSSVEPTrain")]),t._v(" plugin to obtain the optimus frequencies to be used on the SSVEP detection.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(665),alt:"Screenshot: SSVEPFileWriter plugin",title:"Screenshot: SSVEPFileWriter plugin"}})]),t._v(" "),e("p",[t._v("SSVEPFileWriter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("filename [string]:")]),t._v(" Name of the file to be saved.")]),t._v(" "),e("li",[e("strong",[t._v("channel1 to channel4 [integer]:")]),t._v(" Input EEG signal from channels 1 to 4.")]),t._v(" "),e("li",[e("strong",[t._v("StimulationFrequency [integer]:")]),t._v(" If a stimulation frequency value is received before the StarStimulation Event the stimulation freqeuncy is appended to the name of the output file to be saved.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartTrial:")]),t._v(" An incoming event at this port starts the file writer process.")]),t._v(" "),e("li",[e("strong",[t._v("StopTrial:")]),t._v(" An incoming event at this port stops the file writer process.")]),t._v(" "),e("li",[e("strong",[t._v("StartStimulation:")]),t._v(" An incoming event at this port sets the trigger channel to the corresponding stimulation frequency value in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("StopStimulation:")]),t._v(" An incoming event at this port sets the trigger channel to zeros.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("DefaultFileName [string]:")]),t._v(" The default file name.")])])])}),[],!1,null,null,null);e.default=n.exports},665:function(t,e,i){t.exports=i.p+"assets/img/ssvepfilewriter.8aaaba2b.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[166],{1113:function(t,e,i){"use strict";i.r(e);var r=i(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ssvep-file-writer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssvep-file-writer"}},[t._v("#")]),t._v(" SSVEP File Writer")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Brain Computer Interface)")]),t._v(" "),e("p",[t._v("This plugin writes to a text file the 4 EEG channels along with a software trigger received through the event listener ports. This file is lately analyzed by the "),e("a",{attrs:{href:"../processors/ProtocolSSVEPTrain.htm"}},[t._v("ProtocolSSVEPTrain")]),t._v(" plugin to obtain the optimus frequencies to be used on the SSVEP detection.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(667),alt:"Screenshot: SSVEPFileWriter plugin",title:"Screenshot: SSVEPFileWriter plugin"}})]),t._v(" "),e("p",[t._v("SSVEPFileWriter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("filename [string]:")]),t._v(" Name of the file to be saved.")]),t._v(" "),e("li",[e("strong",[t._v("channel1 to channel4 [integer]:")]),t._v(" Input EEG signal from channels 1 to 4.")]),t._v(" "),e("li",[e("strong",[t._v("StimulationFrequency [integer]:")]),t._v(" If a stimulation frequency value is received before the StarStimulation Event the stimulation freqeuncy is appended to the name of the output file to be saved.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartTrial:")]),t._v(" An incoming event at this port starts the file writer process.")]),t._v(" "),e("li",[e("strong",[t._v("StopTrial:")]),t._v(" An incoming event at this port stops the file writer process.")]),t._v(" "),e("li",[e("strong",[t._v("StartStimulation:")]),t._v(" An incoming event at this port sets the trigger channel to the corresponding stimulation frequency value in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("StopStimulation:")]),t._v(" An incoming event at this port sets the trigger channel to zeros.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("DefaultFileName [string]:")]),t._v(" The default file name.")])])])}),[],!1,null,null,null);e.default=n.exports},667:function(t,e,i){t.exports=i.p+"assets/img/ssvepfilewriter.8aaaba2b.jpg"}}]); \ No newline at end of file diff --git a/assets/js/167.d4f9cf3d.js b/assets/js/167.0dc441c7.js similarity index 96% rename from assets/js/167.d4f9cf3d.js rename to assets/js/167.0dc441c7.js index 9b98ca9ac3..1ac04a9d0b 100644 --- a/assets/js/167.d4f9cf3d.js +++ b/assets/js/167.0dc441c7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[167],{1112:function(t,e,i){"use strict";i.r(e);var r=i(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ssvep-stimulator"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssvep-stimulator"}},[t._v("#")]),t._v(" SSVEP Stimulator")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Brain Computer Interface)")]),t._v(" "),e("p",[t._v("This plug-in allows the user to interact with the SW-generated flickering surfaces (panels) for SSVEP stimulation. The stimulation frequency of the panels can be modified before the stimulation is started.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(667),alt:"Screenshot: SSVEPStimulator application",title:"Screenshot: SSVEPStimulator application"}})]),t._v(" "),e("p",[t._v("SSVEPStimulator application")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("A recent version of DirectX has to be installed.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("frequency [integer]:")]),t._v(" the stimulation frequency the SW-generated panel in Hertz. The value ranges from 1 to 20 Hertz.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("startStim:")]),t._v(" starts the stimulation of the SW-generated flickering panels when receiving an event.")]),t._v(" "),e("li",[e("strong",[t._v("stopStim:")]),t._v(" stops the stimulation of the SW-generated flickering panels when receiving an event.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("stimPeriodFinished:")]),t._v(" an event is emitted through this port when the stimulation period of N miliseconds has finished.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("onBitmapFile [string]:")]),t._v(" filename of a bitmap file which is used in the on-phase of the stimulation. The file is expected in the data/SSVEPStimulator subfolder of the ARE. The filename is given without extenstion (e.g. “arrow_up” for the file “ARE/data/SSVEPStimulator/arrow_up.bmp”)")]),t._v(" "),e("li",[e("strong",[t._v("offBitmapFile [string]:")]),t._v(" filename of a bitmap file which is used in the off-phase of the stimulation. (same filname format as above)")]),t._v(" "),e("li",[e("strong",[t._v("xPosition [integer]:")]),t._v(" x-position of the flickering surface on the desktop/screen.")]),t._v(" "),e("li",[e("strong",[t._v("yPosition [integer]:")]),t._v(" y-position of the flickering surface on the desktop/screen.")]),t._v(" "),e("li",[e("strong",[t._v("frequency [integer]:")]),t._v(" default stimulation frequency of in Hertz. This property ranges from 1 to 20 Hertz.")]),t._v(" "),e("li",[e("strong",[t._v("msec [integer]:")]),t._v(" duration in miliseconds of the stimulation started by the startStimPeriod event.")])])])}),[],!1,null,null,null);e.default=s.exports},667:function(t,e,i){t.exports=i.p+"assets/img/ssvepstimulator.3255d351.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[167],{1112:function(t,e,i){"use strict";i.r(e);var r=i(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ssvep-stimulator"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssvep-stimulator"}},[t._v("#")]),t._v(" SSVEP Stimulator")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Brain Computer Interface)")]),t._v(" "),e("p",[t._v("This plug-in allows the user to interact with the SW-generated flickering surfaces (panels) for SSVEP stimulation. The stimulation frequency of the panels can be modified before the stimulation is started.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(666),alt:"Screenshot: SSVEPStimulator application",title:"Screenshot: SSVEPStimulator application"}})]),t._v(" "),e("p",[t._v("SSVEPStimulator application")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("A recent version of DirectX has to be installed.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("frequency [integer]:")]),t._v(" the stimulation frequency the SW-generated panel in Hertz. The value ranges from 1 to 20 Hertz.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("startStim:")]),t._v(" starts the stimulation of the SW-generated flickering panels when receiving an event.")]),t._v(" "),e("li",[e("strong",[t._v("stopStim:")]),t._v(" stops the stimulation of the SW-generated flickering panels when receiving an event.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("stimPeriodFinished:")]),t._v(" an event is emitted through this port when the stimulation period of N miliseconds has finished.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("onBitmapFile [string]:")]),t._v(" filename of a bitmap file which is used in the on-phase of the stimulation. The file is expected in the data/SSVEPStimulator subfolder of the ARE. The filename is given without extenstion (e.g. “arrow_up” for the file “ARE/data/SSVEPStimulator/arrow_up.bmp”)")]),t._v(" "),e("li",[e("strong",[t._v("offBitmapFile [string]:")]),t._v(" filename of a bitmap file which is used in the off-phase of the stimulation. (same filname format as above)")]),t._v(" "),e("li",[e("strong",[t._v("xPosition [integer]:")]),t._v(" x-position of the flickering surface on the desktop/screen.")]),t._v(" "),e("li",[e("strong",[t._v("yPosition [integer]:")]),t._v(" y-position of the flickering surface on the desktop/screen.")]),t._v(" "),e("li",[e("strong",[t._v("frequency [integer]:")]),t._v(" default stimulation frequency of in Hertz. This property ranges from 1 to 20 Hertz.")]),t._v(" "),e("li",[e("strong",[t._v("msec [integer]:")]),t._v(" duration in miliseconds of the stimulation started by the startStimPeriod event.")])])])}),[],!1,null,null,null);e.default=s.exports},666:function(t,e,i){t.exports=i.p+"assets/img/ssvepstimulator.3255d351.jpg"}}]); \ No newline at end of file diff --git a/assets/js/168.8cbdc88c.js b/assets/js/168.78a97289.js similarity index 92% rename from assets/js/168.8cbdc88c.js rename to assets/js/168.78a97289.js index a9c0606167..b0e1f1c5e4 100644 --- a/assets/js/168.8cbdc88c.js +++ b/assets/js/168.78a97289.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[168],{1113:function(e,t,s){"use strict";s.r(t);var a=s(2),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"serialsender"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#serialsender"}},[e._v("#")]),e._v(" SerialSender")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Generic Control Output)")]),e._v(" "),t("p",[e._v("The Serialsender can be used to send structured data to Serial devices. It has 16 data slots. Whenever a send event occurs the plugin sends every slot which is active to the device, beginning with slot0")]),e._v(" "),t("p",[t("img",{attrs:{src:s(668),alt:"Screenshot: SerialSender plugin",title:"Screenshot: SerialSender plugin"}})]),e._v(" "),t("p",[e._v("SerialSender plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("slot0 - slot15 [int]:")]),e._v(" Input data for each slot. The lower 8 Bit of the input will be sent when the slot is set Active and a send event occurs")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [string]:")]),e._v(" Defines the COM Port of the target serial device. e.g. COM0")]),e._v(" "),t("li",[t("strong",[e._v("BaudRate [integer]:")]),e._v(" Defines the Baudrate for the communication. It must match the baudrate of the target device")]),e._v(" "),t("li",[e._v("**Slot[0-15] [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the default value of a slot. This value will be overridden if there is data available at the corresponding input slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Active [boolean]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Activate a Slot. Whenever a send event occurs the SerialSender will iterate over all Slots beginning with slot 0 and send the data of every Active Slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Delay [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the delay the plugin should wait before sending data to a slot.")])])])}),[],!1,null,null,null);t.default=i.exports},668:function(e,t,s){e.exports=s.p+"assets/img/serialsender.58f95c8a.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[168],{1115:function(e,t,s){"use strict";s.r(t);var a=s(2),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"serialsender"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#serialsender"}},[e._v("#")]),e._v(" SerialSender")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Generic Control Output)")]),e._v(" "),t("p",[e._v("The Serialsender can be used to send structured data to Serial devices. It has 16 data slots. Whenever a send event occurs the plugin sends every slot which is active to the device, beginning with slot0")]),e._v(" "),t("p",[t("img",{attrs:{src:s(669),alt:"Screenshot: SerialSender plugin",title:"Screenshot: SerialSender plugin"}})]),e._v(" "),t("p",[e._v("SerialSender plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("slot0 - slot15 [int]:")]),e._v(" Input data for each slot. The lower 8 Bit of the input will be sent when the slot is set Active and a send event occurs")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [string]:")]),e._v(" Defines the COM Port of the target serial device. e.g. COM0")]),e._v(" "),t("li",[t("strong",[e._v("BaudRate [integer]:")]),e._v(" Defines the Baudrate for the communication. It must match the baudrate of the target device")]),e._v(" "),t("li",[e._v("**Slot[0-15] [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the default value of a slot. This value will be overridden if there is data available at the corresponding input slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Active [boolean]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Activate a Slot. Whenever a send event occurs the SerialSender will iterate over all Slots beginning with slot 0 and send the data of every Active Slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Delay [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the delay the plugin should wait before sending data to a slot.")])])])}),[],!1,null,null,null);t.default=i.exports},669:function(e,t,s){e.exports=s.p+"assets/img/serialsender.58f95c8a.png"}}]); \ No newline at end of file diff --git a/assets/js/169.e1b3a564.js b/assets/js/169.e852db6e.js similarity index 95% rename from assets/js/169.e1b3a564.js rename to assets/js/169.e852db6e.js index 37a61add54..87e9d70cf3 100644 --- a/assets/js/169.e1b3a564.js +++ b/assets/js/169.e852db6e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{1115:function(t,e,o){"use strict";o.r(e);var i=o(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"skywatchermount"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#skywatchermount"}},[t._v("#")]),t._v(" SkyWatcherMount")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Others)")]),t._v(" "),e("p",[t._v("The SkyWatcher plugin can be used to control telescope mounts using the Nexstar 5 protocol, e.g. Skywatcher AllView, Skywatcher Merlin via Synscan hand control.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(670),alt:"Screenshot: SkyWatcherMount plugin",title:"Screenshot: SkyWatcherMount plugin"}})]),t._v(" "),e("p",[t._v("SkyWatcherMount plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("A Nexstar5 compatible telescope mount connected to the target computer via a serial connection")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("speed [integer]:")]),t._v(" defines the movement speed of the mount (range: 0-9)")]),t._v(" "),e("li",[e("strong",[t._v("panPosition [integer]:")]),t._v(" defines the target position in steps for the pan axis for the goto command")]),t._v(" "),e("li",[e("strong",[t._v("tiltPosition [integer]:")]),t._v(" defines the target position in steps for the tilt axis for the goto command")]),t._v(" "),e("li",[e("strong",[t._v("endPointLeft [integer]:")]),t._v(" defines the maximum position the pan axis can move to the left")]),t._v(" "),e("li",[e("strong",[t._v("endPointRight [integer]:")]),t._v(" defines the maximum position the pan axis can move to the right")]),t._v(" "),e("li",[e("strong",[t._v("endPointUp [integer]:")]),t._v(" defines the maximum position the tilt axis can move up")]),t._v(" "),e("li",[e("strong",[t._v("endPointDown [integer]:")]),t._v(" defines the maximum position the tilt axis can move down")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("posX [integer]:")]),t._v(" the actual position of the pan axis in steps")]),t._v(" "),e("li",[e("strong",[t._v("posY [integer]:")]),t._v(" the actual position of the tilt axis in steps")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("goLeft:")]),t._v(" moves the mount endless to the left")]),t._v(" "),e("li",[e("strong",[t._v("goRight:")]),t._v(" moves the mount endless to the right")]),t._v(" "),e("li",[e("strong",[t._v("goUp:")]),t._v(" moves the mount endless upwards")]),t._v(" "),e("li",[e("strong",[t._v("goDown:")]),t._v(" moves the mount endless downwards")]),t._v(" "),e("li",[e("strong",[t._v("stopPan:")]),t._v(" stops the movement of the pan axis")]),t._v(" "),e("li",[e("strong",[t._v("stopTilt:")]),t._v(" stops the movement of the tilt axis")]),t._v(" "),e("li",[e("strong",[t._v("stop:")]),t._v(" stops the movement of the pan and tilt axis")]),t._v(" "),e("li",[e("strong",[t._v("goToPanPosition:")]),t._v(" move the pan axis to the step position specified by the panPosition input port")]),t._v(" "),e("li",[e("strong",[t._v("goToTiltPosition:")]),t._v(" move the tilt axis to the step position specified by the tiltPosition input port")]),t._v(" "),e("li",[e("strong",[t._v("triggerOn:")]),t._v(" if the mount has a shutter for a digital camera, the shutter is set to 1")]),t._v(" "),e("li",[e("strong",[t._v("triggerOff:")]),t._v(" if the mount has a shutter for a digital camera, the shutter is set to 0")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("SerialPort [string]:")]),t._v(" The serial port of the mount, e.g. COM1")]),t._v(" "),e("li",[e("strong",[t._v("EndPointsActive [boolean]:")]),t._v(" defines if the movement boundaries set by the endpoints are active or not.")])])])}),[],!1,null,null,null);e.default=s.exports},670:function(t,e,o){t.exports=o.p+"assets/img/skywatcher.b394a10b.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{1114:function(t,e,o){"use strict";o.r(e);var i=o(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"skywatchermount"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#skywatchermount"}},[t._v("#")]),t._v(" SkyWatcherMount")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Others)")]),t._v(" "),e("p",[t._v("The SkyWatcher plugin can be used to control telescope mounts using the Nexstar 5 protocol, e.g. Skywatcher AllView, Skywatcher Merlin via Synscan hand control.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(668),alt:"Screenshot: SkyWatcherMount plugin",title:"Screenshot: SkyWatcherMount plugin"}})]),t._v(" "),e("p",[t._v("SkyWatcherMount plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("A Nexstar5 compatible telescope mount connected to the target computer via a serial connection")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("speed [integer]:")]),t._v(" defines the movement speed of the mount (range: 0-9)")]),t._v(" "),e("li",[e("strong",[t._v("panPosition [integer]:")]),t._v(" defines the target position in steps for the pan axis for the goto command")]),t._v(" "),e("li",[e("strong",[t._v("tiltPosition [integer]:")]),t._v(" defines the target position in steps for the tilt axis for the goto command")]),t._v(" "),e("li",[e("strong",[t._v("endPointLeft [integer]:")]),t._v(" defines the maximum position the pan axis can move to the left")]),t._v(" "),e("li",[e("strong",[t._v("endPointRight [integer]:")]),t._v(" defines the maximum position the pan axis can move to the right")]),t._v(" "),e("li",[e("strong",[t._v("endPointUp [integer]:")]),t._v(" defines the maximum position the tilt axis can move up")]),t._v(" "),e("li",[e("strong",[t._v("endPointDown [integer]:")]),t._v(" defines the maximum position the tilt axis can move down")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("posX [integer]:")]),t._v(" the actual position of the pan axis in steps")]),t._v(" "),e("li",[e("strong",[t._v("posY [integer]:")]),t._v(" the actual position of the tilt axis in steps")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("goLeft:")]),t._v(" moves the mount endless to the left")]),t._v(" "),e("li",[e("strong",[t._v("goRight:")]),t._v(" moves the mount endless to the right")]),t._v(" "),e("li",[e("strong",[t._v("goUp:")]),t._v(" moves the mount endless upwards")]),t._v(" "),e("li",[e("strong",[t._v("goDown:")]),t._v(" moves the mount endless downwards")]),t._v(" "),e("li",[e("strong",[t._v("stopPan:")]),t._v(" stops the movement of the pan axis")]),t._v(" "),e("li",[e("strong",[t._v("stopTilt:")]),t._v(" stops the movement of the tilt axis")]),t._v(" "),e("li",[e("strong",[t._v("stop:")]),t._v(" stops the movement of the pan and tilt axis")]),t._v(" "),e("li",[e("strong",[t._v("goToPanPosition:")]),t._v(" move the pan axis to the step position specified by the panPosition input port")]),t._v(" "),e("li",[e("strong",[t._v("goToTiltPosition:")]),t._v(" move the tilt axis to the step position specified by the tiltPosition input port")]),t._v(" "),e("li",[e("strong",[t._v("triggerOn:")]),t._v(" if the mount has a shutter for a digital camera, the shutter is set to 1")]),t._v(" "),e("li",[e("strong",[t._v("triggerOff:")]),t._v(" if the mount has a shutter for a digital camera, the shutter is set to 0")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("SerialPort [string]:")]),t._v(" The serial port of the mount, e.g. COM1")]),t._v(" "),e("li",[e("strong",[t._v("EndPointsActive [boolean]:")]),t._v(" defines if the movement boundaries set by the endpoints are active or not.")])])])}),[],!1,null,null,null);e.default=s.exports},668:function(t,e,o){t.exports=o.p+"assets/img/skywatcher.b394a10b.png"}}]); \ No newline at end of file diff --git a/assets/js/170.1cb36eb9.js b/assets/js/170.80eb7392.js similarity index 91% rename from assets/js/170.1cb36eb9.js rename to assets/js/170.80eb7392.js index 9ff579e7cb..78bbf902e1 100644 --- a/assets/js/170.1cb36eb9.js +++ b/assets/js/170.80eb7392.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[170],{1114:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("The Synthetic Voice component uses the SAPI 5 technology to generate synthetic voice.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(669),alt:"Screenshot: SyntheticVoice plugin",title:"Screenshot: SyntheticVoice plugin"}})]),e._v(" "),t("p",[e._v("SyntheticVoice plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The appropriate voice should be installed on the platform.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [string]:")]),e._v(" The text sentence, which will be converted into speech.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("volume [integer]:")]),e._v(" Defines the volume of the voice. The volume property values should be in range from 0 to 100.")]),e._v(" "),t("li",[t("strong",[e._v("speed [integer]:")]),e._v(" Defines the speed of the voice. The speed property values should be in range from -10 to 10.")]),e._v(" "),t("li",[t("strong",[e._v("voice [string]:")]),e._v(" Specifies the voice used for the speech synthesis.")]),e._v(" "),t("li",[t("strong",[e._v("xmlTags [boolean]:")]),e._v(" Defines if the XML tags in the input text will be suported.")])])])}),[],!1,null,null,null);t.default=s.exports},669:function(e,t,i){e.exports=i.p+"assets/img/syntheticvoice.87548358.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[170],{1116:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("The Synthetic Voice component uses the SAPI 5 technology to generate synthetic voice.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(670),alt:"Screenshot: SyntheticVoice plugin",title:"Screenshot: SyntheticVoice plugin"}})]),e._v(" "),t("p",[e._v("SyntheticVoice plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The appropriate voice should be installed on the platform.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [string]:")]),e._v(" The text sentence, which will be converted into speech.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("volume [integer]:")]),e._v(" Defines the volume of the voice. The volume property values should be in range from 0 to 100.")]),e._v(" "),t("li",[t("strong",[e._v("speed [integer]:")]),e._v(" Defines the speed of the voice. The speed property values should be in range from -10 to 10.")]),e._v(" "),t("li",[t("strong",[e._v("voice [string]:")]),e._v(" Specifies the voice used for the speech synthesis.")]),e._v(" "),t("li",[t("strong",[e._v("xmlTags [boolean]:")]),e._v(" Defines if the XML tags in the input text will be suported.")])])])}),[],!1,null,null,null);t.default=s.exports},670:function(e,t,i){e.exports=i.p+"assets/img/syntheticvoice.87548358.jpg"}}]); \ No newline at end of file diff --git a/assets/js/171.e1185e60.js b/assets/js/171.43893a7d.js similarity index 94% rename from assets/js/171.e1185e60.js rename to assets/js/171.43893a7d.js index 8c8235adfc..85cd3b0324 100644 --- a/assets/js/171.e1185e60.js +++ b/assets/js/171.43893a7d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[171],{1120:function(t,e,r){"use strict";r.r(e);var n=r(2),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"textarea"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#textarea"}},[t._v("#")]),t._v(" TextArea")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("The TextArea is a GUI component which displays (optionally user-editable) text information. It features multiple rows and a scrollbar, and event for appending string text, deleting characters or sending the text content")]),t._v(" "),e("p",[e("img",{attrs:{src:r(678),alt:"Screenshot: TextArea plugin",title:"Screenshot: TextArea plugin"}})]),t._v(" "),e("p",[t._v("TextArea plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setText [string]:")]),t._v(" The text which will be displayed. It replaces the prior content of the Text Area.")]),t._v(" "),e("li",[e("strong",[t._v("appendText [string]:")]),t._v(" This string input will be appended to te current content of the Text Area.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("text [string]:")]),t._v(" The current content of the text area. Sent on incoming events at the “send” or “sendAndClear” event listener ports")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delete:")]),t._v(" Removes the last charater from the text area content.")]),t._v(" "),e("li",[e("strong",[t._v("clear:")]),t._v(" Clears the text area content.")]),t._v(" "),e("li",[e("strong",[t._v("send:")]),t._v(" Sends the text area content to te output port.")]),t._v(" "),e("li",[e("strong",[t._v("sendAndClear:")]),t._v(" Sends the text area content to te output port and clears the text area.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clicked:")]),t._v(" The event is trigger when the user click on the component.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("caption [string]:")]),t._v(" Caption of the component.")]),t._v(" "),e("li",[e("strong",[t._v("default [string]:")]),t._v(" Default content of the text area.")]),t._v(" "),e("li",[e("strong",[t._v("editable [bolean]:")]),t._v(" Defines if the text area can be edited by the user.")]),t._v(" "),e("li",[e("strong",[t._v("fontSize [integer]:")]),t._v(" The font size in pixels.")]),t._v(" "),e("li",[e("strong",[t._v("textColor [integer]:")]),t._v(" Defines color of the text.")]),t._v(" "),e("li",[e("strong",[t._v("backgroundColor [integer]:")]),t._v(" Defines background color.")]),t._v(" "),e("li",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);e.default=i.exports},678:function(t,e,r){t.exports=r.p+"assets/img/textarea.b8330bde.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[171],{1118:function(t,e,r){"use strict";r.r(e);var n=r(2),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"textarea"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#textarea"}},[t._v("#")]),t._v(" TextArea")]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("The TextArea is a GUI component which displays (optionally user-editable) text information. It features multiple rows and a scrollbar, and event for appending string text, deleting characters or sending the text content")]),t._v(" "),e("p",[e("img",{attrs:{src:r(674),alt:"Screenshot: TextArea plugin",title:"Screenshot: TextArea plugin"}})]),t._v(" "),e("p",[t._v("TextArea plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setText [string]:")]),t._v(" The text which will be displayed. It replaces the prior content of the Text Area.")]),t._v(" "),e("li",[e("strong",[t._v("appendText [string]:")]),t._v(" This string input will be appended to te current content of the Text Area.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("text [string]:")]),t._v(" The current content of the text area. Sent on incoming events at the “send” or “sendAndClear” event listener ports")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delete:")]),t._v(" Removes the last charater from the text area content.")]),t._v(" "),e("li",[e("strong",[t._v("clear:")]),t._v(" Clears the text area content.")]),t._v(" "),e("li",[e("strong",[t._v("send:")]),t._v(" Sends the text area content to te output port.")]),t._v(" "),e("li",[e("strong",[t._v("sendAndClear:")]),t._v(" Sends the text area content to te output port and clears the text area.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clicked:")]),t._v(" The event is trigger when the user click on the component.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("caption [string]:")]),t._v(" Caption of the component.")]),t._v(" "),e("li",[e("strong",[t._v("default [string]:")]),t._v(" Default content of the text area.")]),t._v(" "),e("li",[e("strong",[t._v("editable [bolean]:")]),t._v(" Defines if the text area can be edited by the user.")]),t._v(" "),e("li",[e("strong",[t._v("fontSize [integer]:")]),t._v(" The font size in pixels.")]),t._v(" "),e("li",[e("strong",[t._v("textColor [integer]:")]),t._v(" Defines color of the text.")]),t._v(" "),e("li",[e("strong",[t._v("backgroundColor [integer]:")]),t._v(" Defines background color.")]),t._v(" "),e("li",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);e.default=i.exports},674:function(t,e,r){t.exports=r.p+"assets/img/textarea.b8330bde.jpg"}}]); \ No newline at end of file diff --git a/assets/js/172.7e4325b7.js b/assets/js/172.d9d792a0.js similarity index 93% rename from assets/js/172.7e4325b7.js rename to assets/js/172.d9d792a0.js index 51c4d26ff3..438e7afcc2 100644 --- a/assets/js/172.7e4325b7.js +++ b/assets/js/172.d9d792a0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[172],{1117:function(t,e,r){"use strict";r.r(e);var i=r(2),n=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h3",{attrs:{id:"component-type-actuator-subcategory-graphical-user-interface"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-graphical-user-interface"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("The Text Display is the GUI component, which displays the text information.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(674),alt:"Screenshot: TextDisplay plugin",title:"Screenshot: TextDisplay plugin"}})]),t._v(" "),e("p",[t._v("TextDisplay plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" The text which will be displayed. "),e("strong",[t._v("This input port supports synchronization")])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clear:")]),t._v(" Removes the text from the component.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clicked:")]),t._v(" The event is trigger when the user click on the component.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("caption [string]:")]),t._v(" Caption of the component.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("default [string]:")]),t._v(" The text, which is in the box after start.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("textPosition [integer]:")]),t._v(" Position of the text in the component: left, center or right.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("textColor [integer]:")]),t._v(" Defines color of the text.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("backgroundColor [integer]:")]),t._v(" Defines background color.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])])}),[],!1,null,null,null);e.default=n.exports},674:function(t,e,r){t.exports=r.p+"assets/img/textdisplay.08959461.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[172],{1120:function(t,e,r){"use strict";r.r(e);var i=r(2),n=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h3",{attrs:{id:"component-type-actuator-subcategory-graphical-user-interface"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-actuator-subcategory-graphical-user-interface"}},[t._v("#")]),t._v(" Component Type: Actuator (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("The Text Display is the GUI component, which displays the text information.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(676),alt:"Screenshot: TextDisplay plugin",title:"Screenshot: TextDisplay plugin"}})]),t._v(" "),e("p",[t._v("TextDisplay plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" The text which will be displayed. "),e("strong",[t._v("This input port supports synchronization")])])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clear:")]),t._v(" Removes the text from the component.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clicked:")]),t._v(" The event is trigger when the user click on the component.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("caption [string]:")]),t._v(" Caption of the component.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("default [string]:")]),t._v(" The text, which is in the box after start.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("textPosition [integer]:")]),t._v(" Position of the text in the component: left, center or right.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("textColor [integer]:")]),t._v(" Defines color of the text.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("backgroundColor [integer]:")]),t._v(" Defines background color.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])])}),[],!1,null,null,null);e.default=n.exports},676:function(t,e,r){t.exports=r.p+"assets/img/textdisplay.08959461.jpg"}}]); \ No newline at end of file diff --git a/assets/js/173.ec39eaca.js b/assets/js/173.d1c41401.js similarity index 97% rename from assets/js/173.ec39eaca.js rename to assets/js/173.d1c41401.js index aed9f99bdd..a7e872f22e 100644 --- a/assets/js/173.ec39eaca.js +++ b/assets/js/173.d1c41401.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[173],{1118:function(e,t,r){"use strict";r.r(t);var n=r(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"tonegenerator"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tonegenerator"}},[e._v("#")]),e._v(" ToneGenerator")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("This plugin generates a stereo sound. The frequency of the tone for the left and right channel can be set individually.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(675),alt:"Screenshot: ToneGenerator plugin",title:"Screenshot: ToneGenerator plugin"}})]),e._v(" "),t("p",[e._v("ToneGenerator plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an audio output device to percept the sound")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("frequencyLeft[double]:")]),e._v(" specifies the frequency of the tone on the left channel")]),e._v(" "),t("li",[t("strong",[e._v("frequencyRight[double]:")]),e._v(" specifies the frequency of the tone on the right channel")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sampleRate[integer]:")]),e._v(" sets the sampleRate of the tonegenerator")])]),e._v(" "),t("h2",{attrs:{id:"eventlistener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventlistener-description"}},[e._v("#")]),e._v(" Eventlistener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" starts the playback of the tones")]),e._v(" "),t("li",[t("strong",[e._v("stop:")]),e._v(" stops the playback of the tones")])])])}),[],!1,null,null,null);t.default=s.exports},675:function(e,t,r){e.exports=r.p+"assets/img/tonegenerator.0a8e2909.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[173],{1119:function(e,t,r){"use strict";r.r(t);var n=r(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"tonegenerator"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tonegenerator"}},[e._v("#")]),e._v(" ToneGenerator")]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("This plugin generates a stereo sound. The frequency of the tone for the left and right channel can be set individually.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(675),alt:"Screenshot: ToneGenerator plugin",title:"Screenshot: ToneGenerator plugin"}})]),e._v(" "),t("p",[e._v("ToneGenerator plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an audio output device to percept the sound")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("frequencyLeft[double]:")]),e._v(" specifies the frequency of the tone on the left channel")]),e._v(" "),t("li",[t("strong",[e._v("frequencyRight[double]:")]),e._v(" specifies the frequency of the tone on the right channel")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sampleRate[integer]:")]),e._v(" sets the sampleRate of the tonegenerator")])]),e._v(" "),t("h2",{attrs:{id:"eventlistener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventlistener-description"}},[e._v("#")]),e._v(" Eventlistener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" starts the playback of the tones")]),e._v(" "),t("li",[t("strong",[e._v("stop:")]),e._v(" stops the playback of the tones")])])])}),[],!1,null,null,null);t.default=s.exports},675:function(e,t,r){e.exports=r.p+"assets/img/tonegenerator.0a8e2909.png"}}]); \ No newline at end of file diff --git a/assets/js/174.d611b832.js b/assets/js/174.754e790c.js similarity index 92% rename from assets/js/174.d611b832.js rename to assets/js/174.754e790c.js index bfcdd053e0..c2c34a08c6 100644 --- a/assets/js/174.d611b832.js +++ b/assets/js/174.754e790c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[174],{1122:function(e,t,i){"use strict";i.r(t);var r=i(2),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("This plugin plays a wave file specified in the properties on the platforms sound output.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(680),alt:"Screenshot: WavefilePlayer plugin",title:"Screenshot: WavefilePlayer plugin"}})]),e._v(" "),t("p",[e._v("WavefilePlayer plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("wavefileName[string]:")]),e._v(" this port will change the property filename to the string on the input. Thus it is possible to have other plugins change the file to be played.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Start:")]),e._v(" An incoming event at this port initiates the playback of the wave file indicated in the property "),t("em",[e._v("filename")]),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("Stop:")]),e._v(" An incoming event at this port stops the playback of the wave file indicated in the property "),t("em",[e._v("filename")]),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("VolumeUp:")]),e._v(" An incoming event increases the volume of the current playback.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeDown:")]),e._v(" An incoming event decreases the volume of the current playback.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename[string]:")]),e._v(" The value of this property specifies the file name of the wave file to be played. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);t.default=n.exports},680:function(e,t,i){e.exports=i.p+"assets/img/wavefileplayer.19bad6a5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[174],{1121:function(e,t,i){"use strict";i.r(t);var r=i(2),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("This plugin plays a wave file specified in the properties on the platforms sound output.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(677),alt:"Screenshot: WavefilePlayer plugin",title:"Screenshot: WavefilePlayer plugin"}})]),e._v(" "),t("p",[e._v("WavefilePlayer plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("wavefileName[string]:")]),e._v(" this port will change the property filename to the string on the input. Thus it is possible to have other plugins change the file to be played.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Start:")]),e._v(" An incoming event at this port initiates the playback of the wave file indicated in the property "),t("em",[e._v("filename")]),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("Stop:")]),e._v(" An incoming event at this port stops the playback of the wave file indicated in the property "),t("em",[e._v("filename")]),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("VolumeUp:")]),e._v(" An incoming event increases the volume of the current playback.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeDown:")]),e._v(" An incoming event decreases the volume of the current playback.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("filename[string]:")]),e._v(" The value of this property specifies the file name of the wave file to be played. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);t.default=n.exports},677:function(e,t,i){e.exports=i.p+"assets/img/wavefileplayer.19bad6a5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/175.3996a703.js b/assets/js/175.8d2f1b33.js similarity index 91% rename from assets/js/175.3996a703.js rename to assets/js/175.8d2f1b33.js index 62e6292e5f..331eb92d9a 100644 --- a/assets/js/175.3996a703.js +++ b/assets/js/175.8d2f1b33.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[175],{1121:function(t,e,i){"use strict";i.r(e);var r=i(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This plugin writes incoming strings into an .csv file.")]),t._v(" "),e("p",[t._v("The data gets live recorded, so it can be viewed simultaneously in an oscilloscope.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(679),alt:"Screenshot: WriteCSV plugin",title:"Screenshot: WriteCSV plugin"}})]),t._v(" "),e("p",[t._v("WriteCSV")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartWriting:")]),t._v(" Creates a new file to save the data.")]),t._v(" "),e("li",[e("strong",[t._v("StopWriting:")]),t._v(" Stops a saving process.")])]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Input[string]:")]),t._v(" The string contains the data. Example of one string: “data1;data2;data3”. To get data values and separators into this string, the StringExpander plugin can be used. After each string, a line separator (newline) is appended.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FileName[string]:")]),t._v(" Specifies the name of the file (without extension), in which the data will be recorded. Current date and time information are added to the filename.")]),t._v(" "),e("li",[e("strong",[t._v("FilePath[string]:")]),t._v(" Defines the Path were the File shoud be saved (relative from the ARE folder). If not existing, the path will be created.")])])])}),[],!1,null,null,null);e.default=s.exports},679:function(t,e,i){t.exports=i.p+"assets/img/writecsv.b915e031.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[175],{1123:function(t,e,i){"use strict";i.r(e);var r=i(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Actuator (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This plugin writes incoming strings into an .csv file.")]),t._v(" "),e("p",[t._v("The data gets live recorded, so it can be viewed simultaneously in an oscilloscope.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(680),alt:"Screenshot: WriteCSV plugin",title:"Screenshot: WriteCSV plugin"}})]),t._v(" "),e("p",[t._v("WriteCSV")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartWriting:")]),t._v(" Creates a new file to save the data.")]),t._v(" "),e("li",[e("strong",[t._v("StopWriting:")]),t._v(" Stops a saving process.")])]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Input[string]:")]),t._v(" The string contains the data. Example of one string: “data1;data2;data3”. To get data values and separators into this string, the StringExpander plugin can be used. After each string, a line separator (newline) is appended.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FileName[string]:")]),t._v(" Specifies the name of the file (without extension), in which the data will be recorded. Current date and time information are added to the filename.")]),t._v(" "),e("li",[e("strong",[t._v("FilePath[string]:")]),t._v(" Defines the Path were the File shoud be saved (relative from the ARE folder). If not existing, the path will be created.")])])])}),[],!1,null,null,null);e.default=s.exports},680:function(t,e,i){t.exports=i.p+"assets/img/writecsv.b915e031.png"}}]); \ No newline at end of file diff --git a/assets/js/176.1d05d592.js b/assets/js/176.adc830b0.js similarity index 97% rename from assets/js/176.1d05d592.js rename to assets/js/176.adc830b0.js index 7117babcf4..9eeaae7dcc 100644 --- a/assets/js/176.1d05d592.js +++ b/assets/js/176.adc830b0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[176],{1123:function(e,t,i){"use strict";i.r(t);var s=i(2),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This plugin writes the incoming data into an .edf file (http://www.edfplus.info/specs/edf.html)")]),e._v(" "),t("p",[e._v("The data gets live recorded, so it can be viewed simulaneously in the EDF-Browser ( http://www.teuniz.net/edfbrowser/ )")]),e._v(" "),t("p",[t("img",{attrs:{src:i(681),alt:"Screenshot: WriteEDF plugin",title:"Screenshot: WriteEDF plugin"}})]),e._v(" "),t("p",[e._v("WriteEDF")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CH1 - CH8[double]:")]),e._v(" these ports get the data, which will be recorded.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("PatientID[string]:")]),e._v(" specifies the name of the subject. Maximum number of characters: 80")]),e._v(" "),t("li",[t("strong",[e._v("FileName[string]:")]),e._v(" specifies the name of the file (without extension ), in which the data will be recorded")]),e._v(" "),t("li",[t("strong",[e._v("reSampling[boolean]:")]),e._v(" If this box is checked, the incoming data will be resampled with the chosen frequency of the properties samplingRateCH1 - CH8. This could be neccessary, if the incoming data frequency is not known")]),e._v(" "),t("li",[t("strong",[e._v("SamplingRateCH1 - CH8[integer]:")]),e._v(" specifies the frequency of the incoming data. Values smaller than 1 will deactivate the corresponding channel")]),e._v(" "),t("li",[t("strong",[e._v("PhysicalMinimum CH1 - CH8 [integer]:")]),e._v(" specifies the minimum values of the incoming data")]),e._v(" "),t("li",[t("strong",[e._v("PhysicalMaximum CH1 - CH8 [integer]:")]),e._v(" specifies the maximum values of the incoming data")]),e._v(" "),t("li",[t("strong",[e._v("DigitalMinimum CH1 - CH8 [integer]:")]),e._v(" specifies the minimum values of the stored data")]),e._v(" "),t("li",[t("strong",[e._v("DigitalMaximum CH1 - CH8 [integer]:")]),e._v(" specifies the maximum values of the stored data")])])])}),[],!1,null,null,null);t.default=n.exports},681:function(e,t,i){e.exports=i.p+"assets/img/writeedf.ebcf5ca6.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[176],{1124:function(e,t,i){"use strict";i.r(t);var s=i(2),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Actuator (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This plugin writes the incoming data into an .edf file (http://www.edfplus.info/specs/edf.html)")]),e._v(" "),t("p",[e._v("The data gets live recorded, so it can be viewed simulaneously in the EDF-Browser ( http://www.teuniz.net/edfbrowser/ )")]),e._v(" "),t("p",[t("img",{attrs:{src:i(681),alt:"Screenshot: WriteEDF plugin",title:"Screenshot: WriteEDF plugin"}})]),e._v(" "),t("p",[e._v("WriteEDF")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CH1 - CH8[double]:")]),e._v(" these ports get the data, which will be recorded.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("PatientID[string]:")]),e._v(" specifies the name of the subject. Maximum number of characters: 80")]),e._v(" "),t("li",[t("strong",[e._v("FileName[string]:")]),e._v(" specifies the name of the file (without extension ), in which the data will be recorded")]),e._v(" "),t("li",[t("strong",[e._v("reSampling[boolean]:")]),e._v(" If this box is checked, the incoming data will be resampled with the chosen frequency of the properties samplingRateCH1 - CH8. This could be neccessary, if the incoming data frequency is not known")]),e._v(" "),t("li",[t("strong",[e._v("SamplingRateCH1 - CH8[integer]:")]),e._v(" specifies the frequency of the incoming data. Values smaller than 1 will deactivate the corresponding channel")]),e._v(" "),t("li",[t("strong",[e._v("PhysicalMinimum CH1 - CH8 [integer]:")]),e._v(" specifies the minimum values of the incoming data")]),e._v(" "),t("li",[t("strong",[e._v("PhysicalMaximum CH1 - CH8 [integer]:")]),e._v(" specifies the maximum values of the incoming data")]),e._v(" "),t("li",[t("strong",[e._v("DigitalMinimum CH1 - CH8 [integer]:")]),e._v(" specifies the minimum values of the stored data")]),e._v(" "),t("li",[t("strong",[e._v("DigitalMaximum CH1 - CH8 [integer]:")]),e._v(" specifies the maximum values of the stored data")])])])}),[],!1,null,null,null);t.default=n.exports},681:function(e,t,i){e.exports=i.p+"assets/img/writeedf.ebcf5ca6.png"}}]); \ No newline at end of file diff --git a/assets/js/177.908d964b.js b/assets/js/177.7a5ed2e7.js similarity index 99% rename from assets/js/177.908d964b.js rename to assets/js/177.7a5ed2e7.js index 42774c1030..41cf37ec32 100644 --- a/assets/js/177.908d964b.js +++ b/assets/js/177.7a5ed2e7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[177],{1124:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"acousticscannning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#acousticscannning"}},[e._v("#")]),e._v(" AcousticScannning")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("The purpose of this component is to provide a stepwise, voice assisted selection of a large number of options. Examples for use cases are the selection of individual letters for text composition or selection of spoken phrases (eg. for environmental control via the amazon echo device). The component uses the MaryTTS text-to-speech library which supports multiple languages and voices. Currently, the component is in beta stage and only one english female voice and one german male voice are included.")]),e._v(" "),t("p",[e._v("The component provides up to 6 selectionSets. A selectionSet contains a number of individal items, seperated by commas (e.g. a number of letters for spelling words). When a selectionSet is started (by an incoming event), every selection item is spoken with an adjustable pause between the items. If an event is received at the “selection” event listener port during the presentation or pause time of a particular item, this item is added to the “preview string” output port. When the preview string contains the finalized word/phrase/sentence, it can be sent to the “selection” output port.")]),e._v(" "),t("p",[e._v("Additional functionalities can be given to the selection items via commands strings which are added to a selection item (seperated by the #-character). Supported command strings allow the deletion of the last character, the speaking of the currently composed text and other functions which are described below, thereby increasing the flexibility of the plugin. For more information see the demo model (ACS/models/componentTests/processors/AcousticScanning_test.acs)")]),e._v(" "),t("p",[t("img",{attrs:{src:n(682),alt:"Screenshot: AcousticScanning plugin",title:"Screenshot: AcousticScanning plugin"}})]),e._v(" "),t("p",[e._v("AcousticScanning plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("loadSetFile [string]:")]),e._v(" Path/name of a file which contains alternative selectionSets (which override the default selectionSets defined in the properties “selectionSet1”-“selectionSet6”. The selectionSets are provided as individual lines, terminated with a newline character. (This functionality is currently not supported.)")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("selectionPreview [string]:")]),e._v(" Output of preview string. This output port shows the current word/phrase/sentence which is composed or spelled using the stepwise scanning process.")]),e._v(" "),t("li",[t("strong",[e._v("selection [string]:")]),e._v(" The finalized word/phrase/sentence is sent to this output port when an item containing the #commit command string has been selected.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("selectionSet1-selectionSet6:")]),e._v(" an incoming event starts the acoustic scanning process of the given selection set.")]),e._v(" "),t("li",[t("strong",[e._v("select:")]),e._v(" selects the currently spoken item and adds the item text to the preview string (or executes the command associated with the selected item)")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event1-event10:")]),e._v(" These events are triggerd if the currently selected item contains the command string “event1”, “event2”, etc.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("language [string]:")]),e._v(" The languge of the text-to-speech engine (currently only “en” and “de” are supported).")]),e._v(" "),t("li",[t("strong",[e._v("voice [string]:")]),e._v(" The voice for the given language (currently this property is ignored, there is only one german and one english voice which are selected automatically due to the value of the language property).")]),e._v(" "),t("li",[t("strong",[e._v("selectionSet1 [string]:")]),e._v(" The items of selectionSet1, separated by commas.")]),e._v(" "),t("li",[t("strong",[e._v("selectionSet2-selectionSet6 [string]:")]),e._v(" The items of selection sets 2-6. In the following a list of all currently supported command strings is given:\n"),t("ul",[t("li",[t("em",[e._v("#del:")]),e._v(" deletes one charater from the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#clear:")]),e._v(" clear the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#space:")]),e._v(" adds a space key to the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#enter:")]),e._v(" adds the text {ENTER} to the preview string (this generates an enter key when sent to the keyboard actuator plugin).")]),e._v(" "),t("li",[t("em",[e._v("#speak:")]),e._v(" speaks the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#commit:")]),e._v(" sends the preview string to the output port “selection” and clears the preview string. This can be used to write the composed word/phrase to a keybaord actuator etc.")]),e._v(" "),t("li",[t("em",[e._v("#event1:")]),e._v(" sends an event via event trigger port “event1”.")]),e._v(" "),t("li",[t("em",[e._v("#event2:")]),e._v(" sends an event via event trigger port “event2”.")]),e._v(" "),t("li",[t("em",[e._v("#event3 - #event10:")]),e._v(" sends an events via event trigger ports event2 - 10.")]),e._v(" "),t("li",[t("em",[e._v("other text which follows a hash character will be spoken when the item is selected")])])])]),e._v(" "),t("li",[t("em",[e._v("An example of a valid selection set:")]),e._v(" “a,b,c,d,e,f,g” for the first 7 letters of the alphabet.")]),e._v(" "),t("li",[t("em",[e._v("Another example including command strings:")]),e._v(" “backspace#del,start music#event1”.")]),e._v(" "),t("li",[t("em",[e._v("Note")]),e._v(" that the selectionSet is specified without the double quotation marks and without spaces after the commas.")])])])}),[],!1,null,null,null);t.default=s.exports},682:function(e,t,n){e.exports=n.p+"assets/img/acousticscanning.edcc95ce.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[177],{1125:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"acousticscannning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#acousticscannning"}},[e._v("#")]),e._v(" AcousticScannning")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("The purpose of this component is to provide a stepwise, voice assisted selection of a large number of options. Examples for use cases are the selection of individual letters for text composition or selection of spoken phrases (eg. for environmental control via the amazon echo device). The component uses the MaryTTS text-to-speech library which supports multiple languages and voices. Currently, the component is in beta stage and only one english female voice and one german male voice are included.")]),e._v(" "),t("p",[e._v("The component provides up to 6 selectionSets. A selectionSet contains a number of individal items, seperated by commas (e.g. a number of letters for spelling words). When a selectionSet is started (by an incoming event), every selection item is spoken with an adjustable pause between the items. If an event is received at the “selection” event listener port during the presentation or pause time of a particular item, this item is added to the “preview string” output port. When the preview string contains the finalized word/phrase/sentence, it can be sent to the “selection” output port.")]),e._v(" "),t("p",[e._v("Additional functionalities can be given to the selection items via commands strings which are added to a selection item (seperated by the #-character). Supported command strings allow the deletion of the last character, the speaking of the currently composed text and other functions which are described below, thereby increasing the flexibility of the plugin. For more information see the demo model (ACS/models/componentTests/processors/AcousticScanning_test.acs)")]),e._v(" "),t("p",[t("img",{attrs:{src:n(682),alt:"Screenshot: AcousticScanning plugin",title:"Screenshot: AcousticScanning plugin"}})]),e._v(" "),t("p",[e._v("AcousticScanning plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("loadSetFile [string]:")]),e._v(" Path/name of a file which contains alternative selectionSets (which override the default selectionSets defined in the properties “selectionSet1”-“selectionSet6”. The selectionSets are provided as individual lines, terminated with a newline character. (This functionality is currently not supported.)")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("selectionPreview [string]:")]),e._v(" Output of preview string. This output port shows the current word/phrase/sentence which is composed or spelled using the stepwise scanning process.")]),e._v(" "),t("li",[t("strong",[e._v("selection [string]:")]),e._v(" The finalized word/phrase/sentence is sent to this output port when an item containing the #commit command string has been selected.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("selectionSet1-selectionSet6:")]),e._v(" an incoming event starts the acoustic scanning process of the given selection set.")]),e._v(" "),t("li",[t("strong",[e._v("select:")]),e._v(" selects the currently spoken item and adds the item text to the preview string (or executes the command associated with the selected item)")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("event1-event10:")]),e._v(" These events are triggerd if the currently selected item contains the command string “event1”, “event2”, etc.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("language [string]:")]),e._v(" The languge of the text-to-speech engine (currently only “en” and “de” are supported).")]),e._v(" "),t("li",[t("strong",[e._v("voice [string]:")]),e._v(" The voice for the given language (currently this property is ignored, there is only one german and one english voice which are selected automatically due to the value of the language property).")]),e._v(" "),t("li",[t("strong",[e._v("selectionSet1 [string]:")]),e._v(" The items of selectionSet1, separated by commas.")]),e._v(" "),t("li",[t("strong",[e._v("selectionSet2-selectionSet6 [string]:")]),e._v(" The items of selection sets 2-6. In the following a list of all currently supported command strings is given:\n"),t("ul",[t("li",[t("em",[e._v("#del:")]),e._v(" deletes one charater from the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#clear:")]),e._v(" clear the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#space:")]),e._v(" adds a space key to the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#enter:")]),e._v(" adds the text {ENTER} to the preview string (this generates an enter key when sent to the keyboard actuator plugin).")]),e._v(" "),t("li",[t("em",[e._v("#speak:")]),e._v(" speaks the preview string.")]),e._v(" "),t("li",[t("em",[e._v("#commit:")]),e._v(" sends the preview string to the output port “selection” and clears the preview string. This can be used to write the composed word/phrase to a keybaord actuator etc.")]),e._v(" "),t("li",[t("em",[e._v("#event1:")]),e._v(" sends an event via event trigger port “event1”.")]),e._v(" "),t("li",[t("em",[e._v("#event2:")]),e._v(" sends an event via event trigger port “event2”.")]),e._v(" "),t("li",[t("em",[e._v("#event3 - #event10:")]),e._v(" sends an events via event trigger ports event2 - 10.")]),e._v(" "),t("li",[t("em",[e._v("other text which follows a hash character will be spoken when the item is selected")])])])]),e._v(" "),t("li",[t("em",[e._v("An example of a valid selection set:")]),e._v(" “a,b,c,d,e,f,g” for the first 7 letters of the alphabet.")]),e._v(" "),t("li",[t("em",[e._v("Another example including command strings:")]),e._v(" “backspace#del,start music#event1”.")]),e._v(" "),t("li",[t("em",[e._v("Note")]),e._v(" that the selectionSet is specified without the double quotation marks and without spaces after the commas.")])])])}),[],!1,null,null,null);t.default=s.exports},682:function(e,t,n){e.exports=n.p+"assets/img/acousticscanning.edcc95ce.jpg"}}]); \ No newline at end of file diff --git a/assets/js/178.87887f38.js b/assets/js/178.adb13763.js similarity index 96% rename from assets/js/178.87887f38.js rename to assets/js/178.adb13763.js index 9d23f53e66..960f55d021 100644 --- a/assets/js/178.87887f38.js +++ b/assets/js/178.adb13763.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[178],{1128:function(t,i,e){"use strict";e.r(i);var r=e(2),s=Object(r.a)({},(function(){var t=this,i=t._self._c;return i("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[i("h1",{attrs:{id:"amplifier"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#amplifier"}},[t._v("#")]),t._v(" Amplifier")]),t._v(" "),i("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),i("p",[t._v("This component takes an input and multiplies it with a gain factor set in the properties. It can be used to amplify or reduce signal values or to invert them.")]),t._v(" "),i("p",[i("img",{attrs:{src:e(692),alt:"Screenshot: Amplifier plugin",title:"Screenshot: Amplifier plugin"}})]),t._v(" "),i("p",[t._v("Amplifier plugin")]),t._v(" "),i("h2",{attrs:{id:"input-port-description"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),i("ul",[i("li",[i("strong",[t._v("sigIn [double]:")]),t._v(" The input value to be amplified.")])]),t._v(" "),i("h2",{attrs:{id:"output-port-description"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),i("ul",[i("li",[i("strong",[t._v("sigOut [double]:")]),t._v(" The amplified output value.")])]),t._v(" "),i("h2",{attrs:{id:"properties"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),i("ul",[i("li",[i("strong",[t._v("factor [double]:")]),t._v(" The gain factor that inputs are multiplied with.")])])])}),[],!1,null,null,null);i.default=s.exports},692:function(t,i,e){t.exports=e.p+"assets/img/amplifier.244b30ab.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[178],{1129:function(t,i,e){"use strict";e.r(i);var r=e(2),s=Object(r.a)({},(function(){var t=this,i=t._self._c;return i("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[i("h1",{attrs:{id:"amplifier"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#amplifier"}},[t._v("#")]),t._v(" Amplifier")]),t._v(" "),i("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),i("p",[t._v("This component takes an input and multiplies it with a gain factor set in the properties. It can be used to amplify or reduce signal values or to invert them.")]),t._v(" "),i("p",[i("img",{attrs:{src:e(692),alt:"Screenshot: Amplifier plugin",title:"Screenshot: Amplifier plugin"}})]),t._v(" "),i("p",[t._v("Amplifier plugin")]),t._v(" "),i("h2",{attrs:{id:"input-port-description"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),i("ul",[i("li",[i("strong",[t._v("sigIn [double]:")]),t._v(" The input value to be amplified.")])]),t._v(" "),i("h2",{attrs:{id:"output-port-description"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),i("ul",[i("li",[i("strong",[t._v("sigOut [double]:")]),t._v(" The amplified output value.")])]),t._v(" "),i("h2",{attrs:{id:"properties"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),i("ul",[i("li",[i("strong",[t._v("factor [double]:")]),t._v(" The gain factor that inputs are multiplied with.")])])])}),[],!1,null,null,null);i.default=s.exports},692:function(t,i,e){t.exports=e.p+"assets/img/amplifier.244b30ab.jpg"}}]); \ No newline at end of file diff --git a/assets/js/179.49901c4d.js b/assets/js/179.0cc0889e.js similarity index 97% rename from assets/js/179.49901c4d.js rename to assets/js/179.0cc0889e.js index 03fd9ca968..9e7714d018 100644 --- a/assets/js/179.49901c4d.js +++ b/assets/js/179.0cc0889e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[179],{1129:function(e,t,r){"use strict";r.r(t);var s=r(2),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"audio-selector"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#audio-selector"}},[e._v("#")]),e._v(" Audio Selector")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("This plug-in manages the audio tracks present in the data/music folder and different external request working as an interface with the wavefileplayer plug-in")]),e._v(" "),t("p",[t("img",{attrs:{src:r(693),alt:"Screenshot: AudioSelector plugin",title:"Screenshot: AudioSelector plugin"}})]),e._v(" "),t("p",[e._v("AudioSelector plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("To work along with wavefileplayer plug-in.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("TrackName [string]:")]),e._v(" of the Track to be played. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("StartStop:")]),e._v(" Togle between play stop state request.")]),e._v(" "),t("li",[t("strong",[e._v("NextTrack:")]),e._v(" Play next track request.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeUp:")]),e._v(" Put the volume up request.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeDown:")]),e._v(" Put the volume down request.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Play:")]),e._v(" Play Track Request.")]),e._v(" "),t("li",[t("strong",[e._v("Pause:")]),e._v(" Stop Track Requests.")]),e._v(" "),t("li",[e._v("VolumeUp: Volume Up request.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeDown:")]),e._v(" Volume Down Request.")])])])}),[],!1,null,null,null);t.default=o.exports},693:function(e,t,r){e.exports=r.p+"assets/img/audioselector.7fa0cbca.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[179],{1130:function(e,t,r){"use strict";r.r(t);var s=r(2),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"audio-selector"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#audio-selector"}},[e._v("#")]),e._v(" Audio Selector")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("This plug-in manages the audio tracks present in the data/music folder and different external request working as an interface with the wavefileplayer plug-in")]),e._v(" "),t("p",[t("img",{attrs:{src:r(693),alt:"Screenshot: AudioSelector plugin",title:"Screenshot: AudioSelector plugin"}})]),e._v(" "),t("p",[e._v("AudioSelector plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("To work along with wavefileplayer plug-in.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("TrackName [string]:")]),e._v(" of the Track to be played. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("StartStop:")]),e._v(" Togle between play stop state request.")]),e._v(" "),t("li",[t("strong",[e._v("NextTrack:")]),e._v(" Play next track request.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeUp:")]),e._v(" Put the volume up request.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeDown:")]),e._v(" Put the volume down request.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Play:")]),e._v(" Play Track Request.")]),e._v(" "),t("li",[t("strong",[e._v("Pause:")]),e._v(" Stop Track Requests.")]),e._v(" "),t("li",[e._v("VolumeUp: Volume Up request.")]),e._v(" "),t("li",[t("strong",[e._v("VolumeDown:")]),e._v(" Volume Down Request.")])])])}),[],!1,null,null,null);t.default=o.exports},693:function(e,t,r){e.exports=r.p+"assets/img/audioselector.7fa0cbca.jpg"}}]); \ No newline at end of file diff --git a/assets/js/18.dec6a7c9.js b/assets/js/18.1afd62ba.js similarity index 99% rename from assets/js/18.dec6a7c9.js rename to assets/js/18.1afd62ba.js index aec7f9eefe..eaf6bb3af4 100644 --- a/assets/js/18.dec6a7c9.js +++ b/assets/js/18.1afd62ba.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{1051:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"input-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-options"}},[e._v("#")]),e._v(" Input Options")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Y0itTyz-D5Y&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=5&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Overview input options"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("This chapter is about how grid elements can be selected with different input modalities.")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("p",[e._v("Clicking on Button “Input Options” in "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#main---view"}},[e._v("Main view")]),e._v(" opens a menu with the following entries:")],1),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Mouse/Touch input:")]),e._v(" options for input types like normal mouse click, tap or hovering")]),e._v(" "),t("li",[t("strong",[e._v("Scanning:")]),e._v(" Input method for 1-2 input events, subsequently select groups of elements until one element is chosen")]),e._v(" "),t("li",[t("strong",[e._v("Direction input:")]),e._v(" Input method for 2-5 input events, 1-4 input events for navigating in different directions, 1 input event for selecting an element")]),e._v(" "),t("li",[t("strong",[e._v("Huffman input:")]),e._v(" 2-9 input events, assigns a code to each grid element which consists of an ordered sequence of the available input events")]),e._v(" "),t("li",[t("strong",[e._v("Sequential input:")]),e._v(" 2 input events, one for navigating to the next element one for selecting the current element")])]),e._v(" "),t("h2",{attrs:{id:"introduction-to-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction-to-input-events"}},[e._v("#")]),e._v(" Introduction to input events")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=ZsBsifa2kwc&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=6&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input actions and input events"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("An input event in general is any kind of defined, single user interaction. AsTeRICS Grid currently supports the following input event types:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Keypress, Mouseclick, Tap:")]),e._v(" event of pressing a key on the keyboard, click on the mouse or tap on the screen, also can be an external button press using additional external hardware")]),e._v(" "),t("li",[t("strong",[e._v("Microphone input:")]),e._v(" event from microphone input, e.g. reaching a threshold of microphone input volume at a specific frequency.")]),e._v(" "),t("li",[t("strong",[e._v("AsTeRICS ARE event:")]),e._v(" any event that is generated by a running model within the AsTeRICS Framework. This type of event is very flexible and can be e.g. eye movement, head movement or a signal of an EMG muscle activity sensor.")])]),e._v(" "),t("p",[e._v("These types of input events can be used in all input methods except "),t("em",[e._v("Mouse/Touch input")]),e._v(" where the input events are mouse movements and click/tap events.")]),e._v(" "),t("h3",{attrs:{id:"keypress-mouseclick-tap-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keypress-mouseclick-tap-input-events"}},[e._v("#")]),e._v(" “Keypress, Mouseclick, Tap” input events")]),e._v(" "),t("p",[e._v("Figure 1 shows the configuration possibilities of a “keypress, mouseclick, tap” event (f.e. choose Scanning as Input option and enable Scanning):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(514),alt:"input event keypress options"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 1: Configuration of a “keypress, mouseclick, tap” input event")])]),e._v(" "),t("p",[e._v("These are the shown elements and options:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Dropdown")]),e._v(": allows to choose between "),t("em",[e._v("Keypress, Mouseclick, Tap")]),e._v(", "),t("em",[e._v("Microphone input")]),e._v(" or "),t("em",[e._v("AsTeRICS ARE")]),e._v(" event (or "),t("em",[e._v("not defined")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("Record action")]),e._v(": click in order to start action record mode. A subsequent keypress on the keyboard, mouse click or tap on the screen will be recorded and defines which user action is used for the event.")]),e._v(" "),t("li",[t("strong",[e._v("Current action")]),e._v(": prints the currently recorded/used (e.g. "),t("code",[e._v("Space")]),e._v(").")]),e._v(" "),t("li",[t("strong",[e._v("More")]),e._v(": an accordion of additional options that can be opened/closed by a click")]),e._v(" "),t("li",[t("strong",[e._v("Timeout")]),e._v(": minimum pause in milliseconds between two subsequent actions (if faster, the second action is ignored). Mandatory if different "),t("em",[e._v("Repetitions")]),e._v(" are set for the same key in order to wait for possible upcoming repetitions before performing the action.")]),e._v(" "),t("li",[t("strong",[e._v("Repetitions")]),e._v(": the number of times the key has to be pressed in order to perform the action")]),e._v(" "),t("li",[t("strong",[e._v("Hold duration")]),e._v(": time in milliseconds how long a key has to be pressed in order to perform the action")])]),e._v(" "),t("p",[e._v("Note that it’s not possible to set both "),t("em",[e._v("Repetitions")]),e._v(" greater 1 and "),t("em",[e._v("Hold duration")]),e._v(" greater 0 at the same time.")]),e._v(" "),t("h4",{attrs:{id:"usage-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage-examples"}},[e._v("#")]),e._v(" Usage examples")]),e._v(" "),t("p",[e._v("Here are some examples for the properties "),t("em",[e._v("Timeout")]),e._v(", "),t("em",[e._v("Repetitions")]),e._v(" and "),t("em",[e._v("Hold duration")]),e._v(" that could be useful in real use cases:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Different actions with same key (e.g. Space), distinction by hold duration:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Action 1")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=0")]),e._v(" "),t("li",[t("strong",[e._v("Action 2")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=400")]),e._v(" "),t("li",[e._v("Pressing the key once performs action 1, Pressing and holding the key for 400ms performs action 2")]),e._v(" "),t("li",[e._v("This is the default configuration for input method "),t("em",[e._v("Scanning")]),e._v(" where this configuration can be tested")])])]),e._v(" "),t("li",[t("strong",[e._v("Different actions with same key (e.g. Space), distinction by repetition:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Action 1")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=0")]),e._v(" "),t("li",[t("strong",[e._v("Action 2")]),e._v(": Timeout=300, Repetitions=2, Hold Duration=0")]),e._v(" "),t("li",[e._v("Pressing the key once and waiting 300ms performs action 1, pressing the key twice (with less than 300ms pause) performs action 2")])])]),e._v(" "),t("li",[t("strong",[e._v("Filter unintended keypresses")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("all actions")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=300")]),e._v(" "),t("li",[e._v("any unintended keypresses are ignored and actions are only performed if a key is pressed longer than 300ms")])])])]),e._v(" "),t("h3",{attrs:{id:"microphone-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#microphone-input-events"}},[e._v("#")]),e._v(" Microphone input events")]),e._v(" "),t("p",[e._v("Figure 2 shows the configuration possibilities of a microphone input event:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(515),alt:"input event keypress options"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 2: Configuration of a microphone input event")])]),e._v(" "),t("p",[e._v("These are the shown elements and options:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Start/stop recording")]),e._v(": starts or stops recording from microphone. At the first time the browser will ask for permission to access the microphone. It’s required to see the live volume and frequency values below.")]),e._v(" "),t("li",[t("strong",[e._v("Volume threshold high")]),e._v(": the volume threshold for triggering a microphone event. If the volume level rises above this threshold, the microphone event is triggered.")]),e._v(" "),t("li",[t("strong",[e._v("Volume current value")]),e._v(": the current volume level recorded from microphone.")]),e._v(" "),t("li",[t("strong",[e._v("Volume threshold low")]),e._v(": after triggering a microphone event, the volume has to drop below this lower threshold before another microphone event will be triggered.")]),e._v(" "),t("li",[t("strong",[e._v("Frequency threshold high")]),e._v(": a microphone event is only triggered, if the frequency with the maximum volume is between "),t("em",[e._v("threshold low")]),e._v(" and "),t("em",[e._v("threshold high")]),e._v(". In this way it’s to some extent possible to distinguish between different sounds for triggering different actions.")]),e._v(" "),t("li",[t("strong",[e._v("Frequency current value")]),e._v(": the frequency of the current microphone input, where the volume is highest. Playing a 440 Hz note on a guitar will result in a value similar to 440 Hz.")]),e._v(" "),t("li",[t("strong",[e._v("Frequency threshold low")]),e._v(": see "),t("em",[e._v("Frequency threshold high")]),e._v(" above.")])]),e._v(" "),t("h3",{attrs:{id:"asterics-are-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-are-input-events"}},[e._v("#")]),e._v(" AsTeRICS ARE input events")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=P8s7Ylr1USM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=20&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("AsTeRICS input events"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("AsTeRICS ARE input events are triggered by external events of a running "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#asterics-model"}},[e._v("model")]),e._v(" within the "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#asterics-framework"}},[e._v("AsTeRICS Framework")]),e._v(".")],1),e._v(" "),t("p",[t("img",{attrs:{src:n(516),alt:"input event asterics are options"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 3: Configuration of an AsTeRICS ARE input event")])]),e._v(" "),t("p",[e._v("Figure 3 shows the configuration of an AsTeRICS ARE input event (AsTeRICS ARE Event is selected as select element in Figure 1, (1)):")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Dropdown")]),e._v(": allows to choose between "),t("em",[e._v("Keypress")]),e._v(" or "),t("em",[e._v("AsTeRICS ARE")]),e._v(" event (or not defined). Here, the AsTeRICS ARE event is selected.")]),e._v(" "),t("li",[t("strong",[e._v("Record ARE event")]),e._v(": start recording of AsTeRICS ARE events. Subsequently trigger the desired event in ARE in order to be recorded.")]),e._v(" "),t("li",[t("strong",[e._v("ARE URL")]),e._v(": the URL of the running AsTeRICS instance. If AsTeRICS ARE is running on the same computer this field can be empty.")]),e._v(" "),t("li",[t("strong",[e._v("List of events")]),e._v(": list of recorded ARE events. Any of these events triggers the currently configured action.")]),e._v(" "),t("li",[t("strong",[e._v("Recycle bin symbols")]),e._v(": a click on the recycle bin symbol next to a recorded event deletes it")])]),e._v(" "),t("h4",{attrs:{id:"example-of-using-an-asterics-are-event"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-of-using-an-asterics-are-event"}},[e._v("#")]),e._v(" Example of using an AsTeRICS ARE event")]),e._v(" "),t("p",[e._v("Follow these steps in order to set up an AsTeRICS Grid input method while using AsTeRICS ARE event for input:")]),e._v(" "),t("ol",[t("li",[e._v("Open the settings modal for the desired input method in AsTeRICS Grid")]),e._v(" "),t("li",[e._v("Start AsTeRICS ARE")]),e._v(" "),t("li",[e._v("Select "),t("em",[e._v("AsTeRICS ARE event")]),e._v(" for the desired input action in AsTeRICS Grid")]),e._v(" "),t("li",[e._v("Click on “Record ARE event” to start recording")]),e._v(" "),t("li",[e._v("Do any action in AsTeRICS ARE that tiggers an event, e.g. clicking on a button")]),e._v(" "),t("li",[e._v("The recorded event should be shown in AsTeRICS Grid")]),e._v(" "),t("li",[e._v("Save and close the input options in AsTeRICS Grid by clicking “OK”")]),e._v(" "),t("li",[e._v("Redo the same action in AsTeRICS ARE as before - it should trigger the configured input action in AsTeRICS Grid")])]),e._v(" "),t("h2",{attrs:{id:"input-options-modals"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-options-modals"}},[e._v("#")]),e._v(" Input options modals")]),e._v(" "),t("p",[e._v("Each input option dialog opened by “"),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#main---view"}},[e._v("Main view")]),e._v(" - Input options” has about the same structure, see Figure 4 (can be seen as shown below when input option (here: Scanning) is enabled):")],1),e._v(" "),t("p",[t("img",{attrs:{src:n(517),alt:"general structure of an input option dialog"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 4: General structure of an input option dialog, when input option is enabled")])]),e._v(" "),t("p",[e._v("These are the basic elements of an input option dialog as in figure 4:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Enable checkbox")]),e._v(": Generally enable or disable this input method. The subsequent sections are only visible if the input method is enabled.")]),e._v(" "),t("li",[t("strong",[e._v("Input section")]),e._v(": configure input actions like described in section "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("Introduction to input events")])],1),e._v(" "),t("li",[t("strong",[e._v("Advanced settings")]),e._v(": configure advanced settings for this input method")]),e._v(" "),t("li",[t("strong",[e._v("Test configuration")]),e._v(": opens a 10x10 test grid where the current input configuration can be tested")]),e._v(" "),t("li",[t("strong",[e._v("Cancel")]),e._v(": close the dialog discarding changes")]),e._v(" "),t("li",[t("strong",[e._v("OK")]),e._v(": close the dialog saving and applying changes")])]),e._v(" "),t("h3",{attrs:{id:"mouse-touch-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mouse-touch-input"}},[e._v("#")]),e._v(" Mouse/Touch input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=umxrgE0sUjw&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=7&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mouse and touch input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[t("em",[e._v("Mouse/Touch input")]),e._v(" has the following options:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select with mouse click (or tap)")]),e._v(": if checked, elements can be selected by a simple mouse click or tap on a touchscreen")]),e._v(" "),t("li",[t("strong",[e._v("Select with double click (or tap)")]),e._v(": if checked, elements can be selected by a double mouse click or tap on a touchscreen")]),e._v(" "),t("li",[t("strong",[e._v("Enable hovering")]),e._v(": enables hovering where elements are selected by moving the mouse on the element (=hovering) and waiting for some time. Hovering also works on touchscreens where the finger is held on an element for some time.\n"),t("ul",[t("li",[t("strong",[e._v("Hover time")]),e._v(": time in milliseconds to wait until a hovered element is selected. The value "),t("code",[e._v("0")]),e._v(" means that the hovered element is never selected.")]),e._v(" "),t("li",[t("strong",[e._v("Hide cursor")]),e._v(": if checked the cursor is hidden and not visible while hovering above elements. This can be useful e.g. for eye-tracking where the cursor may be distracting.")]),e._v(" "),t("li",[t("strong",[e._v("Read out active element")]),e._v(": if checked the label of the hovered element is directly read out if the active element has changed")]),e._v(" "),t("li",[t("strong",[e._v("Disable hover pane")]),e._v(": Normally (without activating this option) it is possible to continue hovering after navigation to another grid without lifting the finger (on a touchscreen). Technically this function is implented by a global invisible hover pane., normally for hovering a global invisible hover pane is inserted. However this hover pane can cause problems in combination with a software controlled mouse cursor (emulated software mouse), because click actions may not reach the actual elements. In this case it might be useful / necessary to activate the function "),t("em",[e._v("Disable hover pane")]),e._v(".")])])])]),e._v(" "),t("h4",{attrs:{id:"advanced-setting-directly-select-element"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-setting-directly-select-element"}},[e._v("#")]),e._v(" Advanced setting “directly select element”")]),e._v(" "),t("p",[e._v("In Advanced Settings there is the additional option “"),t("em",[e._v("Directly select element on pressing mouse button (not waiting for complete click)")]),e._v("”. If it is enabled, the element is selected when pressing the mouse button, not when releasing the mouse button (which is default). For Touchscreens it’s similar: an element is selected directly at touching the screen, not after lifting the finger again (which is default). This can make sense for:")]),e._v(" "),t("ul",[t("li",[e._v("facilitating operation for people which can’t reliably “tap” (quickly put finger on and lifting the finger afterwards) on the touchscreen.")]),e._v(" "),t("li",[e._v("when using AsTeRICS Grid with an eyetracker and an additional button for clicking / selecting. Since the mouse controlled via an eyetracker always moves a little bit, in default mode it can happen that instead of selecting an element, the image of an element is dragged. This can be prevented if the selection of the element is done directly at pressing the mouse button.")])]),e._v(" "),t("h3",{attrs:{id:"scanning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#scanning"}},[e._v("#")]),e._v(" Scanning")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=L7OF1lKZbLs&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=8&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method scanning"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The input method "),t("em",[e._v("Scanning")]),e._v(" is suited to be used with 1-2 input events. It works as follows:")]),e._v(" "),t("ol",[t("li",[e._v("Available elements are divided into groups")]),e._v(" "),t("li",[e._v("One group is highlighted")]),e._v(" "),t("li",[e._v("Group containing the desired element is selected")]),e._v(" "),t("li",[e._v("Remaining elements are again divided into groups")]),e._v(" "),t("li",[e._v("Steps 3 and 4 are repeated until the single desired element is selected")])]),e._v(" "),t("h4",{attrs:{id:"input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(" for "),t("em",[e._v("Scanning")]),e._v(":")],1),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select element")]),e._v(": The select element selects the current group or element, it can be chosen by clicking on "),t("em",[e._v("Record key")]),e._v(" and afterwards clicking on the desired key.")]),e._v(" "),t("li",[t("strong",[e._v("Next scanning group")]),e._v(": Here, the key for moveing the focus to the next group or element can be chosen. This input event is optional and can be omitted if timed scanning is activated (see Advanced settings). As above, the desired key shall be tapped after clicking on "),t("em",[e._v("Record key")]),e._v(".")])]),e._v(" "),t("h4",{attrs:{id:"advanced-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the advanced settings for "),t("em",[e._v("Scanning")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Vertical scanning")]),e._v(": determines the orientation element groups are build:\n"),t("ul",[t("li",[t("strong",[e._v("vertical")]),e._v(" (checked): groups are built vertical, moving left to right "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{attrs:{src:n(518),alt:"vertical scanning",width:"130"}})])]),e._v(" "),t("li",[t("strong",[e._v("horizontal")]),e._v(" (unchecked): groups are built horizontal, moving top to bottom "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{staticStyle:{"margin-left":"2em"},attrs:{src:n(519),alt:"horizontal scanning",width:"130"}})])])])]),e._v(" "),t("li",[t("strong",[e._v("Binary scanning")]),e._v(": defines if scanning groups are rows/columns or one half of existing elements:\n"),t("ul",[t("li",[t("strong",[e._v("binary")]),e._v(" (checked): groups are built by separating remaining elements in two halves each scanning step "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{attrs:{src:n(520),alt:"binary scanning",width:"130"}})])]),e._v(" "),t("li",[t("strong",[e._v("non-binary")]),e._v(" (unchecked): groups are built row/column by row/column "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{staticStyle:{"margin-left":"2em"},attrs:{src:n(521),alt:"non-binary scanning",width:"130"}})])])])]),e._v(" "),t("li",[t("strong",[e._v("Start manually by user input event")]),e._v(": if checked, scanning will only start after a user input event, e.g. pressing a key / button.")]),e._v(" "),t("li",[t("strong",[e._v("Scanning rounds until going back")]),e._v(": the number of times the current scanning elements are iterated, until scanning goes back one step. For row/column scanning a value of "),t("code",[e._v("3")]),e._v(" means that after selecting a row, the selected row is iterated 3 times and if no element is selected, scanning restarts for selecting a different row. If "),t("em",[e._v("start manually by user event")]),e._v(" is checked, this number also defines the number of iterations on the top level until scanning is stopped.")]),e._v(" "),t("li",[t("strong",[e._v("Automatic (timed) scanning")]),e._v(": if checked the active scanning group is automatically changed after a specific time, making it possible to use scanning just with a single input event\n"),t("ul",[t("li",[t("strong",[e._v("Scanning time")]),e._v(": time to wait before highlighting the next scanning group (in milliseconds)")]),e._v(" "),t("li",[t("strong",[e._v("Time factor first element")]),e._v(": the time to keep the first scanning group (e.g. first row/column) highlighted is “Scanning Time” multiplied with this factor. Increasing the time for the first group often improves usability.")])])])]),e._v(" "),t("h3",{attrs:{id:"direction-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#direction-input"}},[e._v("#")]),e._v(" Direction Input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Ui27d_ZlFz8&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=9&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method direction input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The input method "),t("em",[e._v("Direction Input")]),e._v(" is suited to be used with 2-5 "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(". It gives the possibility to simply navigate through elements in up to 4 directions.")],1),e._v(" "),t("h4",{attrs:{id:"input-events-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events-2"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible input events for "),t("em",[e._v("Direction Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select element")]),e._v(": selects the currently highlighted element")]),e._v(" "),t("li",[t("strong",[e._v("Go right")]),e._v(": navigate to the right")]),e._v(" "),t("li",[t("strong",[e._v("Go left")]),e._v(": navigate to the left")]),e._v(" "),t("li",[t("strong",[e._v("Go down")]),e._v(": navigate down")]),e._v(" "),t("li",[t("strong",[e._v("Go up")]),e._v(": navigate up")])]),e._v(" "),t("p",[e._v("The desired keys for each input event can be selected by clicking first on "),t("em",[e._v("Record key")]),e._v(" and consecutively clicking on the desired key.")]),e._v(" "),t("h4",{attrs:{id:"advanced-settings-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings-2"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the Advanced settings for "),t("em",[e._v("Direction Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Wrap around")]),e._v(": if checked navigation continues at the opposite border, so e.g. moving left on the most left element sets the focus to the most right element")]),e._v(" "),t("li",[t("strong",[e._v("Go to start position after select")]),e._v(": if checked the focused element is set to the first element after an element was selected respective")])]),e._v(" "),t("h3",{attrs:{id:"huffman-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#huffman-input"}},[e._v("#")]),e._v(" Huffman Input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=2EEmOdOQk98&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=10&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method huffman input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The input method "),t("em",[e._v("huffman input")]),e._v(" is suited to be used with 2-9 "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(". It assigns an unique code of input event sequences to each element. Triggering the respective input event sequence directly selects an element.")],1),e._v(" "),t("p",[e._v("This is an example for 2 input events and 4 elements:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Element A")]),e._v(" has code "),t("code",[e._v("11")])]),e._v(" "),t("li",[t("strong",[e._v("Element B")]),e._v(" has code "),t("code",[e._v("12")])]),e._v(" "),t("li",[t("strong",[e._v("Element C")]),e._v(" has code "),t("code",[e._v("21")])]),e._v(" "),t("li",[t("strong",[e._v("Element D")]),e._v(" has code "),t("code",[e._v("22")])])]),e._v(" "),t("p",[e._v("Triggering input event "),t("code",[e._v("1")]),e._v(" and then input event "),t("code",[e._v("2")]),e._v(" would directly select "),t("em",[e._v("Element B")]),e._v(".")]),e._v(" "),t("p",[e._v("Huffman input uses the theory of "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Huffman_coding#n-ary_Huffman_coding",target:"_blank",rel:"noopener noreferrer"}},[e._v("n-ary huffman codes"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h4",{attrs:{id:"input-events-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events-3"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible input events for "),t("em",[e._v("Huffman Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Input [1-9]")]),e._v(": defines the input events of numbers "),t("code",[e._v("1-9")]),e._v(" that are used to enter the codes for selecting the elements. At least two input events have to be defined.")])]),e._v(" "),t("h4",{attrs:{id:"advanced-settings-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings-3"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the Advanced settings for "),t("em",[e._v("Huffman Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Show numbers")]),e._v(": if checked the assigned codes are shown at the bottom of each element")]),e._v(" "),t("li",[t("strong",[e._v("Show colors")]),e._v(": if checked a color code is shown at the bottom of each element")]),e._v(" "),t("li",[t("strong",[e._v("Color whole element")]),e._v(": if checked the all grid elements are fully colored in the color of the next input event to trigger in order to select the element of interest")]),e._v(" "),t("li",[t("strong",[e._v("Mark inactive elements")]),e._v(": if checked all impossible elements are grayed out, so that e.g. starting input of the code with "),t("code",[e._v("1")]),e._v(" grays out all elements with codes that aren’t starting with "),t("code",[e._v("1")]),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("Timeout")]),e._v(": time of inactivity (in milliseconds) for resetting the current, incomplete input. So if the first digit of the code "),t("code",[e._v("1")]),e._v(" was typed accidentally the user has to wait this time in order to be able to restart with another code. Simultaneously this is the time the user has to input the next digit of the code. If set to "),t("code",[e._v("0")]),e._v(" the timeout is disabled.")]),e._v(" "),t("li",[t("strong",[e._v("Number of elements")]),e._v(": by default (if this property is set to "),t("code",[e._v("0")]),e._v(") the codes are automatically generated based on the number of elements in the current grid. This means that in one grid the n-th element could have a different code than in an other grid. To prevent this the "),t("code",[e._v("number of elements")]),e._v(" property can be set to the maximum number of elements that are existing in any grid. Therefore in every grid the n-th element will have the same code.")]),e._v(" "),t("li",[t("strong",[e._v("Color[1-n]")]),e._v(": select the colors of the input events. If e.g. three inputs 1-4 are connected to a red, yellow, green and blue button, the colors can be adapted here in order to match the button colors. Default colors are taken from the "),t("a",{attrs:{href:"https://davidmathlogic.com/colorblind/",target:"_blank",rel:"noopener noreferrer"}},[e._v("“Wong” color pallete"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"sequential-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sequential-input"}},[e._v("#")]),e._v(" Sequential Input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=plpOzwMUahw&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=11&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method sequential input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The sequential input method can be used with 2-3 "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(". 2 input events are necessary, one (Previous element) is optional. The sequential input sequentially focuses all elements and afterwards restarts at the first element.")],1),e._v(" "),t("h4",{attrs:{id:"input-events-4"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events-4"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible input events for "),t("em",[e._v("Sequential Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Next element")]),e._v(": moves the focus to the next element. If focus is currently on the last element, the first element will be focused.")]),e._v(" "),t("li",[t("strong",[e._v("Previous Element")]),e._v(" (optional): moves the focus to the previous element. If focus is currently on the first element, the last element will be focused.")]),e._v(" "),t("li",[t("strong",[e._v("Select element")]),e._v(": selects the element that is currently focused")])]),e._v(" "),t("p",[e._v("The desired keys for each input event can be selected by clicking first on "),t("em",[e._v("Record key")]),e._v(" and consecutively clicking on the desired key.")]),e._v(" "),t("h4",{attrs:{id:"advanced-settings-4"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings-4"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the Advanced settings for "),t("em",[e._v("Sequential Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Go to start position after select")]),e._v(": if checked, the first element is highlighted after selecting an element. Otherwise focus stays on the current element after selection.")]),e._v(" "),t("li",[t("strong",[e._v("Start manually by user input event")]),e._v(": if checked, the input method will only start after a user input event, e.g. pressing a key / button.")]),e._v(" "),t("li",[t("strong",[e._v("Scanning rounds until stop")]),e._v(": the number of times all elements are iterated, until the input method is stopped. Only takes effect if "),t("em",[e._v("start manually by user input event")]),e._v(" is active.")]),e._v(" "),t("li",[t("strong",[e._v("Automatic (timed) sequential input")]),e._v(": if checked the active element is automatically changed after a specific time, making it possible to use this input just with a single input event\n"),t("ul",[t("li",[t("strong",[e._v("Scanning time")]),e._v(": time to wait before highlighting the next element (in milliseconds)")]),e._v(" "),t("li",[t("strong",[e._v("Time factor first element")]),e._v(": the time to keep the first element highlighted is “Scanning Time” multiplied with this factor. Increasing the time for the first element often improves usability.")])])])]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=s.exports},514:function(e,t,n){e.exports=n.p+"assets/img/input_channel_keyboard_en1.962335af.jpg"},515:function(e,t,n){e.exports=n.p+"assets/img/input_channel_mic_en.c03ecd8d.png"},516:function(e,t,n){e.exports=n.p+"assets/img/input_channel_are_en.43aab746.jpg"},517:function(e,t,n){e.exports=n.p+"assets/img/input_options_general_en.264c9e4c.jpg"},518:function(e,t,n){e.exports=n.p+"assets/img/scanning_vertical.9edd8062.gif"},519:function(e,t,n){e.exports=n.p+"assets/img/scanning_horizontal.b306105b.gif"},520:function(e,t){e.exports="data:image/gif;base64,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"},521:function(e,t,n){e.exports=n.p+"assets/img/scanning_non_binary.f5d202a9.gif"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{1052:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"input-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-options"}},[e._v("#")]),e._v(" Input Options")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Y0itTyz-D5Y&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=5&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Overview input options"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("This chapter is about how grid elements can be selected with different input modalities.")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("p",[e._v("Clicking on Button “Input Options” in "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#main---view"}},[e._v("Main view")]),e._v(" opens a menu with the following entries:")],1),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Mouse/Touch input:")]),e._v(" options for input types like normal mouse click, tap or hovering")]),e._v(" "),t("li",[t("strong",[e._v("Scanning:")]),e._v(" Input method for 1-2 input events, subsequently select groups of elements until one element is chosen")]),e._v(" "),t("li",[t("strong",[e._v("Direction input:")]),e._v(" Input method for 2-5 input events, 1-4 input events for navigating in different directions, 1 input event for selecting an element")]),e._v(" "),t("li",[t("strong",[e._v("Huffman input:")]),e._v(" 2-9 input events, assigns a code to each grid element which consists of an ordered sequence of the available input events")]),e._v(" "),t("li",[t("strong",[e._v("Sequential input:")]),e._v(" 2 input events, one for navigating to the next element one for selecting the current element")])]),e._v(" "),t("h2",{attrs:{id:"introduction-to-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction-to-input-events"}},[e._v("#")]),e._v(" Introduction to input events")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=ZsBsifa2kwc&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=6&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input actions and input events"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("An input event in general is any kind of defined, single user interaction. AsTeRICS Grid currently supports the following input event types:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Keypress, Mouseclick, Tap:")]),e._v(" event of pressing a key on the keyboard, click on the mouse or tap on the screen, also can be an external button press using additional external hardware")]),e._v(" "),t("li",[t("strong",[e._v("Microphone input:")]),e._v(" event from microphone input, e.g. reaching a threshold of microphone input volume at a specific frequency.")]),e._v(" "),t("li",[t("strong",[e._v("AsTeRICS ARE event:")]),e._v(" any event that is generated by a running model within the AsTeRICS Framework. This type of event is very flexible and can be e.g. eye movement, head movement or a signal of an EMG muscle activity sensor.")])]),e._v(" "),t("p",[e._v("These types of input events can be used in all input methods except "),t("em",[e._v("Mouse/Touch input")]),e._v(" where the input events are mouse movements and click/tap events.")]),e._v(" "),t("h3",{attrs:{id:"keypress-mouseclick-tap-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keypress-mouseclick-tap-input-events"}},[e._v("#")]),e._v(" “Keypress, Mouseclick, Tap” input events")]),e._v(" "),t("p",[e._v("Figure 1 shows the configuration possibilities of a “keypress, mouseclick, tap” event (f.e. choose Scanning as Input option and enable Scanning):")]),e._v(" "),t("p",[t("img",{attrs:{src:n(514),alt:"input event keypress options"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 1: Configuration of a “keypress, mouseclick, tap” input event")])]),e._v(" "),t("p",[e._v("These are the shown elements and options:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Dropdown")]),e._v(": allows to choose between "),t("em",[e._v("Keypress, Mouseclick, Tap")]),e._v(", "),t("em",[e._v("Microphone input")]),e._v(" or "),t("em",[e._v("AsTeRICS ARE")]),e._v(" event (or "),t("em",[e._v("not defined")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("Record action")]),e._v(": click in order to start action record mode. A subsequent keypress on the keyboard, mouse click or tap on the screen will be recorded and defines which user action is used for the event.")]),e._v(" "),t("li",[t("strong",[e._v("Current action")]),e._v(": prints the currently recorded/used (e.g. "),t("code",[e._v("Space")]),e._v(").")]),e._v(" "),t("li",[t("strong",[e._v("More")]),e._v(": an accordion of additional options that can be opened/closed by a click")]),e._v(" "),t("li",[t("strong",[e._v("Timeout")]),e._v(": minimum pause in milliseconds between two subsequent actions (if faster, the second action is ignored). Mandatory if different "),t("em",[e._v("Repetitions")]),e._v(" are set for the same key in order to wait for possible upcoming repetitions before performing the action.")]),e._v(" "),t("li",[t("strong",[e._v("Repetitions")]),e._v(": the number of times the key has to be pressed in order to perform the action")]),e._v(" "),t("li",[t("strong",[e._v("Hold duration")]),e._v(": time in milliseconds how long a key has to be pressed in order to perform the action")])]),e._v(" "),t("p",[e._v("Note that it’s not possible to set both "),t("em",[e._v("Repetitions")]),e._v(" greater 1 and "),t("em",[e._v("Hold duration")]),e._v(" greater 0 at the same time.")]),e._v(" "),t("h4",{attrs:{id:"usage-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#usage-examples"}},[e._v("#")]),e._v(" Usage examples")]),e._v(" "),t("p",[e._v("Here are some examples for the properties "),t("em",[e._v("Timeout")]),e._v(", "),t("em",[e._v("Repetitions")]),e._v(" and "),t("em",[e._v("Hold duration")]),e._v(" that could be useful in real use cases:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Different actions with same key (e.g. Space), distinction by hold duration:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Action 1")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=0")]),e._v(" "),t("li",[t("strong",[e._v("Action 2")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=400")]),e._v(" "),t("li",[e._v("Pressing the key once performs action 1, Pressing and holding the key for 400ms performs action 2")]),e._v(" "),t("li",[e._v("This is the default configuration for input method "),t("em",[e._v("Scanning")]),e._v(" where this configuration can be tested")])])]),e._v(" "),t("li",[t("strong",[e._v("Different actions with same key (e.g. Space), distinction by repetition:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Action 1")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=0")]),e._v(" "),t("li",[t("strong",[e._v("Action 2")]),e._v(": Timeout=300, Repetitions=2, Hold Duration=0")]),e._v(" "),t("li",[e._v("Pressing the key once and waiting 300ms performs action 1, pressing the key twice (with less than 300ms pause) performs action 2")])])]),e._v(" "),t("li",[t("strong",[e._v("Filter unintended keypresses")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("all actions")]),e._v(": Timeout=0, Repetitions=1, Hold Duration=300")]),e._v(" "),t("li",[e._v("any unintended keypresses are ignored and actions are only performed if a key is pressed longer than 300ms")])])])]),e._v(" "),t("h3",{attrs:{id:"microphone-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#microphone-input-events"}},[e._v("#")]),e._v(" Microphone input events")]),e._v(" "),t("p",[e._v("Figure 2 shows the configuration possibilities of a microphone input event:")]),e._v(" "),t("p",[t("img",{attrs:{src:n(515),alt:"input event keypress options"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 2: Configuration of a microphone input event")])]),e._v(" "),t("p",[e._v("These are the shown elements and options:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Start/stop recording")]),e._v(": starts or stops recording from microphone. At the first time the browser will ask for permission to access the microphone. It’s required to see the live volume and frequency values below.")]),e._v(" "),t("li",[t("strong",[e._v("Volume threshold high")]),e._v(": the volume threshold for triggering a microphone event. If the volume level rises above this threshold, the microphone event is triggered.")]),e._v(" "),t("li",[t("strong",[e._v("Volume current value")]),e._v(": the current volume level recorded from microphone.")]),e._v(" "),t("li",[t("strong",[e._v("Volume threshold low")]),e._v(": after triggering a microphone event, the volume has to drop below this lower threshold before another microphone event will be triggered.")]),e._v(" "),t("li",[t("strong",[e._v("Frequency threshold high")]),e._v(": a microphone event is only triggered, if the frequency with the maximum volume is between "),t("em",[e._v("threshold low")]),e._v(" and "),t("em",[e._v("threshold high")]),e._v(". In this way it’s to some extent possible to distinguish between different sounds for triggering different actions.")]),e._v(" "),t("li",[t("strong",[e._v("Frequency current value")]),e._v(": the frequency of the current microphone input, where the volume is highest. Playing a 440 Hz note on a guitar will result in a value similar to 440 Hz.")]),e._v(" "),t("li",[t("strong",[e._v("Frequency threshold low")]),e._v(": see "),t("em",[e._v("Frequency threshold high")]),e._v(" above.")])]),e._v(" "),t("h3",{attrs:{id:"asterics-are-input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-are-input-events"}},[e._v("#")]),e._v(" AsTeRICS ARE input events")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=P8s7Ylr1USM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=20&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("AsTeRICS input events"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("AsTeRICS ARE input events are triggered by external events of a running "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#asterics-model"}},[e._v("model")]),e._v(" within the "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#asterics-framework"}},[e._v("AsTeRICS Framework")]),e._v(".")],1),e._v(" "),t("p",[t("img",{attrs:{src:n(516),alt:"input event asterics are options"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 3: Configuration of an AsTeRICS ARE input event")])]),e._v(" "),t("p",[e._v("Figure 3 shows the configuration of an AsTeRICS ARE input event (AsTeRICS ARE Event is selected as select element in Figure 1, (1)):")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Dropdown")]),e._v(": allows to choose between "),t("em",[e._v("Keypress")]),e._v(" or "),t("em",[e._v("AsTeRICS ARE")]),e._v(" event (or not defined). Here, the AsTeRICS ARE event is selected.")]),e._v(" "),t("li",[t("strong",[e._v("Record ARE event")]),e._v(": start recording of AsTeRICS ARE events. Subsequently trigger the desired event in ARE in order to be recorded.")]),e._v(" "),t("li",[t("strong",[e._v("ARE URL")]),e._v(": the URL of the running AsTeRICS instance. If AsTeRICS ARE is running on the same computer this field can be empty.")]),e._v(" "),t("li",[t("strong",[e._v("List of events")]),e._v(": list of recorded ARE events. Any of these events triggers the currently configured action.")]),e._v(" "),t("li",[t("strong",[e._v("Recycle bin symbols")]),e._v(": a click on the recycle bin symbol next to a recorded event deletes it")])]),e._v(" "),t("h4",{attrs:{id:"example-of-using-an-asterics-are-event"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-of-using-an-asterics-are-event"}},[e._v("#")]),e._v(" Example of using an AsTeRICS ARE event")]),e._v(" "),t("p",[e._v("Follow these steps in order to set up an AsTeRICS Grid input method while using AsTeRICS ARE event for input:")]),e._v(" "),t("ol",[t("li",[e._v("Open the settings modal for the desired input method in AsTeRICS Grid")]),e._v(" "),t("li",[e._v("Start AsTeRICS ARE")]),e._v(" "),t("li",[e._v("Select "),t("em",[e._v("AsTeRICS ARE event")]),e._v(" for the desired input action in AsTeRICS Grid")]),e._v(" "),t("li",[e._v("Click on “Record ARE event” to start recording")]),e._v(" "),t("li",[e._v("Do any action in AsTeRICS ARE that tiggers an event, e.g. clicking on a button")]),e._v(" "),t("li",[e._v("The recorded event should be shown in AsTeRICS Grid")]),e._v(" "),t("li",[e._v("Save and close the input options in AsTeRICS Grid by clicking “OK”")]),e._v(" "),t("li",[e._v("Redo the same action in AsTeRICS ARE as before - it should trigger the configured input action in AsTeRICS Grid")])]),e._v(" "),t("h2",{attrs:{id:"input-options-modals"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-options-modals"}},[e._v("#")]),e._v(" Input options modals")]),e._v(" "),t("p",[e._v("Each input option dialog opened by “"),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#main---view"}},[e._v("Main view")]),e._v(" - Input options” has about the same structure, see Figure 4 (can be seen as shown below when input option (here: Scanning) is enabled):")],1),e._v(" "),t("p",[t("img",{attrs:{src:n(517),alt:"general structure of an input option dialog"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 4: General structure of an input option dialog, when input option is enabled")])]),e._v(" "),t("p",[e._v("These are the basic elements of an input option dialog as in figure 4:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Enable checkbox")]),e._v(": Generally enable or disable this input method. The subsequent sections are only visible if the input method is enabled.")]),e._v(" "),t("li",[t("strong",[e._v("Input section")]),e._v(": configure input actions like described in section "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("Introduction to input events")])],1),e._v(" "),t("li",[t("strong",[e._v("Advanced settings")]),e._v(": configure advanced settings for this input method")]),e._v(" "),t("li",[t("strong",[e._v("Test configuration")]),e._v(": opens a 10x10 test grid where the current input configuration can be tested")]),e._v(" "),t("li",[t("strong",[e._v("Cancel")]),e._v(": close the dialog discarding changes")]),e._v(" "),t("li",[t("strong",[e._v("OK")]),e._v(": close the dialog saving and applying changes")])]),e._v(" "),t("h3",{attrs:{id:"mouse-touch-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mouse-touch-input"}},[e._v("#")]),e._v(" Mouse/Touch input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=umxrgE0sUjw&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=7&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mouse and touch input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[t("em",[e._v("Mouse/Touch input")]),e._v(" has the following options:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select with mouse click (or tap)")]),e._v(": if checked, elements can be selected by a simple mouse click or tap on a touchscreen")]),e._v(" "),t("li",[t("strong",[e._v("Select with double click (or tap)")]),e._v(": if checked, elements can be selected by a double mouse click or tap on a touchscreen")]),e._v(" "),t("li",[t("strong",[e._v("Enable hovering")]),e._v(": enables hovering where elements are selected by moving the mouse on the element (=hovering) and waiting for some time. Hovering also works on touchscreens where the finger is held on an element for some time.\n"),t("ul",[t("li",[t("strong",[e._v("Hover time")]),e._v(": time in milliseconds to wait until a hovered element is selected. The value "),t("code",[e._v("0")]),e._v(" means that the hovered element is never selected.")]),e._v(" "),t("li",[t("strong",[e._v("Hide cursor")]),e._v(": if checked the cursor is hidden and not visible while hovering above elements. This can be useful e.g. for eye-tracking where the cursor may be distracting.")]),e._v(" "),t("li",[t("strong",[e._v("Read out active element")]),e._v(": if checked the label of the hovered element is directly read out if the active element has changed")]),e._v(" "),t("li",[t("strong",[e._v("Disable hover pane")]),e._v(": Normally (without activating this option) it is possible to continue hovering after navigation to another grid without lifting the finger (on a touchscreen). Technically this function is implented by a global invisible hover pane., normally for hovering a global invisible hover pane is inserted. However this hover pane can cause problems in combination with a software controlled mouse cursor (emulated software mouse), because click actions may not reach the actual elements. In this case it might be useful / necessary to activate the function "),t("em",[e._v("Disable hover pane")]),e._v(".")])])])]),e._v(" "),t("h4",{attrs:{id:"advanced-setting-directly-select-element"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-setting-directly-select-element"}},[e._v("#")]),e._v(" Advanced setting “directly select element”")]),e._v(" "),t("p",[e._v("In Advanced Settings there is the additional option “"),t("em",[e._v("Directly select element on pressing mouse button (not waiting for complete click)")]),e._v("”. If it is enabled, the element is selected when pressing the mouse button, not when releasing the mouse button (which is default). For Touchscreens it’s similar: an element is selected directly at touching the screen, not after lifting the finger again (which is default). This can make sense for:")]),e._v(" "),t("ul",[t("li",[e._v("facilitating operation for people which can’t reliably “tap” (quickly put finger on and lifting the finger afterwards) on the touchscreen.")]),e._v(" "),t("li",[e._v("when using AsTeRICS Grid with an eyetracker and an additional button for clicking / selecting. Since the mouse controlled via an eyetracker always moves a little bit, in default mode it can happen that instead of selecting an element, the image of an element is dragged. This can be prevented if the selection of the element is done directly at pressing the mouse button.")])]),e._v(" "),t("h3",{attrs:{id:"scanning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#scanning"}},[e._v("#")]),e._v(" Scanning")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=L7OF1lKZbLs&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=8&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method scanning"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The input method "),t("em",[e._v("Scanning")]),e._v(" is suited to be used with 1-2 input events. It works as follows:")]),e._v(" "),t("ol",[t("li",[e._v("Available elements are divided into groups")]),e._v(" "),t("li",[e._v("One group is highlighted")]),e._v(" "),t("li",[e._v("Group containing the desired element is selected")]),e._v(" "),t("li",[e._v("Remaining elements are again divided into groups")]),e._v(" "),t("li",[e._v("Steps 3 and 4 are repeated until the single desired element is selected")])]),e._v(" "),t("h4",{attrs:{id:"input-events"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(" for "),t("em",[e._v("Scanning")]),e._v(":")],1),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select element")]),e._v(": The select element selects the current group or element, it can be chosen by clicking on "),t("em",[e._v("Record key")]),e._v(" and afterwards clicking on the desired key.")]),e._v(" "),t("li",[t("strong",[e._v("Next scanning group")]),e._v(": Here, the key for moveing the focus to the next group or element can be chosen. This input event is optional and can be omitted if timed scanning is activated (see Advanced settings). As above, the desired key shall be tapped after clicking on "),t("em",[e._v("Record key")]),e._v(".")])]),e._v(" "),t("h4",{attrs:{id:"advanced-settings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the advanced settings for "),t("em",[e._v("Scanning")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Vertical scanning")]),e._v(": determines the orientation element groups are build:\n"),t("ul",[t("li",[t("strong",[e._v("vertical")]),e._v(" (checked): groups are built vertical, moving left to right "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{attrs:{src:n(518),alt:"vertical scanning",width:"130"}})])]),e._v(" "),t("li",[t("strong",[e._v("horizontal")]),e._v(" (unchecked): groups are built horizontal, moving top to bottom "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{staticStyle:{"margin-left":"2em"},attrs:{src:n(519),alt:"horizontal scanning",width:"130"}})])])])]),e._v(" "),t("li",[t("strong",[e._v("Binary scanning")]),e._v(": defines if scanning groups are rows/columns or one half of existing elements:\n"),t("ul",[t("li",[t("strong",[e._v("binary")]),e._v(" (checked): groups are built by separating remaining elements in two halves each scanning step "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{attrs:{src:n(520),alt:"binary scanning",width:"130"}})])]),e._v(" "),t("li",[t("strong",[e._v("non-binary")]),e._v(" (unchecked): groups are built row/column by row/column "),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{staticStyle:{"margin-left":"2em"},attrs:{src:n(521),alt:"non-binary scanning",width:"130"}})])])])]),e._v(" "),t("li",[t("strong",[e._v("Start manually by user input event")]),e._v(": if checked, scanning will only start after a user input event, e.g. pressing a key / button.")]),e._v(" "),t("li",[t("strong",[e._v("Scanning rounds until going back")]),e._v(": the number of times the current scanning elements are iterated, until scanning goes back one step. For row/column scanning a value of "),t("code",[e._v("3")]),e._v(" means that after selecting a row, the selected row is iterated 3 times and if no element is selected, scanning restarts for selecting a different row. If "),t("em",[e._v("start manually by user event")]),e._v(" is checked, this number also defines the number of iterations on the top level until scanning is stopped.")]),e._v(" "),t("li",[t("strong",[e._v("Automatic (timed) scanning")]),e._v(": if checked the active scanning group is automatically changed after a specific time, making it possible to use scanning just with a single input event\n"),t("ul",[t("li",[t("strong",[e._v("Scanning time")]),e._v(": time to wait before highlighting the next scanning group (in milliseconds)")]),e._v(" "),t("li",[t("strong",[e._v("Time factor first element")]),e._v(": the time to keep the first scanning group (e.g. first row/column) highlighted is “Scanning Time” multiplied with this factor. Increasing the time for the first group often improves usability.")])])])]),e._v(" "),t("h3",{attrs:{id:"direction-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#direction-input"}},[e._v("#")]),e._v(" Direction Input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Ui27d_ZlFz8&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=9&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method direction input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The input method "),t("em",[e._v("Direction Input")]),e._v(" is suited to be used with 2-5 "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(". It gives the possibility to simply navigate through elements in up to 4 directions.")],1),e._v(" "),t("h4",{attrs:{id:"input-events-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events-2"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible input events for "),t("em",[e._v("Direction Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select element")]),e._v(": selects the currently highlighted element")]),e._v(" "),t("li",[t("strong",[e._v("Go right")]),e._v(": navigate to the right")]),e._v(" "),t("li",[t("strong",[e._v("Go left")]),e._v(": navigate to the left")]),e._v(" "),t("li",[t("strong",[e._v("Go down")]),e._v(": navigate down")]),e._v(" "),t("li",[t("strong",[e._v("Go up")]),e._v(": navigate up")])]),e._v(" "),t("p",[e._v("The desired keys for each input event can be selected by clicking first on "),t("em",[e._v("Record key")]),e._v(" and consecutively clicking on the desired key.")]),e._v(" "),t("h4",{attrs:{id:"advanced-settings-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings-2"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the Advanced settings for "),t("em",[e._v("Direction Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Wrap around")]),e._v(": if checked navigation continues at the opposite border, so e.g. moving left on the most left element sets the focus to the most right element")]),e._v(" "),t("li",[t("strong",[e._v("Go to start position after select")]),e._v(": if checked the focused element is set to the first element after an element was selected respective")])]),e._v(" "),t("h3",{attrs:{id:"huffman-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#huffman-input"}},[e._v("#")]),e._v(" Huffman Input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=2EEmOdOQk98&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=10&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method huffman input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The input method "),t("em",[e._v("huffman input")]),e._v(" is suited to be used with 2-9 "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(". It assigns an unique code of input event sequences to each element. Triggering the respective input event sequence directly selects an element.")],1),e._v(" "),t("p",[e._v("This is an example for 2 input events and 4 elements:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Element A")]),e._v(" has code "),t("code",[e._v("11")])]),e._v(" "),t("li",[t("strong",[e._v("Element B")]),e._v(" has code "),t("code",[e._v("12")])]),e._v(" "),t("li",[t("strong",[e._v("Element C")]),e._v(" has code "),t("code",[e._v("21")])]),e._v(" "),t("li",[t("strong",[e._v("Element D")]),e._v(" has code "),t("code",[e._v("22")])])]),e._v(" "),t("p",[e._v("Triggering input event "),t("code",[e._v("1")]),e._v(" and then input event "),t("code",[e._v("2")]),e._v(" would directly select "),t("em",[e._v("Element B")]),e._v(".")]),e._v(" "),t("p",[e._v("Huffman input uses the theory of "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Huffman_coding#n-ary_Huffman_coding",target:"_blank",rel:"noopener noreferrer"}},[e._v("n-ary huffman codes"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h4",{attrs:{id:"input-events-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events-3"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible input events for "),t("em",[e._v("Huffman Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Input [1-9]")]),e._v(": defines the input events of numbers "),t("code",[e._v("1-9")]),e._v(" that are used to enter the codes for selecting the elements. At least two input events have to be defined.")])]),e._v(" "),t("h4",{attrs:{id:"advanced-settings-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings-3"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the Advanced settings for "),t("em",[e._v("Huffman Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Show numbers")]),e._v(": if checked the assigned codes are shown at the bottom of each element")]),e._v(" "),t("li",[t("strong",[e._v("Show colors")]),e._v(": if checked a color code is shown at the bottom of each element")]),e._v(" "),t("li",[t("strong",[e._v("Color whole element")]),e._v(": if checked the all grid elements are fully colored in the color of the next input event to trigger in order to select the element of interest")]),e._v(" "),t("li",[t("strong",[e._v("Mark inactive elements")]),e._v(": if checked all impossible elements are grayed out, so that e.g. starting input of the code with "),t("code",[e._v("1")]),e._v(" grays out all elements with codes that aren’t starting with "),t("code",[e._v("1")]),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("Timeout")]),e._v(": time of inactivity (in milliseconds) for resetting the current, incomplete input. So if the first digit of the code "),t("code",[e._v("1")]),e._v(" was typed accidentally the user has to wait this time in order to be able to restart with another code. Simultaneously this is the time the user has to input the next digit of the code. If set to "),t("code",[e._v("0")]),e._v(" the timeout is disabled.")]),e._v(" "),t("li",[t("strong",[e._v("Number of elements")]),e._v(": by default (if this property is set to "),t("code",[e._v("0")]),e._v(") the codes are automatically generated based on the number of elements in the current grid. This means that in one grid the n-th element could have a different code than in an other grid. To prevent this the "),t("code",[e._v("number of elements")]),e._v(" property can be set to the maximum number of elements that are existing in any grid. Therefore in every grid the n-th element will have the same code.")]),e._v(" "),t("li",[t("strong",[e._v("Color[1-n]")]),e._v(": select the colors of the input events. If e.g. three inputs 1-4 are connected to a red, yellow, green and blue button, the colors can be adapted here in order to match the button colors. Default colors are taken from the "),t("a",{attrs:{href:"https://davidmathlogic.com/colorblind/",target:"_blank",rel:"noopener noreferrer"}},[e._v("“Wong” color pallete"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"sequential-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sequential-input"}},[e._v("#")]),e._v(" Sequential Input")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=plpOzwMUahw&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=11&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Input method sequential input"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The sequential input method can be used with 2-3 "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html#introduction-to-input-events"}},[e._v("input events")]),e._v(". 2 input events are necessary, one (Previous element) is optional. The sequential input sequentially focuses all elements and afterwards restarts at the first element.")],1),e._v(" "),t("h4",{attrs:{id:"input-events-4"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-events-4"}},[e._v("#")]),e._v(" Input events")]),e._v(" "),t("p",[e._v("These are the possible input events for "),t("em",[e._v("Sequential Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Next element")]),e._v(": moves the focus to the next element. If focus is currently on the last element, the first element will be focused.")]),e._v(" "),t("li",[t("strong",[e._v("Previous Element")]),e._v(" (optional): moves the focus to the previous element. If focus is currently on the first element, the last element will be focused.")]),e._v(" "),t("li",[t("strong",[e._v("Select element")]),e._v(": selects the element that is currently focused")])]),e._v(" "),t("p",[e._v("The desired keys for each input event can be selected by clicking first on "),t("em",[e._v("Record key")]),e._v(" and consecutively clicking on the desired key.")]),e._v(" "),t("h4",{attrs:{id:"advanced-settings-4"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-settings-4"}},[e._v("#")]),e._v(" Advanced Settings")]),e._v(" "),t("p",[e._v("These are the Advanced settings for "),t("em",[e._v("Sequential Input")]),e._v(":")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Go to start position after select")]),e._v(": if checked, the first element is highlighted after selecting an element. Otherwise focus stays on the current element after selection.")]),e._v(" "),t("li",[t("strong",[e._v("Start manually by user input event")]),e._v(": if checked, the input method will only start after a user input event, e.g. pressing a key / button.")]),e._v(" "),t("li",[t("strong",[e._v("Scanning rounds until stop")]),e._v(": the number of times all elements are iterated, until the input method is stopped. Only takes effect if "),t("em",[e._v("start manually by user input event")]),e._v(" is active.")]),e._v(" "),t("li",[t("strong",[e._v("Automatic (timed) sequential input")]),e._v(": if checked the active element is automatically changed after a specific time, making it possible to use this input just with a single input event\n"),t("ul",[t("li",[t("strong",[e._v("Scanning time")]),e._v(": time to wait before highlighting the next element (in milliseconds)")]),e._v(" "),t("li",[t("strong",[e._v("Time factor first element")]),e._v(": the time to keep the first element highlighted is “Scanning Time” multiplied with this factor. Increasing the time for the first element often improves usability.")])])])]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=s.exports},514:function(e,t,n){e.exports=n.p+"assets/img/input_channel_keyboard_en1.962335af.jpg"},515:function(e,t,n){e.exports=n.p+"assets/img/input_channel_mic_en.c03ecd8d.png"},516:function(e,t,n){e.exports=n.p+"assets/img/input_channel_are_en.43aab746.jpg"},517:function(e,t,n){e.exports=n.p+"assets/img/input_options_general_en.264c9e4c.jpg"},518:function(e,t,n){e.exports=n.p+"assets/img/scanning_vertical.9edd8062.gif"},519:function(e,t,n){e.exports=n.p+"assets/img/scanning_horizontal.b306105b.gif"},520:function(e,t){e.exports="data:image/gif;base64,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"},521:function(e,t,n){e.exports=n.p+"assets/img/scanning_non_binary.f5d202a9.gif"}}]); \ No newline at end of file diff --git a/assets/js/180.7e542b45.js b/assets/js/180.3b4a13f6.js similarity index 98% rename from assets/js/180.7e542b45.js rename to assets/js/180.3b4a13f6.js index e4db237b5f..2c5bf386d6 100644 --- a/assets/js/180.7e542b45.js +++ b/assets/js/180.3b4a13f6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[180],{1130:function(e,t,a){"use strict";a.r(t);var i=a(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"averager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#averager"}},[e._v("#")]),e._v(" Averager")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Basic Math)")]),e._v(" "),t("p",[e._v("The averager component takes an input stream and forwards the average of certain amount of buffered last inputs. The size of the buffer can be set via a property. The component can be used to eliminate spikes in an input data stream. Furthermore the unit can also be used as an accumulator which accumulates all inputs within a certain time interval.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(694),alt:"Screenshot: Averager plugin",title:"Screenshot: Averager plugin"}})]),e._v(" "),t("p",[e._v("Averager plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [double]:")]),e._v(" This port reads the inputs to be averaged.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [double]:")]),e._v(" This port provides the current average of the buffered inputs.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enablePlugin:")]),e._v(" Enables the functionality of this plugin.")]),e._v(" "),t("li",[t("strong",[e._v("disablePlugin:")]),e._v(" Disables the functionality of this plugin. New values aren’t accumulated anymore and no output is sent to the output port. If property autoReenableTime set, the plugin is automatically re-enabled after the time defined by this property. Generally disabling is delayed until the buffer of values is full, preventing any startup glitches.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enabled [boolean]:")]),e._v(" if true (default), the plugin is enabled, if false the plugin does nothing. Generally disabling is delayed until the buffer of values is full, preventing any startup glitches.")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer]:")]),e._v(" Denotes the operating mode of the unit, three modes are available:\n"),t("ul",[t("li",[t("em",[e._v("average:")]),e._v(" unit performs averaging calculations and emits double values average with integer.")]),e._v(" "),t("li",[t("em",[e._v("output:")]),e._v(" unit performs calculations and rounds result to integer.")]),e._v(" "),t("li",[t("em",[e._v("accumulate:")]),e._v(" unit accumulates inputs for certain amount of time.")])])]),e._v(" "),t("li",[t("strong",[e._v("bufferSize [integer]:")]),e._v(" Specifies the size of the buffer in the averaging modes or the amount of milliseconds to accumulate in the accumulator mode.")]),e._v(" "),t("li",[t("strong",[e._v("autoReenableTime [integer]:")]),e._v(" Time in ms, after the plugin automatically re-enables itself after being disabled. Set to zero (default) to deactivate this functionality (never auto re-enable).")])])])}),[],!1,null,null,null);t.default=r.exports},694:function(e,t,a){e.exports=a.p+"assets/img/averager.e86f771d.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[180],{1131:function(e,t,a){"use strict";a.r(t);var i=a(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"averager"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#averager"}},[e._v("#")]),e._v(" Averager")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Basic Math)")]),e._v(" "),t("p",[e._v("The averager component takes an input stream and forwards the average of certain amount of buffered last inputs. The size of the buffer can be set via a property. The component can be used to eliminate spikes in an input data stream. Furthermore the unit can also be used as an accumulator which accumulates all inputs within a certain time interval.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(694),alt:"Screenshot: Averager plugin",title:"Screenshot: Averager plugin"}})]),e._v(" "),t("p",[e._v("Averager plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [double]:")]),e._v(" This port reads the inputs to be averaged.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [double]:")]),e._v(" This port provides the current average of the buffered inputs.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enablePlugin:")]),e._v(" Enables the functionality of this plugin.")]),e._v(" "),t("li",[t("strong",[e._v("disablePlugin:")]),e._v(" Disables the functionality of this plugin. New values aren’t accumulated anymore and no output is sent to the output port. If property autoReenableTime set, the plugin is automatically re-enabled after the time defined by this property. Generally disabling is delayed until the buffer of values is full, preventing any startup glitches.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enabled [boolean]:")]),e._v(" if true (default), the plugin is enabled, if false the plugin does nothing. Generally disabling is delayed until the buffer of values is full, preventing any startup glitches.")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer]:")]),e._v(" Denotes the operating mode of the unit, three modes are available:\n"),t("ul",[t("li",[t("em",[e._v("average:")]),e._v(" unit performs averaging calculations and emits double values average with integer.")]),e._v(" "),t("li",[t("em",[e._v("output:")]),e._v(" unit performs calculations and rounds result to integer.")]),e._v(" "),t("li",[t("em",[e._v("accumulate:")]),e._v(" unit accumulates inputs for certain amount of time.")])])]),e._v(" "),t("li",[t("strong",[e._v("bufferSize [integer]:")]),e._v(" Specifies the size of the buffer in the averaging modes or the amount of milliseconds to accumulate in the accumulator mode.")]),e._v(" "),t("li",[t("strong",[e._v("autoReenableTime [integer]:")]),e._v(" Time in ms, after the plugin automatically re-enables itself after being disabled. Set to zero (default) to deactivate this functionality (never auto re-enable).")])])])}),[],!1,null,null,null);t.default=r.exports},694:function(e,t,a){e.exports=a.p+"assets/img/averager.e86f771d.jpg"}}]); \ No newline at end of file diff --git a/assets/js/181.7ea61dc6.js b/assets/js/181.52184a9b.js similarity index 95% rename from assets/js/181.7ea61dc6.js rename to assets/js/181.52184a9b.js index 4396a74d52..5b1b912c75 100644 --- a/assets/js/181.7ea61dc6.js +++ b/assets/js/181.52184a9b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[181],{1131:function(t,e,i){"use strict";i.r(e);var r=i(2),o=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"basic-tremor-reduction-algorithms"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#basic-tremor-reduction-algorithms"}},[t._v("#")]),t._v(" Basic Tremor Reduction algorithms")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Singal Shaping)")]),t._v(" "),e("p",[t._v("This plugin contains three algorithms for user hand tremor reduction: Arithmetic Mean, Outlier Reduction and Exponential Smoothing. The Arithmetic Mean algorithm calculates the cursor position as an average of the past n cursor positions. N is defined by the bufferSize parameter. The Outlier Reduction algorithm keeps the maximum distance between two followed cursor positions. The maximum distance is defined by the maxDistance parameter. If the distance between two cursor positions is greater than maxDistance, it is reduced to the value of maxDistance. The Exponential Smoothing algorithm implements the "),e("a",{attrs:{href:"http://en.wikipedia.org/wiki/Exponential_smoothing",target:"_blank",rel:"noopener noreferrer"}},[t._v("Exponential smoothing"),e("OutboundLink")],1),t._v(" technique. The factor parameter defines the Exponential Smoothing and the degree parameters define the degree of the equation.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(695),alt:"Screenshot: Basic Tremor Reduction algorithms plugin",title:"Screenshot: Basic Tremor Reduction algorithms plugin"}})]),t._v(" "),e("p",[t._v("Basic Tremor Reduction algorithms plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputX [integer]:")]),t._v(" Input mouse X position.")]),t._v(" "),e("li",[e("strong",[t._v("inputY [integer]:")]),t._v(" Input mouse Y position.")]),t._v(" "),e("li",[e("strong",[t._v("bufferSize [integer]:")]),t._v(" The new buffer size value for the Arithmetic Mean algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("maxDistance [double]:")]),t._v(" The new maximum distance value for the Outlier Reduction algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("factor [double]:")]),t._v(" The new factor value for Exponential Smoothing algorithm.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputX [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output mouse X position.")]),t._v(" "),e("li",[e("strong",[t._v("outputY [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output mouse Y position.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("algorithm [integer]:")]),t._v(" Defines the algorithm used for the tremor reduction.")]),t._v(" "),e("li",[e("strong",[t._v("eventsType [integer]:")]),t._v(" Defines if the mouse coordinates are absolute or relative.")]),t._v(" "),e("li",[e("strong",[t._v("bufferSize [integer]:")]),t._v(" The buffer size value for the Arithmetic Mean algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("maxDistance [double]:")]),t._v(" The maximum distance value for the Outlier Reduction algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("factor [double]:")]),t._v(" The factor value for Exponential Smoothing algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("degree [integer]:")]),t._v(" The degree of the equation for Exponential Smoothing algorithm.")])])])}),[],!1,null,null,null);e.default=o.exports},695:function(t,e,i){t.exports=i.p+"assets/img/basictralgorithms.e1416158.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[181],{1133:function(t,e,i){"use strict";i.r(e);var r=i(2),o=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"basic-tremor-reduction-algorithms"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#basic-tremor-reduction-algorithms"}},[t._v("#")]),t._v(" Basic Tremor Reduction algorithms")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Singal Shaping)")]),t._v(" "),e("p",[t._v("This plugin contains three algorithms for user hand tremor reduction: Arithmetic Mean, Outlier Reduction and Exponential Smoothing. The Arithmetic Mean algorithm calculates the cursor position as an average of the past n cursor positions. N is defined by the bufferSize parameter. The Outlier Reduction algorithm keeps the maximum distance between two followed cursor positions. The maximum distance is defined by the maxDistance parameter. If the distance between two cursor positions is greater than maxDistance, it is reduced to the value of maxDistance. The Exponential Smoothing algorithm implements the "),e("a",{attrs:{href:"http://en.wikipedia.org/wiki/Exponential_smoothing",target:"_blank",rel:"noopener noreferrer"}},[t._v("Exponential smoothing"),e("OutboundLink")],1),t._v(" technique. The factor parameter defines the Exponential Smoothing and the degree parameters define the degree of the equation.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(696),alt:"Screenshot: Basic Tremor Reduction algorithms plugin",title:"Screenshot: Basic Tremor Reduction algorithms plugin"}})]),t._v(" "),e("p",[t._v("Basic Tremor Reduction algorithms plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputX [integer]:")]),t._v(" Input mouse X position.")]),t._v(" "),e("li",[e("strong",[t._v("inputY [integer]:")]),t._v(" Input mouse Y position.")]),t._v(" "),e("li",[e("strong",[t._v("bufferSize [integer]:")]),t._v(" The new buffer size value for the Arithmetic Mean algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("maxDistance [double]:")]),t._v(" The new maximum distance value for the Outlier Reduction algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("factor [double]:")]),t._v(" The new factor value for Exponential Smoothing algorithm.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputX [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output mouse X position.")]),t._v(" "),e("li",[e("strong",[t._v("outputY [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output mouse Y position.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("algorithm [integer]:")]),t._v(" Defines the algorithm used for the tremor reduction.")]),t._v(" "),e("li",[e("strong",[t._v("eventsType [integer]:")]),t._v(" Defines if the mouse coordinates are absolute or relative.")]),t._v(" "),e("li",[e("strong",[t._v("bufferSize [integer]:")]),t._v(" The buffer size value for the Arithmetic Mean algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("maxDistance [double]:")]),t._v(" The maximum distance value for the Outlier Reduction algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("factor [double]:")]),t._v(" The factor value for Exponential Smoothing algorithm.")]),t._v(" "),e("li",[e("strong",[t._v("degree [integer]:")]),t._v(" The degree of the equation for Exponential Smoothing algorithm.")])])])}),[],!1,null,null,null);e.default=o.exports},696:function(t,e,i){t.exports=i.p+"assets/img/basictralgorithms.e1416158.jpg"}}]); \ No newline at end of file diff --git a/assets/js/182.1d59391c.js b/assets/js/182.cc67506c.js similarity index 95% rename from assets/js/182.1d59391c.js rename to assets/js/182.cc67506c.js index fab966dd39..fc3f092743 100644 --- a/assets/js/182.1d59391c.js +++ b/assets/js/182.cc67506c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[182],{1132:function(t,e,r){"use strict";r.r(e);var n=r(2),a=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"benchmark"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#benchmark"}},[t._v("#")]),t._v(" Benchmark")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component may be used to perform benchmark of data throughput at a particular location of the model / design. It counts port activity of data and event ports per given time.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(696),alt:"Screenshot: Benchmark plugin",title:"Screenshot: Benchmark plugin"}})]),t._v(" "),e("p",[t._v("Benchmark plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" Input port for numeric values. Incoming activity increases the data counter.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("dataCount [integer]:")]),t._v(" The current value of the data counter.")]),t._v(" "),e("li",[e("strong",[t._v("eventCount [integer]:")]),t._v(" The current value of the event counter.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("eventIncrease:")]),t._v(" Incoming events increase the event counter.")]),t._v(" "),e("li",[e("strong",[t._v("resetCounter:")]),t._v(" An incoming event resets data counter and event counter to 0.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("time [integer]:")]),t._v(" The time period in milliseconds for measuring data activity and events. After the time has passed, the current values of data counter and event counter are provided at the output port, and the counters are reset to zero.")])])])}),[],!1,null,null,null);e.default=a.exports},696:function(t,e,r){t.exports=r.p+"assets/img/benchmark.86b6eaf0.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[182],{1132:function(t,e,r){"use strict";r.r(e);var n=r(2),a=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"benchmark"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#benchmark"}},[t._v("#")]),t._v(" Benchmark")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component may be used to perform benchmark of data throughput at a particular location of the model / design. It counts port activity of data and event ports per given time.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(695),alt:"Screenshot: Benchmark plugin",title:"Screenshot: Benchmark plugin"}})]),t._v(" "),e("p",[t._v("Benchmark plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" Input port for numeric values. Incoming activity increases the data counter.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("dataCount [integer]:")]),t._v(" The current value of the data counter.")]),t._v(" "),e("li",[e("strong",[t._v("eventCount [integer]:")]),t._v(" The current value of the event counter.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("eventIncrease:")]),t._v(" Incoming events increase the event counter.")]),t._v(" "),e("li",[e("strong",[t._v("resetCounter:")]),t._v(" An incoming event resets data counter and event counter to 0.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("time [integer]:")]),t._v(" The time period in milliseconds for measuring data activity and events. After the time has passed, the current values of data counter and event counter are provided at the output port, and the counters are reset to zero.")])])])}),[],!1,null,null,null);e.default=a.exports},695:function(t,e,r){t.exports=r.p+"assets/img/benchmark.86b6eaf0.jpg"}}]); \ No newline at end of file diff --git a/assets/js/183.31d14bad.js b/assets/js/183.07a712b9.js similarity index 90% rename from assets/js/183.31d14bad.js rename to assets/js/183.07a712b9.js index f542525e8f..91675d9367 100644 --- a/assets/js/183.31d14bad.js +++ b/assets/js/183.07a712b9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[183],{1133:function(e,t,n){"use strict";n.r(t);var o=n(2),i=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"blink-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#blink-detection"}},[e._v("#")]),e._v(" Blink Detection")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This component detects the shape that a blink produces in an electro-oculogram signal. The plugin analyses the input samples and recognises both a single blink and a double blink. Here a single blink is defined by an action whereby both eyes are simultaneously and voluntary closed and open. A double blink refers to the repletion of this action twice in an consecutive way. When one of these conditions is found the corresponding event is fired. In addition, a true Boolean will be output to the corresponding output port.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(697),alt:"Screenshot: Blink Detection plugin",title:"Screenshot: Blink Detection plugin"}})]),e._v(" "),t("p",[e._v("Blink Detection plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The input signal shall correspond to a 250-Hz sampled electro-oculogram signal, i.e., an output port of the "),t("a",{attrs:{href:"../sensors/Enobio.htm"}},[e._v("Enobio")]),e._v(" component when the corresponding electrode is placed on the user’s forehead.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [integer]:")]),e._v(" Input values that correspond to a 250-Hz sampled electro-oculogram signal.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("BlinkDetected:")]),e._v(" This event port fires an event if a blink is detected in the input sequence of integers.")]),e._v(" "),t("li",[t("strong",[e._v("DoubleblinkDetected:")]),e._v(" This event port fires an event if a double blink is detected in the input sequence of integers.")])])])}),[],!1,null,null,null);t.default=i.exports},697:function(e,t,n){e.exports=n.p+"assets/img/blinkdetection.5593407c.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[183],{1136:function(e,t,n){"use strict";n.r(t);var o=n(2),i=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"blink-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#blink-detection"}},[e._v("#")]),e._v(" Blink Detection")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This component detects the shape that a blink produces in an electro-oculogram signal. The plugin analyses the input samples and recognises both a single blink and a double blink. Here a single blink is defined by an action whereby both eyes are simultaneously and voluntary closed and open. A double blink refers to the repletion of this action twice in an consecutive way. When one of these conditions is found the corresponding event is fired. In addition, a true Boolean will be output to the corresponding output port.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(700),alt:"Screenshot: Blink Detection plugin",title:"Screenshot: Blink Detection plugin"}})]),e._v(" "),t("p",[e._v("Blink Detection plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The input signal shall correspond to a 250-Hz sampled electro-oculogram signal, i.e., an output port of the "),t("a",{attrs:{href:"../sensors/Enobio.htm"}},[e._v("Enobio")]),e._v(" component when the corresponding electrode is placed on the user’s forehead.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [integer]:")]),e._v(" Input values that correspond to a 250-Hz sampled electro-oculogram signal.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("BlinkDetected:")]),e._v(" This event port fires an event if a blink is detected in the input sequence of integers.")]),e._v(" "),t("li",[t("strong",[e._v("DoubleblinkDetected:")]),e._v(" This event port fires an event if a double blink is detected in the input sequence of integers.")])])])}),[],!1,null,null,null);t.default=i.exports},700:function(e,t,n){e.exports=n.p+"assets/img/blinkdetection.5593407c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/184.fdebdc91.js b/assets/js/184.927e106b.js similarity index 95% rename from assets/js/184.fdebdc91.js rename to assets/js/184.927e106b.js index 32e8dec92d..2b4f15e490 100644 --- a/assets/js/184.fdebdc91.js +++ b/assets/js/184.927e106b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[184],{1134:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"blink-detector-trainer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#blink-detector-trainer"}},[t._v("#")]),t._v(" Blink Detector Trainer")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This component calculates the maxThreshold, minThreshold, BlinkLength and DoubleBlinkSeparation customized properties of the "),e("a",{attrs:{href:"../processors/BlinkDetector.htm"}},[t._v("Blink Detector")]),t._v(" plugin for each specific subject. For a description of the meaning of these properties, please see "),e("a",{attrs:{href:"../processors/BlinkDetector.htm"}},[t._v("Blink Detector")]),t._v(". The training of the system consists on asking the subject to follow a protocol. This protocol consists on a series of 5 simple blinks and 5 double blinks. Note that the subject can perform only "),e("strong",[t._v("one")]),t._v(" simple (or double) blink each time the protocol indicates so through its Protocol port. When the protocol finishes, the results show up through the Results output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(698),alt:"Screenshot: Blink Detector Trainer plugin",title:"Screenshot: Blink Detector Trainer plugin"}})]),t._v(" "),e("p",[t._v("Blink Detector plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The input signal shall correspond to a 250-Hz sampled electro-oculogram signal, i.e., an output port of the "),e("a",{attrs:{href:"../sensors/Enobio.htm"}},[t._v("Enobio")]),t._v(" component when the corresponding electrode is placed on the user’s forehead.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [integer]:")]),t._v(" Input values that correspond to a 250-Hz sampled electro-oculogram signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Protocol [string]:")]),t._v(" Actions to be performed by the user. Note that the user must perform just one blink (or double blink) each time the corresponding message is delivered through this port.")]),t._v(" "),e("li",[e("strong",[t._v("Results [string]:")]),t._v(" Final parameters calculated for the specific subject. They will delivered when the protocol has finished.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartProtocol [integer]:")]),t._v(" Starts the training protocol. The actions to be performed by the subject will be delivered through the Protocol port.")]),t._v(" "),e("li",[e("strong",[t._v("StopProtocol:")]),t._v(" Stops the training protocol.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sampleRate [integer]:")]),t._v(" Sample rate of the input signal in Hertz.")]),t._v(" "),e("li",[e("strong",[t._v("language [list]:")]),t._v(" Language of the messages thrown through the Protocol port while the protocol is running. The user can chose English or Spanish.")])])])}),[],!1,null,null,null);e.default=s.exports},698:function(t,e,r){t.exports=r.p+"assets/img/blinkdetectortrainer.c93653c5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[184],{1138:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"blink-detector-trainer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#blink-detector-trainer"}},[t._v("#")]),t._v(" Blink Detector Trainer")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This component calculates the maxThreshold, minThreshold, BlinkLength and DoubleBlinkSeparation customized properties of the "),e("a",{attrs:{href:"../processors/BlinkDetector.htm"}},[t._v("Blink Detector")]),t._v(" plugin for each specific subject. For a description of the meaning of these properties, please see "),e("a",{attrs:{href:"../processors/BlinkDetector.htm"}},[t._v("Blink Detector")]),t._v(". The training of the system consists on asking the subject to follow a protocol. This protocol consists on a series of 5 simple blinks and 5 double blinks. Note that the subject can perform only "),e("strong",[t._v("one")]),t._v(" simple (or double) blink each time the protocol indicates so through its Protocol port. When the protocol finishes, the results show up through the Results output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(702),alt:"Screenshot: Blink Detector Trainer plugin",title:"Screenshot: Blink Detector Trainer plugin"}})]),t._v(" "),e("p",[t._v("Blink Detector plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The input signal shall correspond to a 250-Hz sampled electro-oculogram signal, i.e., an output port of the "),e("a",{attrs:{href:"../sensors/Enobio.htm"}},[t._v("Enobio")]),t._v(" component when the corresponding electrode is placed on the user’s forehead.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [integer]:")]),t._v(" Input values that correspond to a 250-Hz sampled electro-oculogram signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Protocol [string]:")]),t._v(" Actions to be performed by the user. Note that the user must perform just one blink (or double blink) each time the corresponding message is delivered through this port.")]),t._v(" "),e("li",[e("strong",[t._v("Results [string]:")]),t._v(" Final parameters calculated for the specific subject. They will delivered when the protocol has finished.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartProtocol [integer]:")]),t._v(" Starts the training protocol. The actions to be performed by the subject will be delivered through the Protocol port.")]),t._v(" "),e("li",[e("strong",[t._v("StopProtocol:")]),t._v(" Stops the training protocol.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sampleRate [integer]:")]),t._v(" Sample rate of the input signal in Hertz.")]),t._v(" "),e("li",[e("strong",[t._v("language [list]:")]),t._v(" Language of the messages thrown through the Protocol port while the protocol is running. The user can chose English or Spanish.")])])])}),[],!1,null,null,null);e.default=s.exports},702:function(t,e,r){t.exports=r.p+"assets/img/blinkdetectortrainer.c93653c5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/185.e3ca0e07.js b/assets/js/185.b590396e.js similarity index 96% rename from assets/js/185.e3ca0e07.js rename to assets/js/185.b590396e.js index a45ab81792..c0fa4b7afa 100644 --- a/assets/js/185.e3ca0e07.js +++ b/assets/js/185.b590396e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[185],{1137:function(t,e,r){"use strict";r.r(e);var i=r(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"comport"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#comport"}},[t._v("#")]),t._v(" ComPort")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Communication)")]),t._v(" "),e("p",[t._v("The ComPort plugin can be used to send and receive data from serial devices (e.g. microcontrollers/embedded devices/wireless links etc.) via a COM port or virtual COM port. The plugin provides support for different data formats of serial communication, e.g. string or binary")]),t._v(" "),e("p",[e("img",{attrs:{src:r(702),alt:"Screenshot: COMPort plugin",title:"Screenshot: COMPort plugin"}})]),t._v(" "),e("p",[t._v("COMPort plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("send [string]:")]),t._v(" string which will be sent to the microcontroller / embedded module")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("received [string]:")]),t._v(" string which has been received (was sent from the microcontroller / embedded module)")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("enablePlugin:")]),t._v(" Enables the functionality of this plugin.")]),t._v(" "),e("li",[e("strong",[t._v("disablePlugin:")]),t._v(" Disables the functionality of this plugin. Any open COM port is closed and no new values are received.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("enabled [boolean]:")]),t._v(" If true (default), the plugin is enabled, if false the plugin does nothing and doesn’t attempt to open the given COM port.")]),t._v(" "),e("li",[e("strong",[t._v("ComPort [string]:")]),t._v(" Defines the COM Port of the target serial device. e.g. COM0")]),t._v(" "),e("li",[e("strong",[t._v("BaudRate [integer]:")]),t._v(" Defines the Baudrate for the communication. It must match the baudrate of the target device")]),t._v(" "),e("li",[t._v("**ReceivedDataType [combobox selection]"),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("*can be used to indicate other data type like binary integer type etc. (currently, only string is supported)")]),t._v(" "),e("li",[t._v("**SendDataType [combobox selection]"),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("*can be used to indicate data type for sending (currently, string is supported and a selectable termination character can be added)")])])])}),[],!1,null,null,null);e.default=s.exports},702:function(t,e,r){t.exports=r.p+"assets/img/comport.81304d08.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[185],{1137:function(t,e,r){"use strict";r.r(e);var i=r(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"comport"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#comport"}},[t._v("#")]),t._v(" ComPort")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Communication)")]),t._v(" "),e("p",[t._v("The ComPort plugin can be used to send and receive data from serial devices (e.g. microcontrollers/embedded devices/wireless links etc.) via a COM port or virtual COM port. The plugin provides support for different data formats of serial communication, e.g. string or binary")]),t._v(" "),e("p",[e("img",{attrs:{src:r(701),alt:"Screenshot: COMPort plugin",title:"Screenshot: COMPort plugin"}})]),t._v(" "),e("p",[t._v("COMPort plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("send [string]:")]),t._v(" string which will be sent to the microcontroller / embedded module")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("received [string]:")]),t._v(" string which has been received (was sent from the microcontroller / embedded module)")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("enablePlugin:")]),t._v(" Enables the functionality of this plugin.")]),t._v(" "),e("li",[e("strong",[t._v("disablePlugin:")]),t._v(" Disables the functionality of this plugin. Any open COM port is closed and no new values are received.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("enabled [boolean]:")]),t._v(" If true (default), the plugin is enabled, if false the plugin does nothing and doesn’t attempt to open the given COM port.")]),t._v(" "),e("li",[e("strong",[t._v("ComPort [string]:")]),t._v(" Defines the COM Port of the target serial device. e.g. COM0")]),t._v(" "),e("li",[e("strong",[t._v("BaudRate [integer]:")]),t._v(" Defines the Baudrate for the communication. It must match the baudrate of the target device")]),t._v(" "),e("li",[t._v("**ReceivedDataType [combobox selection]"),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("*can be used to indicate other data type like binary integer type etc. (currently, only string is supported)")]),t._v(" "),e("li",[t._v("**SendDataType [combobox selection]"),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("*can be used to indicate data type for sending (currently, string is supported and a selectable termination character can be added)")])])])}),[],!1,null,null,null);e.default=s.exports},701:function(t,e,r){t.exports=r.p+"assets/img/comport.81304d08.jpg"}}]); \ No newline at end of file diff --git a/assets/js/186.7bc84a7b.js b/assets/js/186.52dea392.js similarity index 98% rename from assets/js/186.7bc84a7b.js rename to assets/js/186.52dea392.js index b99fe87bc5..10b9497e1f 100644 --- a/assets/js/186.7bc84a7b.js +++ b/assets/js/186.52dea392.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[186],{1138:function(t,e,o){"use strict";o.r(e);var r=o(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"comparator"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#comparator"}},[t._v("#")]),t._v(" Comparator")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component compares the numerical values of two input ports and provides output depending on the result of the comparison.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(703),alt:"Screenshot: Comparator plugin",title:"Screenshot: Comparator plugin"}})]),t._v(" "),e("p",[t._v("Comparator plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inA [double]:")]),t._v(" Input port for signal a. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("inB [double]:")]),t._v(" Input port for signal b. "),e("strong",[t._v("This input port supports synchronization")])])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" Output port of the comparator (value according to condition and operational mode).")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("conditionTrue:")]),t._v(" This event is triggered when the comparator condition switches from false to true.")]),t._v(" "),e("li",[e("strong",[t._v("comparatorFalse:")]),t._v(" This event is triggered when the comparator condition switches from true to false.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("condition [integer]:")]),t._v(" Defines the condition to be met. Available conditions are “a greater b”, “a equals b”, “a lower b”, “a greater threshold”, “a equals threshold”, “a lower threshold” and “a between threshold and threshold2”.")]),t._v(" "),e("li",[e("strong",[t._v("outputMode [integer]:")]),t._v(" Defines the mode of operation, respectively which values are put to the output port of the plugin. Following modes are available: “output min”, “output max” and “output a if condition met”.")]),t._v(" "),e("li",[e("strong",[t._v("eventMode [integer]:")]),t._v(" Defines the mode of event generation (if events are created on every comparison of input values or only if the output condition changes).")]),t._v(" "),e("li",[e("strong",[t._v("threshold [double]:")]),t._v(" Defines the threshold value for the condition modes “a greater than threshold”, “a equals threshold” and “a lower than threshold”.")]),t._v(" "),e("li",[e("strong",[t._v("threshold2 [double]:")]),t._v(" Defines the threshold2 value for the condition mode “a between threshold and threshold2”.")])])])}),[],!1,null,null,null);e.default=n.exports},703:function(t,e,o){t.exports=o.p+"assets/img/comparator.2dfefc2b.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[186],{1139:function(t,e,o){"use strict";o.r(e);var r=o(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"comparator"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#comparator"}},[t._v("#")]),t._v(" Comparator")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component compares the numerical values of two input ports and provides output depending on the result of the comparison.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(703),alt:"Screenshot: Comparator plugin",title:"Screenshot: Comparator plugin"}})]),t._v(" "),e("p",[t._v("Comparator plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inA [double]:")]),t._v(" Input port for signal a. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("inB [double]:")]),t._v(" Input port for signal b. "),e("strong",[t._v("This input port supports synchronization")])])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" Output port of the comparator (value according to condition and operational mode).")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("conditionTrue:")]),t._v(" This event is triggered when the comparator condition switches from false to true.")]),t._v(" "),e("li",[e("strong",[t._v("comparatorFalse:")]),t._v(" This event is triggered when the comparator condition switches from true to false.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("condition [integer]:")]),t._v(" Defines the condition to be met. Available conditions are “a greater b”, “a equals b”, “a lower b”, “a greater threshold”, “a equals threshold”, “a lower threshold” and “a between threshold and threshold2”.")]),t._v(" "),e("li",[e("strong",[t._v("outputMode [integer]:")]),t._v(" Defines the mode of operation, respectively which values are put to the output port of the plugin. Following modes are available: “output min”, “output max” and “output a if condition met”.")]),t._v(" "),e("li",[e("strong",[t._v("eventMode [integer]:")]),t._v(" Defines the mode of event generation (if events are created on every comparison of input values or only if the output condition changes).")]),t._v(" "),e("li",[e("strong",[t._v("threshold [double]:")]),t._v(" Defines the threshold value for the condition modes “a greater than threshold”, “a equals threshold” and “a lower than threshold”.")]),t._v(" "),e("li",[e("strong",[t._v("threshold2 [double]:")]),t._v(" Defines the threshold2 value for the condition mode “a between threshold and threshold2”.")])])])}),[],!1,null,null,null);e.default=n.exports},703:function(t,e,o){t.exports=o.p+"assets/img/comparator.2dfefc2b.jpg"}}]); \ No newline at end of file diff --git a/assets/js/187.abef5dfc.js b/assets/js/187.cd7fc2a9.js similarity index 98% rename from assets/js/187.abef5dfc.js rename to assets/js/187.cd7fc2a9.js index 6f73d2a694..fbb42ecc62 100644 --- a/assets/js/187.abef5dfc.js +++ b/assets/js/187.cd7fc2a9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[187],{1139:function(e,t,s){"use strict";s.r(t);var r=s(2),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"compute-bandpower"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compute-bandpower"}},[e._v("#")]),e._v(" Compute Bandpower")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This component computes the power that an input signal has in a specific frequency band. The plugin stores as many values as the DataLen property indicates before providing a new value in the output port. This solution is based on the FFT so only the bins corresponding to the specified band are considered. This approach removes the contribution of the out-band frequencies to the final value. This approach improves the power output of the filter plugin which uses the filtered signal for computing the output value so the frequencies out of the pass band contributes to the final value since the filter is implemented as FIR filter with a finite number of coefficients so the frequency response will not never be perfect.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(704),alt:"Screenshot: Compute Bandpower plugin",title:"Screenshot: Compute Bandpower plugin"}})]),e._v(" "),t("p",[e._v("Compute Bandpower plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The values in the input port shall correspond to a time series.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [double]:")]),e._v(" Input port for the values of time series which power in band is computed.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [double]:")]),e._v(" Output of the value that corresponds to the power of the signal present in the last DataLen samples. If the input signal is expressed in volts, then the output is expressed in squared volts.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("DataLen [integer]:")]),e._v(" Defines the length of the time series over which the band power computation is performed. Only power of two values are allowed for this property.")]),e._v(" "),t("li",[t("strong",[e._v("SampleRate [integer]:")]),e._v(" Defines the sample rate of the input time series. It is defined in samples per second.")]),e._v(" "),t("li",[t("strong",[e._v("StartBandFrequency [integer]:")]),e._v(" Defines the beginning of the band to be analysed. It is defined in Hertz.")]),e._v(" "),t("li",[t("strong",[e._v("EndBandFrequency [integer]:")]),e._v(" Defines the end of the band to be analysed. It is defined in Hertz.")])])])}),[],!1,null,null,null);t.default=n.exports},704:function(e,t,s){e.exports=s.p+"assets/img/computebandpower.9a67636f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[187],{1140:function(e,t,s){"use strict";s.r(t);var r=s(2),n=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"compute-bandpower"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#compute-bandpower"}},[e._v("#")]),e._v(" Compute Bandpower")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This component computes the power that an input signal has in a specific frequency band. The plugin stores as many values as the DataLen property indicates before providing a new value in the output port. This solution is based on the FFT so only the bins corresponding to the specified band are considered. This approach removes the contribution of the out-band frequencies to the final value. This approach improves the power output of the filter plugin which uses the filtered signal for computing the output value so the frequencies out of the pass band contributes to the final value since the filter is implemented as FIR filter with a finite number of coefficients so the frequency response will not never be perfect.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(704),alt:"Screenshot: Compute Bandpower plugin",title:"Screenshot: Compute Bandpower plugin"}})]),e._v(" "),t("p",[e._v("Compute Bandpower plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The values in the input port shall correspond to a time series.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("input [double]:")]),e._v(" Input port for the values of time series which power in band is computed.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [double]:")]),e._v(" Output of the value that corresponds to the power of the signal present in the last DataLen samples. If the input signal is expressed in volts, then the output is expressed in squared volts.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("DataLen [integer]:")]),e._v(" Defines the length of the time series over which the band power computation is performed. Only power of two values are allowed for this property.")]),e._v(" "),t("li",[t("strong",[e._v("SampleRate [integer]:")]),e._v(" Defines the sample rate of the input time series. It is defined in samples per second.")]),e._v(" "),t("li",[t("strong",[e._v("StartBandFrequency [integer]:")]),e._v(" Defines the beginning of the band to be analysed. It is defined in Hertz.")]),e._v(" "),t("li",[t("strong",[e._v("EndBandFrequency [integer]:")]),e._v(" Defines the end of the band to be analysed. It is defined in Hertz.")])])])}),[],!1,null,null,null);t.default=n.exports},704:function(e,t,s){e.exports=s.p+"assets/img/computebandpower.9a67636f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/188.ed107055.js b/assets/js/188.be91157e.js similarity index 97% rename from assets/js/188.ed107055.js rename to assets/js/188.be91157e.js index 22d99299aa..f5464da50a 100644 --- a/assets/js/188.ed107055.js +++ b/assets/js/188.be91157e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[188],{1140:function(t,e,s){"use strict";s.r(e);var r=s(2),o=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component sends double values from the chosen slot.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(705),alt:"Screenshot: ConstantDispatcher plugin",title:"Screenshot: ConstantDispatcher plugin"}})]),t._v(" "),e("p",[t._v("ConstantDispatcher plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("slotDispatch [integer]:")]),t._v(" Sends the value from the slot defined by number.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" The port for the output value.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("dispatchSlot1…dispatchSlot20 :")]),t._v(" Sends the double value from the slot: 1…20.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchNextSlot:")]),t._v(" Sends double value from the next slot.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchPreviousSlot:")]),t._v(" Sends double value from the previous slot.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchSlotSeries:")]),t._v(" Sends slots values in sequence from slot 1 to slot defined by the Number property with the delay defined by the Delay property.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("number [integer]:")]),t._v(" Number of used slots.")]),t._v(" "),e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" Delay in ms used in sequence slot dispatch.")]),t._v(" "),e("li",[e("strong",[t._v("slot1…slot20 [double]:")]),t._v(" The slot for the value: 1…20.")]),t._v(" "),e("li",[e("strong",[t._v("autosendSlot [integer]:")]),t._v(" Number of slot which is automatically sent at start (0=disable).")])])])}),[],!1,null,null,null);e.default=o.exports},705:function(t,e,s){t.exports=s.p+"assets/img/constantdispatcher.bda97c1f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[188],{1141:function(t,e,s){"use strict";s.r(e);var r=s(2),o=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component sends double values from the chosen slot.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(705),alt:"Screenshot: ConstantDispatcher plugin",title:"Screenshot: ConstantDispatcher plugin"}})]),t._v(" "),e("p",[t._v("ConstantDispatcher plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("slotDispatch [integer]:")]),t._v(" Sends the value from the slot defined by number.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" The port for the output value.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("dispatchSlot1…dispatchSlot20 :")]),t._v(" Sends the double value from the slot: 1…20.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchNextSlot:")]),t._v(" Sends double value from the next slot.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchPreviousSlot:")]),t._v(" Sends double value from the previous slot.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchSlotSeries:")]),t._v(" Sends slots values in sequence from slot 1 to slot defined by the Number property with the delay defined by the Delay property.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("number [integer]:")]),t._v(" Number of used slots.")]),t._v(" "),e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" Delay in ms used in sequence slot dispatch.")]),t._v(" "),e("li",[e("strong",[t._v("slot1…slot20 [double]:")]),t._v(" The slot for the value: 1…20.")]),t._v(" "),e("li",[e("strong",[t._v("autosendSlot [integer]:")]),t._v(" Number of slot which is automatically sent at start (0=disable).")])])])}),[],!1,null,null,null);e.default=o.exports},705:function(t,e,s){t.exports=s.p+"assets/img/constantdispatcher.bda97c1f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/189.41207779.js b/assets/js/189.750a8531.js similarity index 96% rename from assets/js/189.41207779.js rename to assets/js/189.750a8531.js index 37cc7121d5..01c14358c5 100644 --- a/assets/js/189.41207779.js +++ b/assets/js/189.750a8531.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[189],{1141:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"deadzone"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deadzone"}},[e._v("#")]),e._v(" Deadzone")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Signal Shaping)")]),e._v(" "),t("p",[e._v("The purpose of this component is to define active and passive areas (zones) for one- or two dimensional sensor values. This function could also be called “resting zone” or “centerzone”. It can be useful for example when a mouse pointer should not move before a certain value of a sensor (displacement of an analogue sensor, strength of activity) is reached.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(706),alt:"Screenshot: Deadzone plugin",title:"Screenshot: Deadzone plugin"}})]),e._v(" "),t("p",[e._v("Deadzone plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("inX [double]:")]),e._v(" Input of x values. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("inY [double]:")]),e._v(" Input of y values. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("radius [double]:")]),e._v(" The radius of the active/passive zone around the centre point.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("outX [double]:")]),e._v(" Output of modified x values.")]),e._v(" "),t("li",[t("strong",[e._v("outY [double]:")]),e._v(" Output of modified y values.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("setCenter:")]),e._v(" An incoming event stores the current x- and y- input values to represent the centre (It defines them as offset values). This can be useful for sensor calibration because it defines the “baseline” or resting position.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enterZone:")]),e._v(" This event is triggered when the x- and/or y- values enter the active zone. The active zone is the zone, in which values are passed to the output ports, see property ‘mode’.")]),e._v(" "),t("li",[t("strong",[e._v("exitZone:")]),e._v(" This event is triggered when the x- and/or y- values leave the active zone. The active zone is the zone, in which values are passed to the output ports, see property ‘mode’.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xCenter [double]:")]),e._v(" This value defines the x- position of the centre (the middle of the active/passive zones).")]),e._v(" "),t("li",[t("strong",[e._v("yCenter [double]:")]),e._v(" This value defines the y- position of the centre (the middle of the active/passive zones).")]),e._v(" "),t("li",[t("strong",[e._v("radius [double]:")]),e._v(" The radius of the active/passive zone around the centre point.")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer]:")]),e._v(" Selects the mode of operation of the centerzone component, following modes are available:\n"),t("ul",[t("li",[t("em",[e._v("“only inner values”:")]),e._v(" x- and y- values are passed to the output ports only if the distance to the centre is lower than the given radius.")]),e._v(" "),t("li",[t("em",[e._v("“only outer values”:")]),e._v(" x- and y- values are passed to the output ports only if the distance to the centre is greater than the given radius.")]),e._v(" "),t("li",[t("em",[e._v("“deadzone”:")]),e._v(" x- and y- values are passed to the output ports only if the distance to the center is greater than the given radius, and additionally a correction of the values is performed so that they start with 0 when leaving the inner zone. This is useful for defining a “deadzone” for sensor values, where an inactive area shall be provided and no sudden acceleration is desired when leaving this inactive area.")])])])])])}),[],!1,null,null,null);t.default=s.exports},706:function(e,t,n){e.exports=n.p+"assets/img/deadzone.fa4ae800.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[189],{1145:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"deadzone"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#deadzone"}},[e._v("#")]),e._v(" Deadzone")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Signal Shaping)")]),e._v(" "),t("p",[e._v("The purpose of this component is to define active and passive areas (zones) for one- or two dimensional sensor values. This function could also be called “resting zone” or “centerzone”. It can be useful for example when a mouse pointer should not move before a certain value of a sensor (displacement of an analogue sensor, strength of activity) is reached.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(707),alt:"Screenshot: Deadzone plugin",title:"Screenshot: Deadzone plugin"}})]),e._v(" "),t("p",[e._v("Deadzone plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("inX [double]:")]),e._v(" Input of x values. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("inY [double]:")]),e._v(" Input of y values. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("radius [double]:")]),e._v(" The radius of the active/passive zone around the centre point.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("outX [double]:")]),e._v(" Output of modified x values.")]),e._v(" "),t("li",[t("strong",[e._v("outY [double]:")]),e._v(" Output of modified y values.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("setCenter:")]),e._v(" An incoming event stores the current x- and y- input values to represent the centre (It defines them as offset values). This can be useful for sensor calibration because it defines the “baseline” or resting position.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enterZone:")]),e._v(" This event is triggered when the x- and/or y- values enter the active zone. The active zone is the zone, in which values are passed to the output ports, see property ‘mode’.")]),e._v(" "),t("li",[t("strong",[e._v("exitZone:")]),e._v(" This event is triggered when the x- and/or y- values leave the active zone. The active zone is the zone, in which values are passed to the output ports, see property ‘mode’.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("xCenter [double]:")]),e._v(" This value defines the x- position of the centre (the middle of the active/passive zones).")]),e._v(" "),t("li",[t("strong",[e._v("yCenter [double]:")]),e._v(" This value defines the y- position of the centre (the middle of the active/passive zones).")]),e._v(" "),t("li",[t("strong",[e._v("radius [double]:")]),e._v(" The radius of the active/passive zone around the centre point.")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer]:")]),e._v(" Selects the mode of operation of the centerzone component, following modes are available:\n"),t("ul",[t("li",[t("em",[e._v("“only inner values”:")]),e._v(" x- and y- values are passed to the output ports only if the distance to the centre is lower than the given radius.")]),e._v(" "),t("li",[t("em",[e._v("“only outer values”:")]),e._v(" x- and y- values are passed to the output ports only if the distance to the centre is greater than the given radius.")]),e._v(" "),t("li",[t("em",[e._v("“deadzone”:")]),e._v(" x- and y- values are passed to the output ports only if the distance to the center is greater than the given radius, and additionally a correction of the values is performed so that they start with 0 when leaving the inner zone. This is useful for defining a “deadzone” for sensor values, where an inactive area shall be provided and no sudden acceleration is desired when leaving this inactive area.")])])])])])}),[],!1,null,null,null);t.default=s.exports},707:function(e,t,n){e.exports=n.p+"assets/img/deadzone.fa4ae800.jpg"}}]); \ No newline at end of file diff --git a/assets/js/19.d900a5a7.js b/assets/js/19.993ddc49.js similarity index 99% rename from assets/js/19.d900a5a7.js rename to assets/js/19.993ddc49.js index 5d8543977e..341ad4938f 100644 --- a/assets/js/19.d900a5a7.js +++ b/assets/js/19.993ddc49.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{289:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_c0991ef32ae9b458.424ba3f3.png"},290:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_4dfe72317ab9f571.6b0975c3.jpg"},291:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_b6693a1cbcd9178a.03fc763d.png"},292:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_f1a0b4f36dd370ba.c1a39a2a.jpg"},293:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_fb7627584ba9d5d7.45a2067d.png"},294:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_3e993efbc73f2910.c6357005.png"},295:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_74b8c615b8455605.d7a70de8.png"},941:function(t,e,a){"use strict";a.r(e);var s=a(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"are-middleware"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-middleware"}},[t._v("#")]),t._v(" ARE Middleware")]),t._v(" "),e("h2",{attrs:{id:"the-asterics-runtime-environment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-asterics-runtime-environment"}},[t._v("#")]),t._v(" The AsTeRICS Runtime Environment")]),t._v(" "),e("p",[t._v("The AsTeRICS Runtime environment (ARE) is an OSGi-based middleware [3] which allows software plugins to run in parallel. The plugins usually represent a sensor or an actuator and are implemented as independent OSGi bundles. The runtime environment identifies AsTeRICS plugins from other OSGi bundles based on metadata defined inside the plugins.")]),t._v(" "),e("p",[t._v("The ARE expects from plugin-developers to define the structure of their plugins (properties, inputs, outputs and event ports) in XML files. Based on these XMLs, the middleware constructs a runtime representation of each installed AsTeRICS plugin.")]),t._v(" "),e("p",[t._v("Furthermore, the ARE expects a runtime model (system model) which usually comes from the AsTeRICS Configuration Suite (ACS). The ACS is running on a Windows Personal Computer (.net 4.0 required) and mainly used to graphically design the layout of the system as a network of interconnected components. The system model is another XML file that defines the components participating in a specific application, connections between them, events and other properties. Based on this file, ARE knows which plugins to activate and how to define the data flow between them. Since the system model represents the main communication means between the ACS and the ARE, it is expected to be a serialisable object, easy to transfer and translate. ARE and ACS communicate through an appropriate TCP/IP-based communication protocol named ASAPI.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(295),alt:""}})]),t._v(" "),e("p",[t._v("The ARE also provides “services” to plugin developers (for example communication support for COM ports) and it allows reporting errors on the runtime environment, registering event listeners and interacting with its graphical user interface (ARE GUI).")]),t._v(" "),e("p",[t._v("The ARE GUI is a simple graphical environment developed to allow end-users to interact directly with the runtime environment. It may be used to modify runtime parameters of a model via buttons or sliders, and to monitor live signals and events of the running model.")]),t._v(" "),e("h2",{attrs:{id:"are-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-components"}},[t._v("#")]),t._v(" ARE Components")]),t._v(" "),e("p",[t._v("The ARE consist of the following main parts:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("The ARE middleware")])]),t._v(" "),e("li",[e("p",[t._v("ARE plugins (also referred to as “components”) – sensor, processor and actuator modules which provide functional building blocks for assistive functionalities")])]),t._v(" "),e("li",[e("p",[t._v("A service layer which provides infrastructure to the ARE components,"),e("br"),t._v("\nfor example COM port and communication management for connection of the Communication Interface Modules (CIMs)")])])]),t._v(" "),e("p",[t._v("The ARE is commonly deployed on an embedded device, running an appropriate operating system (OS), typically an embedded variant of Windows. On top of the OS, an appropriate Java Virtual Machine (JVM) is used to host the OSGi component framework which provides support for modularity and dynamic loading/unloading of components.")]),t._v(" "),e("p",[t._v("All the core components of the framework (described in detail later) are defined as OSGi modules. Certain components that need to access legacy code (e.g., written in C or C++) are also deployed on top of OSGi, and are interfaced to the native code using Java Native Interface (JNI) as needed. In this regard, and with the exception of the pluggable components that use native code interfaces with platform-specific JNI bindings, the ARE middleware is expected to be "),e("em",[t._v("platform independent")]),t._v(".")]),t._v(" "),e("p",[t._v("The implementation requires basically JAVA 1.7 (JDK/JRE 7) and an OSGi framework (which is part of the source code downloads).")]),t._v(" "),e("h2",{attrs:{id:"about-osgi"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#about-osgi"}},[t._v("#")]),t._v(" About OSGi")]),t._v(" "),e("p",[t._v("The Open Service Gateway initiative (OSGi) is an open specification that enables the modular assembly of software built with the Java technology [3]. The OSGi Service Platform facilitates the componentization of software modules and applications and assures interoperability of applications and services over a variety of networked devices.")]),t._v(" "),e("p",[t._v("OSGi technology is the dynamic module system for Java™. Java provides the portability that is required to support products on many different platforms. The OSGi technology provides the standardized primitives that allow applications to be constructed from small, reusable and collaborative components. These components can be composed into an application and deployed; The OSGi Service Platform provides a service-oriented architecture that enables these components to dynamically discover each other for collaboration, and thereby forms the optimal basis for the AsTeRICS middleware.")]),t._v(" "),e("h2",{attrs:{id:"getting-started-with-asterics-development"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#getting-started-with-asterics-development"}},[t._v("#")]),t._v(" Getting Started with AsTeRICS Development")]),t._v(" "),e("p",[t._v("The AsTeRICS source code repository is hosted at github and located at")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS",target:"_blank",rel:"noopener noreferrer"}},[e("strong",[t._v("https://github.com/asterics/AsTeRICS")]),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("The source code contains open source software modules in JAVA, C++ and C, and proprietary modules by AsTeRICS partners which are available in binary from (.dll or .exe).")]),t._v(" "),e("p",[t._v("The licenses of the utilized software packages and 3rd party products can be viewed in the file "),e("em",[t._v("/documentation/licenses.doc")])]),t._v(" "),e("p",[t._v("Currently, the editor for OSKA (the on-screen keyboard application) is the only commercial software package within the AsTeRICS framework – and not included in the free downloads. The OSKA editor is only needed if you want to design custom on-screen keyboard layouts for OSKA (see AsTeRICS User Manual).")]),t._v(" "),e("h2",{attrs:{id:"understanding-the-component-build-scripts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#understanding-the-component-build-scripts"}},[t._v("#")]),t._v(" Understanding the component build-scripts")]),t._v(" "),e("p",[t._v("A typical ANT build script for an ARE component looks like the following:")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("project")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("component.id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("processor.MyComponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- set global properties for this build --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("build"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../out/production/${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src.java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dist"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("runtime"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../../examples/ARE"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bin"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${osgi}/org.eclipse.osgi_3.6.0.v20100517.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${middleware}/asterics.ARE.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the time stamp --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("tstamp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the build directory structure used by compile --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mkdir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile the source "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("javac")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("srcdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${src.java}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("destdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("verbose")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("debug")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${debug}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("classpath")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${classpath}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("classpath")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("refid")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("generate the OSGi bundle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("jar")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("jarfile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("manifest")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}/META-INF/MANIFEST.MF"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("fileset")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("copy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("file")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("tofile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${runtime}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[t._v("In the first section of the build script, folder locations for the build intermediates, the final build products (.jar file) and the classpath are defined. The classpath usually points to the “bin” folder, the middleware “asterics.ARE.jar” and the osgi distribution. If a component needs additional resources, their location has to be defined here.")]),t._v(" "),e("p",[t._v("Subsequently the build script defines two build targets: the compilation of the Java source code and the creation of the .jar file. If the .jar file shall contain additional .dlls with native code, they have to be specified in the Manifest file as shows in section 5.14.1.")]),t._v(" "),e("p",[t._v("After the .jar file has been created in the distribution folder, it is copied to the runtime folder (/bin/ARE).")]),t._v(" "),e("h2",{attrs:{id:"starting-the-are-middleware-and-component-deployments"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#starting-the-are-middleware-and-component-deployments"}},[t._v("#")]),t._v(" Starting the ARE middleware and component deployments")]),t._v(" "),e("p",[t._v("To test the ARE and component bundles, open the folder “/bin/ARE”, and use ARE.exe, start.bat or start_debug.bat.")]),t._v(" "),e("h2",{attrs:{id:"structure-of-the-runtime-folder-bin-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-the-runtime-folder-bin-are"}},[t._v("#")]),t._v(" Structure of the runtime folder “./bin/ARE”:")]),t._v(" "),e("p",[t._v("This folder contains dependencies for running the ARE middleware and the .jars resulting from ANT builds, it has the following structure:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("/\n+- bin/\n +- ARE/\n +- data/ folder for plugin working data\n +- models/ stored models (configurations)\n +- profile/\n +- config.ini system bundles to be started\n +- services.ini general service bundles to be started\n +- services-windows.ini windows-specific service bundles\n +- services-linux.ini linux-specific service bundles\n +- services-macosx.ini macosx-specific service bundles\n +- org.eclipse.osgi/ osgi bundle cache folder\n +- 1238790741.log system log messages, stack trace\n +- tools/ plugin helper apps and dlls\n +- .logger stores console logging settings\n +- ARE.exe starts the ARE without console output\n +- areProperties stores recent window/GUI properties\n +- component bundle(s)\n +- asterics.ARE.jar ARE middleware\n +- asterics.mw.services.cimcommunication.jar CIM port manager\n +- grizzly-httpservice-bundle-2.3.23.jar http service for webservice feature\n +- javacv-*-linux|windows|macosx.jar platform specific javacv service\n +- tmp/*.log application log files\n +- jtester.exe helper app for checking Java version\n +- logging.properties configuration of loglevel etc.\n +- org.eclipse.osgi.*.jar osgi distribution\n +- sleeper.exe helper app for launcher timing\n +- start.bat starts ARE with console output\n +- findjava.bat searches for the newest 32bit JRE\n +- start_debug.bat starts ARE with Eclipse debug support\n +- start.sh starts ARE without console on Linux\n +- start_debug.sh starts ARE with debugging on Linux\n +- VCChecker.jar helper jar for checking VC redist dependency\n")])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Important Note: The osgi configuration folder “org.eclipse.osgi” in the “profile” subdirectory has to be deleted if .dlls in .jar bundles are updated or changed. (This folder is automatically created when starting the ARE and holds working data for the OSGI-bundles.) The One-Click build.xml script described in chapter 2.4.2 deletes the folder automatically.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-services"}},[t._v("#")]),t._v(" AsteRICS services")]),t._v(" "),e("p",[t._v("An AsteRICS service is a bundle that provides ARE-wide functionality usable by other services or plugins. The service can be optionally disabled which means that the service bundle is not installed and not activated. The file services.ini contains a list of general services to be loaded. Whereas the services-windows.ini, services-linux.ini and services-macosx.ini files contain platform dependent service names. You can also create your own use-case specific services ini file and edit the start script to load it.")]),t._v(" "),e("h2",{attrs:{id:"running-a-deployment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#running-a-deployment"}},[t._v("#")]),t._v(" Running a deployment")]),t._v(" "),e("p",[t._v("The “ARE.exe” starter application launches the ARE without console output and without debugging instrumentation.")]),t._v(" "),e("p",[t._v("Alternatively, the commandline batch script “start_debug.bat” which is provided in the folder “.bin/ARE” runs Java with additional configuration parameters including:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the location of the OSGi distribution")])]),t._v(" "),e("li",[e("p",[t._v("the profile subfolder which contains the config.ini file: “./bin/ARE/profile”")])]),t._v(" "),e("li",[e("p",[t._v("debugging instrumentation for the remote debugging server connection")])])]),t._v(" "),e("p",[t._v("After starting the ARE middleware, bundles are loaded and started on-demand if they are needed for the deployment of a model. If everything is properly configured, the ARE window comes up with a GUI and provides ASAPI server functionalities for connection of the ACS or other client applications.")]),t._v(" "),e("h2",{attrs:{id:"are-webserver-including-rest-api-websocket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver-including-rest-api-websocket"}},[t._v("#")]),t._v(" ARE webserver (including REST API, websocket)")]),t._v(" "),e("p",[t._v("The ARE contains a service that creates several web-based services. These include")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a webserver with document root "),e("em",[t._v("ARE/web")]),t._v(" and URL: "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a websocket at URL "),e("a",{attrs:{href:"http://localhost:8082/ws/astericsData",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8082/ws/astericsData"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a REST API at URL "),e("a",{attrs:{href:"http://localhost:8081/rest",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/rest"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a javascript REST API client implementation example at "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])])]),t._v(" "),e("h2",{attrs:{id:"define-autostart-model-per-command-line"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#define-autostart-model-per-command-line"}},[t._v("#")]),t._v(" Define autostart model per command line")]),t._v(" "),e("p",[t._v("By starting the ARE with the name of a model as first command line parameter a model that should be started automatically can be defined. The model must exist in the sub-folder “models”.")]),t._v(" "),e("p",[t._v("‘ARE.exe CameraMouse.acs’")]),t._v(" "),e("p",[t._v("or")]),t._v(" "),e("p",[t._v("‘start_debug.bat CameraMouse.acs’")]),t._v(" "),e("h2",{attrs:{id:"change-model-task-submit-timeout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-model-task-submit-timeout"}},[t._v("#")]),t._v(" Change model task submit timeout")]),t._v(" "),e("p",[t._v("The file “areProperties” contains properties to configure ARE features and to configure the internal model execution behaviour. The following internal model execution properties exist:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("ThreadPoolTasks.submitTimeout=20000")]),t._v(" "),e("ul",[e("li",[t._v("When submitting a task to be executed in the ModelExecutor thread a submit timeout can be configured. After the time elapsed a TimeoutException is thrown. The timeout value must be specified in milliseconds."),e("br"),t._v("\nThe submit timeout is used for starting, stopping, pausing and resuming a model.")])])])]),t._v(" "),e("h2",{attrs:{id:"debugging-the-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#debugging-the-are"}},[t._v("#")]),t._v(" Debugging the ARE")]),t._v(" "),e("p",[t._v("If the ARE is started using the “start_debug.bat” script and source-level debug information was added during the compilation (see section 2.3), debugging with Eclipse is supported via a remote debugging connection. This is a convenient way for debugging an OSGI-based java framework with a lot of plugins. To enable the debugging support in Eclipse, a Debug Configuration is created via the dedicated menu entry:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(289),alt:""}})]),t._v(" "),e("p",[t._v("Create a “Remote Java Application” Debug Configuration and assign a name for it, e.g. “ARE”. Then, specify the connection properties of the Debug Configuration to use the Host “localhost” and the Socket/Port “1044” (this port is given in the ARE build scripts for the remote debug server to listen for incoming client connections):")]),t._v(" "),e("p",[e("img",{attrs:{src:a(290),alt:""}})]),t._v(" "),e("p",[t._v("Now launch the ARE using “start_debug.bat”. The messages in the console window should indicate the establishment of the listening socket 1044 for the debugging connection:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(291),alt:""}})]),t._v(" "),e("p",[t._v("Now, the usual debugging support of Eclipse can be used, including breakpoints in middleware or components, variable and context watch windows, single stepping etc. All these operations are performed in the Eclipse “Debug” perspective.")]),t._v(" "),e("p",[t._v("The following screenshot shows a program execution of the ARE which ran into a breakpoint (here: the OSKA plugin was halted as a command was selected in the OSKA-application and transferred to the ARE plugin’s command handler:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(292),alt:""}})]),t._v(" "),e("p",[t._v("I"),e("img",{attrs:{src:a(293),alt:""}}),t._v(" f the source-level debug information is missing (due to compilation without debugging support) an error message indicates a problem, e.g. the missing line number for breakpoint installation:")]),t._v(" "),e("h2",{attrs:{id:"services-and-utils-infrastructure-for-plugins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#services-and-utils-infrastructure-for-plugins"}},[t._v("#")]),t._v(" Services and Utils: Infrastructure for plugins")]),t._v(" "),e("p",[t._v("The ARE Services are a set of classes that enable the direct interaction between AsTeRICS plugins and other software to directly interact with the runtime environment. The most significant ARE Services are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIM Communication Service: the ARE CIM Communication service layer is a unified approach to allow plugins of the ARE to communicate with their associated hardware modules attached to the AsTeRICS platform via a COM port. A range of hardware modules are provided which implement the dedicated Communication Interface Module (CIM) protocol. Further details on this communication protocol and implementation details for the ARE CIM Communication Service can be found in chapter 5.15.")])]),t._v(" "),e("li",[e("p",[t._v("Remote Connection Service: the remote connection services allows external software that cannot be integrated into the standard plugin inter communication system used by the ARE, for example because of programming language incompatibilities, to work with the AsTeRICS system. For example, the interconnection of OSKA (the On-Screen Keyboard Application developed by AsTeRICS partner SENSORY) and the ARE uses the Remote Connection Service to send key selection information to the ARE. On the other hand, the ARE can reply with cell selection commands or other information. The actual communication is done via a protocol that can be understood by the Java ServerSocket implementation. The port number that the external software component connects to identifies the connecting component.")])]),t._v(" "),e("li",[e("p",[t._v("Local Storage Service: The Local Storage Service will allow plugins to store individual working data “per model” and “per plugin-instance”. This is necessary when plugins need to store own calibration data, pattern recognition samples or similar data. In course of the architectural refinements for the final prototype, a service class will be provided which generates an according folder and respective file read- and write methods.")])]),t._v(" "),e("li",[e("p",[t._v("Native Hook Services for systemwide keyboard and mouse capturing")])]),t._v(" "),e("li",[e("p",[t._v("Computer Vision services to support a unified way for frame grabbing, computer vision processing and video frame rendering.")])]),t._v(" "),e("li",[e("p",[t._v("Logging service")])]),t._v(" "),e("li",[e("p",[t._v("ConversionUtils: Helper class to convert port data streams into Java data types and vice versa.")])]),t._v(" "),e("li",[e("p",[t._v("Class "),e("strong",[t._v("ResourceRegistry")]),t._v(" to fetch resource URIs. If a plugin needs access to a config, data or a multimedia file, the class ResourceRegistry must be used.")])])]),t._v(" "),e("h2",{attrs:{id:"communicating-with-peripherals-cim-communication-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communicating-with-peripherals-cim-communication-service"}},[t._v("#")]),t._v(" Communicating with peripherals: CIM Communication service")]),t._v(" "),e("p",[t._v("Communication between actuator and sensor components in the ARE and peripheral devices is currently defined to use a serial communication i.e. a COM port or a virtual COM port. Messaging via this interface can either adhere to the CIM protocol (see section 5.15) or use any other protocol using the raw port implementation of the CIM communication services.")]),t._v(" "),e("p",[t._v("All the communication with peripheral devices is done through a service in the ARE service layer called CIM Communication. The service is provided as a separate OSGi bundle which places its classes in the package "),e("code",[t._v("$1")]),t._v(". Access to the classes is done by exporting the entire package in the bundle.")]),t._v(" "),e("p",[t._v("Four classes of the CIM Communication service are important to the component programmer:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMPortManager")])]),t._v(" "),e("li",[e("p",[t._v("CIMController")])]),t._v(" "),e("li",[e("p",[t._v("CIMProtocolPacket")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventHandler")])])]),t._v(" "),e("h2",{attrs:{id:"cimportcontroller"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportcontroller"}},[t._v("#")]),t._v(" CIMPortController")]),t._v(" "),e("p",[t._v("CIMPortController is an abstract class which hides the actual implementation of the port controller. The port controller provides the same methods for sending packets using the CIM protocol, for raw port implementations and for future uses such as a port controller handling Zigbee connections.")]),t._v(" "),e("h2",{attrs:{id:"cimportmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportmanager"}},[t._v("#")]),t._v(" CIMPortManager")]),t._v(" "),e("p",[t._v("All CIM ports and other COM ports are access through the main class of the package CIMPortManager. This is implemented as a singleton with a public access method getInstance(). Thus all calls to the CIM communication service have to be done through:")]),t._v(" "),e("p",[e("code",[t._v("CIMPortManager.getInstance()")])]),t._v(" "),e("p",[t._v("Upon creation the CIMPortManager detects all the connected CIMs and registers them in a HashMap. CIMs are identified and stored by the combination of their CIM Id and their unique number. Therefore multiple CIMs of the same CIM Id can be used on the AsTeRICS platform.")]),t._v(" "),e("p",[t._v("On some computers there exist certain serial ports which do not work correctly and behave strangely. An example of such a port is a loopback port which echoes everything written to it or ports created by Bluetooth dongles. Since the CIMPortManager iterates through all serial ports, these ports can cause problems in the auto detection of attached CIMs and even lock up the runtime. Therefore a file "),e("em",[t._v("ignore_ports.txt")]),t._v(" in the directory "),e("em",[t._v("data/cimcommunication")]),t._v(" is parsed upon start of the auto detection. This file should be filled with the name of the COM ports behaving erratically one name per line.")]),t._v(" "),e("p",[t._v("To be able to communicate with a CIM, the CIM port manager provides several methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" uniqueNumber"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("These methods return a CIMPortController (read on for details) instance of the requested CIM. The method using two parameters will return the instance to the port controller which works with the CIM of the exact CIM ID and unique number. If the CIM cannot be found, null will be returned.")]),t._v(" "),e("p",[t._v("Requesting a connection without naming a unique number will return the first port controller connected to a CIM of the correct ID found in the HashMap holding all the port controllers.")]),t._v(" "),e("p",[t._v("Sending data to the connected peripheral can be done in several ways using the following methods of CIMPortManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMUniqueIdentifier")]),t._v(" cuid"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" ctrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Basically these three methods do the same thing, however they do it at different speeds as the first two methods will look up the port controller that the packet should be sent to. Again the method taking only the CIM ID as a parameter will look up the first correct port controller. The third method which is passed the CIMPortController instance returned on getConnection() is the fastest method and should be used whenever possible.")]),t._v(" "),e("p",[t._v("Sending a CIM packet is done by providing the feature address and request code for a certain packet. The feature addresses and request codes can be found in the CIM protocol specification and the basic addresses and requests are also provided as static fields in the CIMProtocolPacket class. If data has to be attached to a CIM protocol packet a byte array holding said data has to be passed to the method, otherwise the data parameter of the method has to be set to null. The caller can also decide whether a CRC checksum should be added to the packet although this is currently unimplemented.")]),t._v(" "),e("h2",{attrs:{id:"cimeventhandler"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimeventhandler"}},[t._v("#")]),t._v(" CIMEventHandler")]),t._v(" "),e("p",[t._v("Receiving a packet is done through use of the CIMEventHandler interface. This interface should be implemented by plugins that wish to communicate with CIMs (or raw ports). The interface contains two methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("These methods are called upon correct reception of a packet or upon discovery of an error (timeout of a reply, packet transmission errors, incorrect order of incoming packets …) respectively by the port controller.")]),t._v(" "),e("p",[t._v("Upon correct reception of a CIM protocol based packet the method handlePacketReceived() is called with an instance of CIMEventPacketReceived as parameter. After conversion of the CIMEvent to this class, the packet can be extracted from the event and processed further.")]),t._v(" "),e("p",[t._v("All detected errors lead to a call of handlePacketError() with an appropriate CIMEvent implementation. The possible implemenations are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMEventErrorPacketFault: holds information to error in packet and the broken packet itself")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventErrorPacketLost: holds information on serial number of lost packet")])])]),t._v(" "),e("p",[t._v("To register the event handler with a specific CIM port controller, the CIMPortController class exposes the following methods:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("addEventHandler(CIMEventHandler hdlr)")])]),t._v(" "),e("li",[e("p",[t._v("removeEventHandler(CIMEventHandler hdlr)")])])]),t._v(" "),e("p",[t._v("A port controller can handle multiple attached event handlers and remove each one separately.")]),t._v(" "),e("h2",{attrs:{id:"cimprotocolpacket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimprotocolpacket"}},[t._v("#")]),t._v(" CIMProtocolPacket")]),t._v(" "),e("p",[t._v("This class holds all the information given in a packet transferred to or from a CIM. There are two ways the developer has to use this class. Upon sending packets the sending component has to set the feature address and the request code. The CIMProtocolPacket class provides the constants as static field to facilitate setting commands.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x00")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x01")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_EVENT_REPLY")]),t._v(" \t\t\t "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x20")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Furthermore the class contains constants for the global features that every CIM has to provide.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("FEATURE_UNIQUE_SERIAL_NUMBER")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Upon reception of an incoming packet the component associated with the CIM sending the packet is notified and a reference to the packet is passed as an instance of CIMProtocolPacket wrapped in a CIMEvent instance. The developer can access all the fields of the packet via the getter methods the class provides:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAreCimID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSerialNumber")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFeatureAddress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequestReplyCode")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCrc")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("h2",{attrs:{id:"serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[t._v("#")]),t._v(" Serial ports not adhering to CIM Protocol (Raw Ports)")]),t._v(" "),e("p",[t._v("Some peripherals use a proprietary protocol to transfer their data. If this is the case the user can open a raw port through the CIMPortManager method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will open the port with the name specified in the parameter portName and set the communication to the specified Baud rate.")]),t._v(" "),e("p",[t._v("Data can be sent to peripheral using the sendPacket() method for the returned CIMPortController. The packet will simply transfer the byte array passed in the data parameter and ignore the values giving the in the other parameter fields.")]),t._v(" "),e("p",[t._v("Received data will be forwarded to the event handler through calls to handlePacketReceived() with a CIMEventRawPacket as parameter. This class holds a public member variable b which holds the value of the received byte. The event handler has to handle the reconstruction of the proprietary packet itself.")]),t._v(" "),e("p",[e("strong",[t._v("HighSpeed Raw Ports:")])]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" highSpeed"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("A second variant opf the getRawConnection method allows specification of a “highSpeed” parameter. If highSpeed is true, the CIMPortController does not apply any connection handling or callbacks for received data to avoid performance problems in higher bandwidth streaming use cases. In this case, the CIMPortController can return the JAVA InputStream for the openend COM port connection and the plug developer can use it as desired:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("portController "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COM12")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("115200")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nin "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" portController"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputStream")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("available")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" myHandlePacket "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("read")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h2",{attrs:{id:"communication-through-a-socket-interface-remote-connection-manager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communication-through-a-socket-interface-remote-connection-manager"}},[t._v("#")]),t._v(" Communication through a socket interface: Remote Connection Manager")]),t._v(" "),e("p",[t._v("When using third party software that runs on the same platform (as for example the prominently used On Screen Keyboard Application OSKA), it becomes necessary to establish a communication between ARE and the third party application. This is managed by the RemoteConnectionManager found in the package eu.asterics.mw.services. The main interface to this manager are the classes RemoteConnectionManager and IRemoteConnectionListener.")]),t._v(" "),e("h2",{attrs:{id:"iremoteconnectionlistener"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#iremoteconnectionlistener"}},[t._v("#")]),t._v(" IRemoteConnectionListener")]),t._v(" "),e("p",[t._v("This interface is implemented by plugins that need to communicate via a socket communication. The interface contains the following methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionEstablished")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dataReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionLost")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionClosed")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("connectionEstablished() is called whenever a plugin requests a connection and the connection has been established. This can either happen if a connection has already been established before or if the new connection has finished its setup and connection process.")]),t._v(" "),e("p",[t._v("dataReceived() is called whenever new data arrives from the other end of the connection. Data is transferred in a byte array and has to be processed by the event listener.")]),t._v(" "),e("p",[t._v("connectionLost() is called when the connection management cannot read from or write to the socket.")]),t._v(" "),e("p",[t._v("connectionClosed() is called after the connection has been closed.")]),t._v(" "),e("h2",{attrs:{id:"remoteconnectionmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#remoteconnectionmanager"}},[t._v("#")]),t._v(" RemoteConnectionManager")]),t._v(" "),e("p",[t._v("The RemoteConnectionManager is implemented as a singleton and can be accessed via a public static member of the class. Thus access is always achieved through:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RemoteConnectionManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance\n")])])]),e("p",[t._v("A connection is opened by calling the RemoteConnectionManager’s method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" requestConnection "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRemoteConnectionListener")]),t._v(" l"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This call will try to access a connection on the specified port. Although the port is actually an integer it is passed as a String here. The method will return true if a connection on this port has already been established and attach the remote connection listener passed in the second argument to the connection. If there is no active connection on the specified port, the requestConnection method will initiate the setup of the connection and return false. With this return value the user can decide whether he needs to perform setup actions or will be able to do this in the connectionEstablished() callback.")]),t._v(" "),e("p",[t._v("The socket connection handling is implemented using two threads, one for sending, one for receiving data. The receiver thread will continuously read data from the socket and forward it to the registered listener calling the dataReceived() method. Since incoming data is handled in another thread than the plugin which will use the socket connection, access to the methods handling this data or the way of passing data should be done in a synchronised code block.")]),t._v(" "),e("p",[t._v("Sending data is done calling the method sendData of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is called using a String holding the port number of the connection socket and an array of bytes to be sent. The call to this method will place the data in an outgoing queue and return true if this was successful. Thus it is not guaranteed that the data has already been sent when the method returns. The sender thread will grab data from the outgoing queue and transfer it via the socket or call the connectionLost() method of the registered listener if there are problems while sending.")]),t._v(" "),e("p",[t._v("Once the connection to a socket is not needed anymore, the user has to close the connection, calling the following method of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("closeConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will close the socket connection, end all threads and return.")]),t._v(" "),e("h2",{attrs:{id:"local-storage-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#local-storage-service"}},[t._v("#")]),t._v(" Local Storage Service")]),t._v(" "),e("p",[t._v("If a model needs to save its own calibration data, training data or other private data that can be different in every model and every instance, the local storage service provides a method to save different data to the same file name on a per plugin instance per model basis.")]),t._v(" "),e("p",[t._v("The service uses a directory tree structure that is placed in the directory the OSGi is run from. Data is saved in a directory called “storage”. In this directory, directories for every model name of a model that uses at least one plugin that accesses local storage can be found. In the third directory layer, directories with the plugin instance name of every plugin that accesses local storage can be found. Thus if a model named “timertest” uses a plugin instance named “timer1” that saves local data this data can be found at the path location “storage/timertest/timer1”.")]),t._v(" "),e("p",[t._v("The service practically consists of only one method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLocalStorageFile")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" fileName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Calling this method located in the AREServices class will return a File object pointing to the requested file name or null if the file could not be opened or the model name could not be retrieved. After opening the file the standard JAVA ways to manipulate files apply.")]),t._v(" "),e("h2",{attrs:{id:"keyboard-mouse-native-hook-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-mouse-native-hook-services"}},[t._v("#")]),t._v(" Keyboard/Mouse Native Hook Services")]),t._v(" "),e("p",[t._v("The AsTeRICS service jnativehook (if enabled) provides access to the library "),e("a",{attrs:{href:"https://github.com/kwhat/jnativehook",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/kwhat/jnativehook"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Additionally, the service contains the singleton NativeHookServices that initializes the library to be usable in plugins. A plugin that wants to be a keaboard/mouse listener only has to add the listener to the GlobalScreen instance of the library.")]),t._v(" "),e("h2",{attrs:{id:"computer-vision-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#computer-vision-services"}},[t._v("#")]),t._v(" Computer Vision Services")]),t._v(" "),e("p",[t._v("The AsTeRICS services javacv and computervision (if enabled) provide access to the library "),e("a",{attrs:{href:"https://github.com/bytedeco/javacv",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/bytedeco/javacv"),e("OutboundLink")],1),t._v(", which again provides access to numerous libs in the field of computer vision (e.g. OpenCV), frame grabbing and frame rendering. Additionally, some helper classes are provided for face detection.")]),t._v(" "),e("h2",{attrs:{id:"data-conversion-utilities"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-conversion-utilities"}},[t._v("#")]),t._v(" Data Conversion Utilities")]),t._v(" "),e("p",[t._v("The middleware provides the class “ConversionUtils” that provide static helper methods to convert model data types to byte arrays and vice versa. The conversion is needed to convert incoming data of input ports or outgoing data to output ports. There are methods for each type of conversion. If two connected ports (output to input) have different data types the data is automatically converted to the data type of the input port.")]),t._v(" "),e("p",[t._v("Check the class ConversionUtils for a full list of supported methods: "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"fetching-resource-uris-with-resourceregistry-class"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fetching-resource-uris-with-resourceregistry-class"}},[t._v("#")]),t._v(" Fetching resource URIs with ResourceRegistry class")]),t._v(" "),e("p",[t._v("If a plugin needs resources like data files (images, keyboard files, haarcascade definitions,…), the class "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("ResourceRegistry"),e("OutboundLink")],1),t._v(" must be used to fetch the resource URI.")]),t._v(" "),e("p",[t._v("This can be done by using the method:")]),t._v(" "),e("p",[e("code",[t._v("public URI getResource(String resourcePath, RES_TYPE type) throws URISyntaxException")])]),t._v(" "),e("p",[t._v("Returns the URI according to the given resourcePath string and the given resource type RES_TYPE.")]),t._v(" "),e("p",[t._v("Please refer to the Javadoc of the class and to the "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Fetching-resources-with-class-ResourceRegistry",target:"_blank",rel:"noopener noreferrer"}},[t._v("wiki page"),e("OutboundLink")],1),t._v(" for further examples.")]),t._v(" "),e("h2",{attrs:{id:"error-reporting-astericserrorhandling"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-astericserrorhandling"}},[t._v("#")]),t._v(" Error Reporting (AstericsErrorHandling)")]),t._v(" "),e("p",[t._v("The "),e("code",[t._v("AstericsErrorHandling")]),t._v(" provides a unified logging and error reporting mechanism. It contains methods for reporting an error of a component or even the ARE.")]),t._v(" "),e("h3",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),e("p",[t._v("The Logging support provides a uniform way of error reporting in the runtime environment so we have utilized the Java logging libraries and the various severity levels supported. The AsTeRICS error handling mechanism is used extensively from the runtime core classes but also utilized by the AsTeRICS components via the AstericsErrorHandling interface.")]),t._v(" "),e("p",[t._v("Each component is allowed to report an error message, a debug information or a simple information to be displayed on the screen. The ARE maintains four separate log files and updates them whenever a new error occurs. In particular there are different loggers for reporting severe errors, warnings, fine errors and one logger that contains them all.")]),t._v(" "),e("p",[t._v("ARE also maintains a status object for the current status of the runtime environment. Whenever a fatal error occurs (either internally or caused by one of the deployed components) the status changes to fatal error. Other possible statuses are unknown, OK, deployed, running and paused.")]),t._v(" "),e("p",[t._v("The ACS can request the current status of the runtime environment and update its own state accordingly. For example the ACS user can be informed about the current ARE status while the ACS will terminate a connection (or refuse to establish a new one) with a non-working ARE.")]),t._v(" "),e("p",[t._v("Using a Logger is the recommended way to report notifications or error descriptions to the user. In the ARE framework, using the Java logging service is recommended. The Java logger can be configured using the file “logging.properties” (see section 2.3.3.1) and used as follows:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("…"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsErrorHandling")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h3",{attrs:{id:"error-reporting-of-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-of-components"}},[t._v("#")]),t._v(" Error Reporting of components")]),t._v(" "),e("p",[t._v("If a component wants to notify an error it should use the following method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_warning.log” file. Additionally the status of the component is set to error with the given error message and an error dialog is shown in the ARE gui, if enabled.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportInfo")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" info"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_fine.log” file.")]),t._v(" "),e("h3",{attrs:{id:"status-checking"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#status-checking"}},[t._v("#")]),t._v(" Status checking")]),t._v(" "),e("p",[t._v("The status checking mechanism is responsible for recording the current status of the ARE or the error state of a component. The status is recorded by creating and storing objects called "),e("em",[t._v("statusObjects")]),t._v(". A statusObject stores the status of its creator as a string, its creator (the ARE or the specific component) and the error message.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setStatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" status"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The status of the ARE can be one of the following strings:")]),t._v(" "),e("p",[t._v("UNKNOWN: initial state for the ARE")]),t._v(" "),e("p",[t._v("OK: ARE is running and ready to deploy a model")]),t._v(" "),e("p",[t._v("DEPLOYED: A model has been deployed and the ARE is now ready to run the model")]),t._v(" "),e("p",[t._v("RUNNING: A model is running on the ARE")]),t._v(" "),e("p",[t._v("PAUSED: A model has been deployed and the ARE is in paused mode")]),t._v(" "),e("p",[t._v("ERROR: An error occurred")]),t._v(" "),e("p",[t._v("FATAL_ERROR: A fatal error occurred, model or deployment aborted")]),t._v(" "),e("p",[t._v("The status of a component can only be the ERROR state because this is the only state of a component that we are interested in recording for later use. An ERROR statusObject is automatically created when a component calls the reportError method as described above.")]),t._v(" "),e("p",[t._v("For retrieving the statusObjects, the following method is used:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("queryStatus")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" fullList"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is particularly useful for the ACS to determine the current status of the runtime environment and of the deployed components. If the ARE or one of the components are in a problematic state it can be reflected in the ACS.")]),t._v(" "),e("p",[t._v("The boolean "),e("em",[t._v("fullList")]),t._v(" argument specifies whether the error list to be returned will include all statusObjects generated since the ARE startup or just those that have not been requested by the ACS before.")]),t._v(" "),e("h2",{attrs:{id:"the-are-thread-pool"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-thread-pool"}},[t._v("#")]),t._v(" The ARE Thread Pool")]),t._v(" "),e("p",[t._v("In order to avoid resource greedy threads and to achieve best thread handling, ARE uses one of the Thread Pool implementations provided by Java since JRE 1.5. In particular, we have utilized the java.util.concurrent.Executors library for creating a CachedThreadPool.")]),t._v(" "),e("p",[t._v("A cached thread pool will create threads as needed but will reuse previously instantiated threads when they are available and inactive. A cached thread pool is particularly useful for many short-lived asynchronous tasks and improves the performance of the runtime environment.")]),t._v(" "),e("p",[t._v("Developers are expected to use the ARE thread pool for executing their tasks that require a new Thread. You will need to import the middleware services package in order to get access to the "),e("strong",[t._v("AstericsThreadPool")]),t._v(" class.")]),t._v(" "),e("h2",{attrs:{id:"the-are-gui-support"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-gui-support"}},[t._v("#")]),t._v(" The ARE GUI support")]),t._v(" "),e("p",[t._v("The ARE provides a panel area (“ARE Desktop”) where plugins can display their graphical elements using the ARE GUI support classes. The ACS provides a dedicated canvas editor that allows end users positioning and resizing graphical elements of the plugins. Based on this information, the ARE displays plugins on the local device, maintaining the correct screen position and aspect ratio of graphical elements with respect to the screen resolution of the deployment device. (For more information about the usage of the ACS GUI editor and the ARE GUI control panel refer to the User Manual.)")]),t._v(" "),e("p",[e("img",{attrs:{src:a(294),alt:""}})]),t._v(" "),e("p",[e("strong",[t._v("GUI composition using the ACS GUI designer (right), resulting ARE GUI (left)")])]),t._v(" "),e("p",[t._v("In order to be recognized as GUI-plugin by ACS and ARE, the bundle descriptor of the plugin has to be extended with a dedicated "),e("code",[t._v("")]),t._v(" entry, which specifies the default size in a virtual coordinate system of 10000/10000 pixels. In the deployment model, the ACS will create position and size information according to the area defined in the ACS GUI designer.")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("gui")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("width")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("5000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("height")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("3000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[e("strong",[t._v("The gui element addition to the bundle descriptor")])]),t._v(" "),e("p",[t._v("The AsTeRICS middleware provides some services to the plugin developers in order to allow them displaying their GUI element onto the ARE Desktop. The middleware services encapsulate the complexity of dealing with positioning and allow displaying all GUI elements onto the same container: the ARE Desktop.")]),t._v(" "),e("p",[t._v("All GUI services are defined in eu.asterics.mw.services.AREServices so developers need to import this class in order to get access to the following methods:")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void displayPanel (JPanel panel, IRuntimeComponentInstance componentInstance, boolean display)")])])]),t._v(" "),e("p",[t._v("This method is used for displaying (or hiding) a plugin’s panel at/from the ARE desktop. Developers need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the panel they want to be displayed (or removed)")])]),t._v(" "),e("li",[e("p",[t._v("the plugin object, in order to help the middleware finding the desired position and dimensions from the deployment model")])]),t._v(" "),e("li",[e("p",[t._v("a boolean argument specifying if they wish to hide or show the given panel.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("Dimension getAvailableSpace(IRuntimeComponentInstance componentInstance)")])])])]),t._v(" "),e("p",[t._v("The space that each plugin will occupy on the ARE desktop is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the available space for their graphical elements by calling the getAvailableSpace method which will return the space occupied for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("Point getComponentPosition (IRuntimeComponentInstance componentInstance)")])])]),t._v(" "),e("p",[t._v("The positioning of plugin’s GUI elements is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the position of their graphical elements by calling the getComponentPosition which will return the position on screen for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void adjustFonts(JPanel panel, int maxFontSize, int minFontSize, int offset)")])])]),t._v(" "),e("p",[t._v("This service can be used by plugin developers interested in auto-adjusting the fonts of their GUI components depending on the space occupied for their plugins on the ARE desktop. They need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a panel to which all the internal fonts will be auto-adjusted")])]),t._v(" "),e("li",[e("p",[t._v("the maximum font size (in case there is more space available than needed)")])]),t._v(" "),e("li",[e("p",[t._v("the minimum font size, in case there is too little space which causes the text to become non-readable. Finally, the offset argument is used in case we want to occupy a percentage of the available space.")])])]),t._v(" "),e("p",[t._v("A good approach to GUI plugin development is to analyse existing plugins which provide GUI elements, e.g. the BarDisplay or Oscilloscope actuators, or the Slider or Cellboard sensor components.")]),t._v(" "),e("p",[t._v("If the plugin uses "),e("strong",[t._v("Swing to implement a GUI-widget")]),t._v(" (e.g. Slider,…), please check the following guidelines as well 4.2.8")]),t._v(" "),e("h2",{attrs:{id:"are-core-events-notification-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-core-events-notification-services"}},[t._v("#")]),t._v(" ARE core events notification services")]),t._v(" "),e("p",[t._v("The ARE core events notification service allows plugins to register/unregister to the ARE middleware in order to receive notifications of ARE core events.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void registerAREEventListener(IAREEventListener clazz)")])])]),t._v(" "),e("p",[t._v("It is sometimes necessary that plugins can be notified of various ARE events so they can react as needed. This method can be called by component instances that wish to be notified of such ARE events. Currently, the core events supported are:")]),t._v(" "),e("ul",[e("li",[e("p",[e("em",[t._v("preDeployModel:")]),t._v(" registered ARE event listeners will be notified just before the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postDeployModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStartModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStartModel:")]),t._v(" registered ARE event listeners will be notified immediately after the currently deployed model has been started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStopModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStopModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("prePauseModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postPauseModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preResumeModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postResumeModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified just before the bundles are is installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified immediately after the bundles have been installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("void unregisterAREEventListener(IAREEventListener clazz)")])])])]),t._v(" "),e("p",[t._v("Plugins already registered for receiving ARE core events can un-register using this method.")]),t._v(" "),e("h2",{attrs:{id:"dynamic-properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-properties"}},[t._v("#")]),t._v(" Dynamic Properties")]),t._v(" "),e("p",[t._v("In some applications, the ACS should be able to provide several options for property values which are not known in advance but depend on the current state of the ARE (see AsTeRUCS User Manual, section “Dynamic Properties”)… A typical example is the selection of a file which is available in the ARE file system (e.g. a .wav-file for the wave player plugin). This feature is particularly useful for plugins that are hardware dependent (selecting e.g. a soundcard or a midi player), or depend on the file system.")]),t._v(" "),e("p",[t._v("If a plugin is implementing a dynamic property, the values will be requested from the ARE, as soon as the ACS is synchronized with the ARE, via the ASAPI function:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),e("span",{pre:!0,attrs:{class:"token generics"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n")])])]),e("p",[t._v("The ARE middleware will forward the request for valid property values to the component instance with the given ID. The "),e("code",[t._v("List getRuntimePropertyList(String key)")]),t._v(" method has to be implemented in the "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" class which every AsTeRICS component extends.\nThe method implementation creates the list of valid properties and returns it to the middleware and the latter forwards the string list to the ACS via ASAPI. The ACS will dynamically update the property list in the properties window.")]),t._v(" "),e("p",[t._v("For an example of the dynamic property implementation, see the WaveFilePlayer plugin.")]),t._v(" "),e("h2",{attrs:{id:"data-synchronization"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-synchronization"}},[t._v("#")]),t._v(" Data Synchronization")]),t._v(" "),e("p",[t._v("Some plugins need data of multiple input ports to be able to start processing. Without data synchronization it is possible that one input port of a plugin receives multiple values before another port gets one value, although both signal channels deliver values at the same sampling rate.")]),t._v(" "),e("p",[t._v("The synchronization service provides a buffering mechanism at the middleware level that can be utilized by plugin developers in order to make sure that incoming data of selected input ports arrives synchronized.")]),t._v(" "),e("p",[t._v("To use the synchronization service in the plugin code, plugin developers are expected to extend the "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" instead of implementing the "),e("em",[t._v("IRuntimeInputPort.")]),t._v(" Basically, "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" provides a default implementation for the necessary buffering methods, as shown in the table below.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("abstract")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DefaultRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("receiveData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" startBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" stopBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" isBuffered "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("The designer can define that a plugin’s input port should be synchronized with some other input ports via the ACS. This will cause an argument change of the inputPort element on the deployment model file (e.g.,"),e("code",[t._v('')]),t._v(").")]),t._v(" "),e("p",[t._v("As soon as a model is deployed on the ARE, the middleware collects per component every port noted as synchronized port. When the model is successfully deployed and started, the ARE will buffer data which enters synchronized input ports until data on all synchronized ports has arrived. At that point, the ARE will call a new "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" callback method.")]),t._v(" "),e("p",[t._v("Developers that wish to support data synchronization need to implement the following method at their component instances.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("syncedValuesReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Where dataRow is a HashMap between Input Port ID and byte[]. For synchronized input ports, instead of implementing the regular "),e("em",[t._v("void receiveData(byte[] data)")]),t._v(" method which delivers incoming data of a single port, developers need to implement the "),e("em",[t._v("syncedValuesReceived")]),t._v(" method which will be called from the ARE with synchronized data from all the input ports that have been selected.")]),t._v(" "),e("h2",{attrs:{id:"interfacing-native-c-c-code-via-jni"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#interfacing-native-c-c-code-via-jni"}},[t._v("#")]),t._v(" Interfacing Native C/C++ Code via JNI")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",[e("code",[t._v("## Specifying native libraries in the Manifest\n")])])]),e("p",[t._v("The Manifest file of a bundle which includes native libraries has to specify these .dlls as shown in the following example:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-sensors.mycomponent\nBundle-SymbolicName: org.asterics.mycomponent\nBundle-Version: 0.1.0\nBundle-NativeCode: lib/native/mylib1.dll;\n lib/native/mylib2.dll;\n lib/native/mylib3.dll;\n osname=win32;processor=x86;\n osname=win;processor=x86-64;\n osname=win8;processor=x86;\n osname=win8;processor=x86-64;\n osname=windows 8;processor=x86;\n osname=windows 8;processor=x86-64;\n osname=windows8;processor=x86;\n osname=windows8;processor=x86-64;\n osname=Windows 8.1;processor=x86;\n osname=Windows 8.1;processor=x86-64\nDynamicImport-Package: *\n")])])]),e("p",[t._v("Components which interface native code via JNI and their respective manifest files can be found in the SVN, e.g. the “webcamera” component or the signal processing plugins by Starlab.")]),t._v(" "),e("p",[t._v("Note that the .jar containing the .dlls can be built manually using the command:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("jar "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-cvfm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("/mybundle.jar META-INF/MANIFEST.MF "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])]),e("h2",{attrs:{id:"java-implementation-jni-bridge"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#java-implementation-jni-bridge"}},[t._v("#")]),t._v(" Java-Implementation: JNI-Bridge")]),t._v(" "),e("p",[t._v("The recommended way to interface Java code of an ARE component with native code in a .dll is a bridge class which encapsulates the JNI functions and callbacks and maps the functions of the ARE component’s lifecycle-, port- and property-management to the corresponding functions in the native code. Here is a simple example which comprises one component property and receives data callbacks from a thread implemented in C. The received values are transferred to the component’s output port:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("jni")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mycomponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Statically load the native library */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib1"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib1.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib2"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib2.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib3"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib3.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAnonymousLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("my_outport "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Activates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("activate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Deactivates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("deactivate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Gets the value of the named property.\n *\n * @param key the name of the property to be accessed\n * @return the value of the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Sets the named property to the defined value.\n *\n * @param key the name of the property to be accessed\n * @param value the value to be assigned to the named property\n * @return the value previously assigned to the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code on demand to signify \n * an internal error. The first argument corresponds to an error code \n * and the second argument corresponds to a textual description \n * of the error.\n * @param errorCode an error code\n * @param message a textual description of the error\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("errorReport_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" errorCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("severe")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorCode "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('": "')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code to send data\n * to the component’s output port.\n *\n * @param data1 (range is [0, Short.MAX_VALUE])\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("newData_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"c-implementation-callbacks-and-jni-code"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#c-implementation-callbacks-and-jni-code"}},[t._v("#")]),t._v(" C-Implementation: Callbacks and JNI code")]),t._v(" "),e("p",[t._v("The native C-code needs to be compiled into a .dll and include the JNI header files and libraries. An example for the Microsoft Visual Studio compiler looks as follows:")]),t._v(" "),e("p",[t._v("The following C-example shows how to implement a JNI-callback from a C-thread and an ARE-compliant exchange of a component property:")]),t._v(" "),e("div",{staticClass:"language-c extra-class"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" JavaVM "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" jobject g_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myProperty"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"20"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_activate")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\terror_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetJavaVM")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tjclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newData_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// explicitly ask for a global reference")]),t._v("\n\tg_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_init")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_deactivate")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_exit")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tenv"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("DeleteGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_getProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\t\t\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_setProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n\t strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown */")]),t._v("\n\t strValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\tpollingIntervalValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prepare JNI callback")]),t._v("\n JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n g_jvm"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("AttachCurrentThread")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newCoordinates_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// perform JNI callback")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("CallVoidMethod")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("my_new_data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("This native C-code needs to be compiled into a .dll, the JNI header files and libraries have to be specified to the compiler and linker respectively. An example for the Microsoft Visual Studio build tools looks as follows:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('cl -c -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include" -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include\\win32" -I ".\\3rdparylib" my_c_file.cpp /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_WARNINGS" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /Gm- /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /errorReport:queue \nlink my_c_file.obj /DLL /OUT:".\\my_c_file.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"libmsvc" /LIBPATH:"3rdparylib" "odbc32.lib" "odbccp32.lib" "comctl32.lib" "winmm.lib" "opengl32.lib" "ole32.lib" "strmiids.lib" "uuid.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "oleaut32.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"atlthunk" /NODEFAULTLIB:"LIBCMT" /MANIFESTUAC:"level=\'asInvoker\' uiAccess=\'false\'" /DEBUG /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:QUEUE\n')])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("The compiler and linker switches may differ depending on the nature of your dependency libraries and setup.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-packaging-environment-ape"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-packaging-environment-ape"}},[t._v("#")]),t._v(" AsTeRICS Packaging Environment (APE)")]),t._v(" "),e("p",[t._v("The APE let’s you select a set of AsTeRICS model files and create a downstripped (minimum size) version of the ARE including plugins, configuration files and data files to execute the models. Optionally, the APE allows the creation of native installers for Windows, Linux incl. Raspberry Pi and Mac OSX using "),e("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaFX packaging technology"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("See "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/AsTeRICS-Packaging-Environment-(APE)",target:"_blank",rel:"noopener noreferrer"}},[t._v("APE documentation"),e("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{289:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_74b8c615b8455605.d7a70de8.png"},290:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_c0991ef32ae9b458.424ba3f3.png"},291:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_4dfe72317ab9f571.6b0975c3.jpg"},292:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_b6693a1cbcd9178a.03fc763d.png"},293:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_f1a0b4f36dd370ba.c1a39a2a.jpg"},294:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_fb7627584ba9d5d7.45a2067d.png"},295:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_3e993efbc73f2910.c6357005.png"},939:function(t,e,a){"use strict";a.r(e);var s=a(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"are-middleware"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-middleware"}},[t._v("#")]),t._v(" ARE Middleware")]),t._v(" "),e("h2",{attrs:{id:"the-asterics-runtime-environment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-asterics-runtime-environment"}},[t._v("#")]),t._v(" The AsTeRICS Runtime Environment")]),t._v(" "),e("p",[t._v("The AsTeRICS Runtime environment (ARE) is an OSGi-based middleware [3] which allows software plugins to run in parallel. The plugins usually represent a sensor or an actuator and are implemented as independent OSGi bundles. The runtime environment identifies AsTeRICS plugins from other OSGi bundles based on metadata defined inside the plugins.")]),t._v(" "),e("p",[t._v("The ARE expects from plugin-developers to define the structure of their plugins (properties, inputs, outputs and event ports) in XML files. Based on these XMLs, the middleware constructs a runtime representation of each installed AsTeRICS plugin.")]),t._v(" "),e("p",[t._v("Furthermore, the ARE expects a runtime model (system model) which usually comes from the AsTeRICS Configuration Suite (ACS). The ACS is running on a Windows Personal Computer (.net 4.0 required) and mainly used to graphically design the layout of the system as a network of interconnected components. The system model is another XML file that defines the components participating in a specific application, connections between them, events and other properties. Based on this file, ARE knows which plugins to activate and how to define the data flow between them. Since the system model represents the main communication means between the ACS and the ARE, it is expected to be a serialisable object, easy to transfer and translate. ARE and ACS communicate through an appropriate TCP/IP-based communication protocol named ASAPI.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(289),alt:""}})]),t._v(" "),e("p",[t._v("The ARE also provides “services” to plugin developers (for example communication support for COM ports) and it allows reporting errors on the runtime environment, registering event listeners and interacting with its graphical user interface (ARE GUI).")]),t._v(" "),e("p",[t._v("The ARE GUI is a simple graphical environment developed to allow end-users to interact directly with the runtime environment. It may be used to modify runtime parameters of a model via buttons or sliders, and to monitor live signals and events of the running model.")]),t._v(" "),e("h2",{attrs:{id:"are-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-components"}},[t._v("#")]),t._v(" ARE Components")]),t._v(" "),e("p",[t._v("The ARE consist of the following main parts:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("The ARE middleware")])]),t._v(" "),e("li",[e("p",[t._v("ARE plugins (also referred to as “components”) – sensor, processor and actuator modules which provide functional building blocks for assistive functionalities")])]),t._v(" "),e("li",[e("p",[t._v("A service layer which provides infrastructure to the ARE components,"),e("br"),t._v("\nfor example COM port and communication management for connection of the Communication Interface Modules (CIMs)")])])]),t._v(" "),e("p",[t._v("The ARE is commonly deployed on an embedded device, running an appropriate operating system (OS), typically an embedded variant of Windows. On top of the OS, an appropriate Java Virtual Machine (JVM) is used to host the OSGi component framework which provides support for modularity and dynamic loading/unloading of components.")]),t._v(" "),e("p",[t._v("All the core components of the framework (described in detail later) are defined as OSGi modules. Certain components that need to access legacy code (e.g., written in C or C++) are also deployed on top of OSGi, and are interfaced to the native code using Java Native Interface (JNI) as needed. In this regard, and with the exception of the pluggable components that use native code interfaces with platform-specific JNI bindings, the ARE middleware is expected to be "),e("em",[t._v("platform independent")]),t._v(".")]),t._v(" "),e("p",[t._v("The implementation requires basically JAVA 1.7 (JDK/JRE 7) and an OSGi framework (which is part of the source code downloads).")]),t._v(" "),e("h2",{attrs:{id:"about-osgi"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#about-osgi"}},[t._v("#")]),t._v(" About OSGi")]),t._v(" "),e("p",[t._v("The Open Service Gateway initiative (OSGi) is an open specification that enables the modular assembly of software built with the Java technology [3]. The OSGi Service Platform facilitates the componentization of software modules and applications and assures interoperability of applications and services over a variety of networked devices.")]),t._v(" "),e("p",[t._v("OSGi technology is the dynamic module system for Java™. Java provides the portability that is required to support products on many different platforms. The OSGi technology provides the standardized primitives that allow applications to be constructed from small, reusable and collaborative components. These components can be composed into an application and deployed; The OSGi Service Platform provides a service-oriented architecture that enables these components to dynamically discover each other for collaboration, and thereby forms the optimal basis for the AsTeRICS middleware.")]),t._v(" "),e("h2",{attrs:{id:"getting-started-with-asterics-development"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#getting-started-with-asterics-development"}},[t._v("#")]),t._v(" Getting Started with AsTeRICS Development")]),t._v(" "),e("p",[t._v("The AsTeRICS source code repository is hosted at github and located at")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS",target:"_blank",rel:"noopener noreferrer"}},[e("strong",[t._v("https://github.com/asterics/AsTeRICS")]),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("The source code contains open source software modules in JAVA, C++ and C, and proprietary modules by AsTeRICS partners which are available in binary from (.dll or .exe).")]),t._v(" "),e("p",[t._v("The licenses of the utilized software packages and 3rd party products can be viewed in the file "),e("em",[t._v("/documentation/licenses.doc")])]),t._v(" "),e("p",[t._v("Currently, the editor for OSKA (the on-screen keyboard application) is the only commercial software package within the AsTeRICS framework – and not included in the free downloads. The OSKA editor is only needed if you want to design custom on-screen keyboard layouts for OSKA (see AsTeRICS User Manual).")]),t._v(" "),e("h2",{attrs:{id:"understanding-the-component-build-scripts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#understanding-the-component-build-scripts"}},[t._v("#")]),t._v(" Understanding the component build-scripts")]),t._v(" "),e("p",[t._v("A typical ANT build script for an ARE component looks like the following:")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("project")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("component.id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("processor.MyComponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- set global properties for this build --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("build"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../out/production/${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src.java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dist"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("runtime"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../../examples/ARE"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bin"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${osgi}/org.eclipse.osgi_3.6.0.v20100517.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${middleware}/asterics.ARE.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the time stamp --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("tstamp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the build directory structure used by compile --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mkdir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile the source "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("javac")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("srcdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${src.java}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("destdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("verbose")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("debug")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${debug}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("classpath")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${classpath}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("classpath")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("refid")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("generate the OSGi bundle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("jar")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("jarfile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("manifest")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}/META-INF/MANIFEST.MF"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("fileset")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("copy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("file")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("tofile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${runtime}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[t._v("In the first section of the build script, folder locations for the build intermediates, the final build products (.jar file) and the classpath are defined. The classpath usually points to the “bin” folder, the middleware “asterics.ARE.jar” and the osgi distribution. If a component needs additional resources, their location has to be defined here.")]),t._v(" "),e("p",[t._v("Subsequently the build script defines two build targets: the compilation of the Java source code and the creation of the .jar file. If the .jar file shall contain additional .dlls with native code, they have to be specified in the Manifest file as shows in section 5.14.1.")]),t._v(" "),e("p",[t._v("After the .jar file has been created in the distribution folder, it is copied to the runtime folder (/bin/ARE).")]),t._v(" "),e("h2",{attrs:{id:"starting-the-are-middleware-and-component-deployments"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#starting-the-are-middleware-and-component-deployments"}},[t._v("#")]),t._v(" Starting the ARE middleware and component deployments")]),t._v(" "),e("p",[t._v("To test the ARE and component bundles, open the folder “/bin/ARE”, and use ARE.exe, start.bat or start_debug.bat.")]),t._v(" "),e("h2",{attrs:{id:"structure-of-the-runtime-folder-bin-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-the-runtime-folder-bin-are"}},[t._v("#")]),t._v(" Structure of the runtime folder “./bin/ARE”:")]),t._v(" "),e("p",[t._v("This folder contains dependencies for running the ARE middleware and the .jars resulting from ANT builds, it has the following structure:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("/\n+- bin/\n +- ARE/\n +- data/ folder for plugin working data\n +- models/ stored models (configurations)\n +- profile/\n +- config.ini system bundles to be started\n +- services.ini general service bundles to be started\n +- services-windows.ini windows-specific service bundles\n +- services-linux.ini linux-specific service bundles\n +- services-macosx.ini macosx-specific service bundles\n +- org.eclipse.osgi/ osgi bundle cache folder\n +- 1238790741.log system log messages, stack trace\n +- tools/ plugin helper apps and dlls\n +- .logger stores console logging settings\n +- ARE.exe starts the ARE without console output\n +- areProperties stores recent window/GUI properties\n +- component bundle(s)\n +- asterics.ARE.jar ARE middleware\n +- asterics.mw.services.cimcommunication.jar CIM port manager\n +- grizzly-httpservice-bundle-2.3.23.jar http service for webservice feature\n +- javacv-*-linux|windows|macosx.jar platform specific javacv service\n +- tmp/*.log application log files\n +- jtester.exe helper app for checking Java version\n +- logging.properties configuration of loglevel etc.\n +- org.eclipse.osgi.*.jar osgi distribution\n +- sleeper.exe helper app for launcher timing\n +- start.bat starts ARE with console output\n +- findjava.bat searches for the newest 32bit JRE\n +- start_debug.bat starts ARE with Eclipse debug support\n +- start.sh starts ARE without console on Linux\n +- start_debug.sh starts ARE with debugging on Linux\n +- VCChecker.jar helper jar for checking VC redist dependency\n")])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Important Note: The osgi configuration folder “org.eclipse.osgi” in the “profile” subdirectory has to be deleted if .dlls in .jar bundles are updated or changed. (This folder is automatically created when starting the ARE and holds working data for the OSGI-bundles.) The One-Click build.xml script described in chapter 2.4.2 deletes the folder automatically.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-services"}},[t._v("#")]),t._v(" AsteRICS services")]),t._v(" "),e("p",[t._v("An AsteRICS service is a bundle that provides ARE-wide functionality usable by other services or plugins. The service can be optionally disabled which means that the service bundle is not installed and not activated. The file services.ini contains a list of general services to be loaded. Whereas the services-windows.ini, services-linux.ini and services-macosx.ini files contain platform dependent service names. You can also create your own use-case specific services ini file and edit the start script to load it.")]),t._v(" "),e("h2",{attrs:{id:"running-a-deployment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#running-a-deployment"}},[t._v("#")]),t._v(" Running a deployment")]),t._v(" "),e("p",[t._v("The “ARE.exe” starter application launches the ARE without console output and without debugging instrumentation.")]),t._v(" "),e("p",[t._v("Alternatively, the commandline batch script “start_debug.bat” which is provided in the folder “.bin/ARE” runs Java with additional configuration parameters including:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the location of the OSGi distribution")])]),t._v(" "),e("li",[e("p",[t._v("the profile subfolder which contains the config.ini file: “./bin/ARE/profile”")])]),t._v(" "),e("li",[e("p",[t._v("debugging instrumentation for the remote debugging server connection")])])]),t._v(" "),e("p",[t._v("After starting the ARE middleware, bundles are loaded and started on-demand if they are needed for the deployment of a model. If everything is properly configured, the ARE window comes up with a GUI and provides ASAPI server functionalities for connection of the ACS or other client applications.")]),t._v(" "),e("h2",{attrs:{id:"are-webserver-including-rest-api-websocket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver-including-rest-api-websocket"}},[t._v("#")]),t._v(" ARE webserver (including REST API, websocket)")]),t._v(" "),e("p",[t._v("The ARE contains a service that creates several web-based services. These include")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a webserver with document root "),e("em",[t._v("ARE/web")]),t._v(" and URL: "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a websocket at URL "),e("a",{attrs:{href:"http://localhost:8082/ws/astericsData",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8082/ws/astericsData"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a REST API at URL "),e("a",{attrs:{href:"http://localhost:8081/rest",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/rest"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a javascript REST API client implementation example at "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])])]),t._v(" "),e("h2",{attrs:{id:"define-autostart-model-per-command-line"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#define-autostart-model-per-command-line"}},[t._v("#")]),t._v(" Define autostart model per command line")]),t._v(" "),e("p",[t._v("By starting the ARE with the name of a model as first command line parameter a model that should be started automatically can be defined. The model must exist in the sub-folder “models”.")]),t._v(" "),e("p",[t._v("‘ARE.exe CameraMouse.acs’")]),t._v(" "),e("p",[t._v("or")]),t._v(" "),e("p",[t._v("‘start_debug.bat CameraMouse.acs’")]),t._v(" "),e("h2",{attrs:{id:"change-model-task-submit-timeout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-model-task-submit-timeout"}},[t._v("#")]),t._v(" Change model task submit timeout")]),t._v(" "),e("p",[t._v("The file “areProperties” contains properties to configure ARE features and to configure the internal model execution behaviour. The following internal model execution properties exist:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("ThreadPoolTasks.submitTimeout=20000")]),t._v(" "),e("ul",[e("li",[t._v("When submitting a task to be executed in the ModelExecutor thread a submit timeout can be configured. After the time elapsed a TimeoutException is thrown. The timeout value must be specified in milliseconds."),e("br"),t._v("\nThe submit timeout is used for starting, stopping, pausing and resuming a model.")])])])]),t._v(" "),e("h2",{attrs:{id:"debugging-the-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#debugging-the-are"}},[t._v("#")]),t._v(" Debugging the ARE")]),t._v(" "),e("p",[t._v("If the ARE is started using the “start_debug.bat” script and source-level debug information was added during the compilation (see section 2.3), debugging with Eclipse is supported via a remote debugging connection. This is a convenient way for debugging an OSGI-based java framework with a lot of plugins. To enable the debugging support in Eclipse, a Debug Configuration is created via the dedicated menu entry:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(290),alt:""}})]),t._v(" "),e("p",[t._v("Create a “Remote Java Application” Debug Configuration and assign a name for it, e.g. “ARE”. Then, specify the connection properties of the Debug Configuration to use the Host “localhost” and the Socket/Port “1044” (this port is given in the ARE build scripts for the remote debug server to listen for incoming client connections):")]),t._v(" "),e("p",[e("img",{attrs:{src:a(291),alt:""}})]),t._v(" "),e("p",[t._v("Now launch the ARE using “start_debug.bat”. The messages in the console window should indicate the establishment of the listening socket 1044 for the debugging connection:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(292),alt:""}})]),t._v(" "),e("p",[t._v("Now, the usual debugging support of Eclipse can be used, including breakpoints in middleware or components, variable and context watch windows, single stepping etc. All these operations are performed in the Eclipse “Debug” perspective.")]),t._v(" "),e("p",[t._v("The following screenshot shows a program execution of the ARE which ran into a breakpoint (here: the OSKA plugin was halted as a command was selected in the OSKA-application and transferred to the ARE plugin’s command handler:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(293),alt:""}})]),t._v(" "),e("p",[t._v("I"),e("img",{attrs:{src:a(294),alt:""}}),t._v(" f the source-level debug information is missing (due to compilation without debugging support) an error message indicates a problem, e.g. the missing line number for breakpoint installation:")]),t._v(" "),e("h2",{attrs:{id:"services-and-utils-infrastructure-for-plugins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#services-and-utils-infrastructure-for-plugins"}},[t._v("#")]),t._v(" Services and Utils: Infrastructure for plugins")]),t._v(" "),e("p",[t._v("The ARE Services are a set of classes that enable the direct interaction between AsTeRICS plugins and other software to directly interact with the runtime environment. The most significant ARE Services are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIM Communication Service: the ARE CIM Communication service layer is a unified approach to allow plugins of the ARE to communicate with their associated hardware modules attached to the AsTeRICS platform via a COM port. A range of hardware modules are provided which implement the dedicated Communication Interface Module (CIM) protocol. Further details on this communication protocol and implementation details for the ARE CIM Communication Service can be found in chapter 5.15.")])]),t._v(" "),e("li",[e("p",[t._v("Remote Connection Service: the remote connection services allows external software that cannot be integrated into the standard plugin inter communication system used by the ARE, for example because of programming language incompatibilities, to work with the AsTeRICS system. For example, the interconnection of OSKA (the On-Screen Keyboard Application developed by AsTeRICS partner SENSORY) and the ARE uses the Remote Connection Service to send key selection information to the ARE. On the other hand, the ARE can reply with cell selection commands or other information. The actual communication is done via a protocol that can be understood by the Java ServerSocket implementation. The port number that the external software component connects to identifies the connecting component.")])]),t._v(" "),e("li",[e("p",[t._v("Local Storage Service: The Local Storage Service will allow plugins to store individual working data “per model” and “per plugin-instance”. This is necessary when plugins need to store own calibration data, pattern recognition samples or similar data. In course of the architectural refinements for the final prototype, a service class will be provided which generates an according folder and respective file read- and write methods.")])]),t._v(" "),e("li",[e("p",[t._v("Native Hook Services for systemwide keyboard and mouse capturing")])]),t._v(" "),e("li",[e("p",[t._v("Computer Vision services to support a unified way for frame grabbing, computer vision processing and video frame rendering.")])]),t._v(" "),e("li",[e("p",[t._v("Logging service")])]),t._v(" "),e("li",[e("p",[t._v("ConversionUtils: Helper class to convert port data streams into Java data types and vice versa.")])]),t._v(" "),e("li",[e("p",[t._v("Class "),e("strong",[t._v("ResourceRegistry")]),t._v(" to fetch resource URIs. If a plugin needs access to a config, data or a multimedia file, the class ResourceRegistry must be used.")])])]),t._v(" "),e("h2",{attrs:{id:"communicating-with-peripherals-cim-communication-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communicating-with-peripherals-cim-communication-service"}},[t._v("#")]),t._v(" Communicating with peripherals: CIM Communication service")]),t._v(" "),e("p",[t._v("Communication between actuator and sensor components in the ARE and peripheral devices is currently defined to use a serial communication i.e. a COM port or a virtual COM port. Messaging via this interface can either adhere to the CIM protocol (see section 5.15) or use any other protocol using the raw port implementation of the CIM communication services.")]),t._v(" "),e("p",[t._v("All the communication with peripheral devices is done through a service in the ARE service layer called CIM Communication. The service is provided as a separate OSGi bundle which places its classes in the package "),e("code",[t._v("$1")]),t._v(". Access to the classes is done by exporting the entire package in the bundle.")]),t._v(" "),e("p",[t._v("Four classes of the CIM Communication service are important to the component programmer:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMPortManager")])]),t._v(" "),e("li",[e("p",[t._v("CIMController")])]),t._v(" "),e("li",[e("p",[t._v("CIMProtocolPacket")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventHandler")])])]),t._v(" "),e("h2",{attrs:{id:"cimportcontroller"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportcontroller"}},[t._v("#")]),t._v(" CIMPortController")]),t._v(" "),e("p",[t._v("CIMPortController is an abstract class which hides the actual implementation of the port controller. The port controller provides the same methods for sending packets using the CIM protocol, for raw port implementations and for future uses such as a port controller handling Zigbee connections.")]),t._v(" "),e("h2",{attrs:{id:"cimportmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportmanager"}},[t._v("#")]),t._v(" CIMPortManager")]),t._v(" "),e("p",[t._v("All CIM ports and other COM ports are access through the main class of the package CIMPortManager. This is implemented as a singleton with a public access method getInstance(). Thus all calls to the CIM communication service have to be done through:")]),t._v(" "),e("p",[e("code",[t._v("CIMPortManager.getInstance()")])]),t._v(" "),e("p",[t._v("Upon creation the CIMPortManager detects all the connected CIMs and registers them in a HashMap. CIMs are identified and stored by the combination of their CIM Id and their unique number. Therefore multiple CIMs of the same CIM Id can be used on the AsTeRICS platform.")]),t._v(" "),e("p",[t._v("On some computers there exist certain serial ports which do not work correctly and behave strangely. An example of such a port is a loopback port which echoes everything written to it or ports created by Bluetooth dongles. Since the CIMPortManager iterates through all serial ports, these ports can cause problems in the auto detection of attached CIMs and even lock up the runtime. Therefore a file "),e("em",[t._v("ignore_ports.txt")]),t._v(" in the directory "),e("em",[t._v("data/cimcommunication")]),t._v(" is parsed upon start of the auto detection. This file should be filled with the name of the COM ports behaving erratically one name per line.")]),t._v(" "),e("p",[t._v("To be able to communicate with a CIM, the CIM port manager provides several methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" uniqueNumber"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("These methods return a CIMPortController (read on for details) instance of the requested CIM. The method using two parameters will return the instance to the port controller which works with the CIM of the exact CIM ID and unique number. If the CIM cannot be found, null will be returned.")]),t._v(" "),e("p",[t._v("Requesting a connection without naming a unique number will return the first port controller connected to a CIM of the correct ID found in the HashMap holding all the port controllers.")]),t._v(" "),e("p",[t._v("Sending data to the connected peripheral can be done in several ways using the following methods of CIMPortManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMUniqueIdentifier")]),t._v(" cuid"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" ctrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Basically these three methods do the same thing, however they do it at different speeds as the first two methods will look up the port controller that the packet should be sent to. Again the method taking only the CIM ID as a parameter will look up the first correct port controller. The third method which is passed the CIMPortController instance returned on getConnection() is the fastest method and should be used whenever possible.")]),t._v(" "),e("p",[t._v("Sending a CIM packet is done by providing the feature address and request code for a certain packet. The feature addresses and request codes can be found in the CIM protocol specification and the basic addresses and requests are also provided as static fields in the CIMProtocolPacket class. If data has to be attached to a CIM protocol packet a byte array holding said data has to be passed to the method, otherwise the data parameter of the method has to be set to null. The caller can also decide whether a CRC checksum should be added to the packet although this is currently unimplemented.")]),t._v(" "),e("h2",{attrs:{id:"cimeventhandler"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimeventhandler"}},[t._v("#")]),t._v(" CIMEventHandler")]),t._v(" "),e("p",[t._v("Receiving a packet is done through use of the CIMEventHandler interface. This interface should be implemented by plugins that wish to communicate with CIMs (or raw ports). The interface contains two methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("These methods are called upon correct reception of a packet or upon discovery of an error (timeout of a reply, packet transmission errors, incorrect order of incoming packets …) respectively by the port controller.")]),t._v(" "),e("p",[t._v("Upon correct reception of a CIM protocol based packet the method handlePacketReceived() is called with an instance of CIMEventPacketReceived as parameter. After conversion of the CIMEvent to this class, the packet can be extracted from the event and processed further.")]),t._v(" "),e("p",[t._v("All detected errors lead to a call of handlePacketError() with an appropriate CIMEvent implementation. The possible implemenations are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMEventErrorPacketFault: holds information to error in packet and the broken packet itself")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventErrorPacketLost: holds information on serial number of lost packet")])])]),t._v(" "),e("p",[t._v("To register the event handler with a specific CIM port controller, the CIMPortController class exposes the following methods:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("addEventHandler(CIMEventHandler hdlr)")])]),t._v(" "),e("li",[e("p",[t._v("removeEventHandler(CIMEventHandler hdlr)")])])]),t._v(" "),e("p",[t._v("A port controller can handle multiple attached event handlers and remove each one separately.")]),t._v(" "),e("h2",{attrs:{id:"cimprotocolpacket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimprotocolpacket"}},[t._v("#")]),t._v(" CIMProtocolPacket")]),t._v(" "),e("p",[t._v("This class holds all the information given in a packet transferred to or from a CIM. There are two ways the developer has to use this class. Upon sending packets the sending component has to set the feature address and the request code. The CIMProtocolPacket class provides the constants as static field to facilitate setting commands.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x00")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x01")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_EVENT_REPLY")]),t._v(" \t\t\t "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x20")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Furthermore the class contains constants for the global features that every CIM has to provide.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("FEATURE_UNIQUE_SERIAL_NUMBER")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Upon reception of an incoming packet the component associated with the CIM sending the packet is notified and a reference to the packet is passed as an instance of CIMProtocolPacket wrapped in a CIMEvent instance. The developer can access all the fields of the packet via the getter methods the class provides:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAreCimID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSerialNumber")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFeatureAddress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequestReplyCode")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCrc")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("h2",{attrs:{id:"serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[t._v("#")]),t._v(" Serial ports not adhering to CIM Protocol (Raw Ports)")]),t._v(" "),e("p",[t._v("Some peripherals use a proprietary protocol to transfer their data. If this is the case the user can open a raw port through the CIMPortManager method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will open the port with the name specified in the parameter portName and set the communication to the specified Baud rate.")]),t._v(" "),e("p",[t._v("Data can be sent to peripheral using the sendPacket() method for the returned CIMPortController. The packet will simply transfer the byte array passed in the data parameter and ignore the values giving the in the other parameter fields.")]),t._v(" "),e("p",[t._v("Received data will be forwarded to the event handler through calls to handlePacketReceived() with a CIMEventRawPacket as parameter. This class holds a public member variable b which holds the value of the received byte. The event handler has to handle the reconstruction of the proprietary packet itself.")]),t._v(" "),e("p",[e("strong",[t._v("HighSpeed Raw Ports:")])]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" highSpeed"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("A second variant opf the getRawConnection method allows specification of a “highSpeed” parameter. If highSpeed is true, the CIMPortController does not apply any connection handling or callbacks for received data to avoid performance problems in higher bandwidth streaming use cases. In this case, the CIMPortController can return the JAVA InputStream for the openend COM port connection and the plug developer can use it as desired:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("portController "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COM12")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("115200")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nin "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" portController"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputStream")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("available")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" myHandlePacket "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("read")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h2",{attrs:{id:"communication-through-a-socket-interface-remote-connection-manager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communication-through-a-socket-interface-remote-connection-manager"}},[t._v("#")]),t._v(" Communication through a socket interface: Remote Connection Manager")]),t._v(" "),e("p",[t._v("When using third party software that runs on the same platform (as for example the prominently used On Screen Keyboard Application OSKA), it becomes necessary to establish a communication between ARE and the third party application. This is managed by the RemoteConnectionManager found in the package eu.asterics.mw.services. The main interface to this manager are the classes RemoteConnectionManager and IRemoteConnectionListener.")]),t._v(" "),e("h2",{attrs:{id:"iremoteconnectionlistener"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#iremoteconnectionlistener"}},[t._v("#")]),t._v(" IRemoteConnectionListener")]),t._v(" "),e("p",[t._v("This interface is implemented by plugins that need to communicate via a socket communication. The interface contains the following methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionEstablished")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dataReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionLost")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionClosed")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("connectionEstablished() is called whenever a plugin requests a connection and the connection has been established. This can either happen if a connection has already been established before or if the new connection has finished its setup and connection process.")]),t._v(" "),e("p",[t._v("dataReceived() is called whenever new data arrives from the other end of the connection. Data is transferred in a byte array and has to be processed by the event listener.")]),t._v(" "),e("p",[t._v("connectionLost() is called when the connection management cannot read from or write to the socket.")]),t._v(" "),e("p",[t._v("connectionClosed() is called after the connection has been closed.")]),t._v(" "),e("h2",{attrs:{id:"remoteconnectionmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#remoteconnectionmanager"}},[t._v("#")]),t._v(" RemoteConnectionManager")]),t._v(" "),e("p",[t._v("The RemoteConnectionManager is implemented as a singleton and can be accessed via a public static member of the class. Thus access is always achieved through:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RemoteConnectionManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance\n")])])]),e("p",[t._v("A connection is opened by calling the RemoteConnectionManager’s method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" requestConnection "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRemoteConnectionListener")]),t._v(" l"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This call will try to access a connection on the specified port. Although the port is actually an integer it is passed as a String here. The method will return true if a connection on this port has already been established and attach the remote connection listener passed in the second argument to the connection. If there is no active connection on the specified port, the requestConnection method will initiate the setup of the connection and return false. With this return value the user can decide whether he needs to perform setup actions or will be able to do this in the connectionEstablished() callback.")]),t._v(" "),e("p",[t._v("The socket connection handling is implemented using two threads, one for sending, one for receiving data. The receiver thread will continuously read data from the socket and forward it to the registered listener calling the dataReceived() method. Since incoming data is handled in another thread than the plugin which will use the socket connection, access to the methods handling this data or the way of passing data should be done in a synchronised code block.")]),t._v(" "),e("p",[t._v("Sending data is done calling the method sendData of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is called using a String holding the port number of the connection socket and an array of bytes to be sent. The call to this method will place the data in an outgoing queue and return true if this was successful. Thus it is not guaranteed that the data has already been sent when the method returns. The sender thread will grab data from the outgoing queue and transfer it via the socket or call the connectionLost() method of the registered listener if there are problems while sending.")]),t._v(" "),e("p",[t._v("Once the connection to a socket is not needed anymore, the user has to close the connection, calling the following method of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("closeConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will close the socket connection, end all threads and return.")]),t._v(" "),e("h2",{attrs:{id:"local-storage-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#local-storage-service"}},[t._v("#")]),t._v(" Local Storage Service")]),t._v(" "),e("p",[t._v("If a model needs to save its own calibration data, training data or other private data that can be different in every model and every instance, the local storage service provides a method to save different data to the same file name on a per plugin instance per model basis.")]),t._v(" "),e("p",[t._v("The service uses a directory tree structure that is placed in the directory the OSGi is run from. Data is saved in a directory called “storage”. In this directory, directories for every model name of a model that uses at least one plugin that accesses local storage can be found. In the third directory layer, directories with the plugin instance name of every plugin that accesses local storage can be found. Thus if a model named “timertest” uses a plugin instance named “timer1” that saves local data this data can be found at the path location “storage/timertest/timer1”.")]),t._v(" "),e("p",[t._v("The service practically consists of only one method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLocalStorageFile")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" fileName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Calling this method located in the AREServices class will return a File object pointing to the requested file name or null if the file could not be opened or the model name could not be retrieved. After opening the file the standard JAVA ways to manipulate files apply.")]),t._v(" "),e("h2",{attrs:{id:"keyboard-mouse-native-hook-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-mouse-native-hook-services"}},[t._v("#")]),t._v(" Keyboard/Mouse Native Hook Services")]),t._v(" "),e("p",[t._v("The AsTeRICS service jnativehook (if enabled) provides access to the library "),e("a",{attrs:{href:"https://github.com/kwhat/jnativehook",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/kwhat/jnativehook"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Additionally, the service contains the singleton NativeHookServices that initializes the library to be usable in plugins. A plugin that wants to be a keaboard/mouse listener only has to add the listener to the GlobalScreen instance of the library.")]),t._v(" "),e("h2",{attrs:{id:"computer-vision-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#computer-vision-services"}},[t._v("#")]),t._v(" Computer Vision Services")]),t._v(" "),e("p",[t._v("The AsTeRICS services javacv and computervision (if enabled) provide access to the library "),e("a",{attrs:{href:"https://github.com/bytedeco/javacv",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/bytedeco/javacv"),e("OutboundLink")],1),t._v(", which again provides access to numerous libs in the field of computer vision (e.g. OpenCV), frame grabbing and frame rendering. Additionally, some helper classes are provided for face detection.")]),t._v(" "),e("h2",{attrs:{id:"data-conversion-utilities"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-conversion-utilities"}},[t._v("#")]),t._v(" Data Conversion Utilities")]),t._v(" "),e("p",[t._v("The middleware provides the class “ConversionUtils” that provide static helper methods to convert model data types to byte arrays and vice versa. The conversion is needed to convert incoming data of input ports or outgoing data to output ports. There are methods for each type of conversion. If two connected ports (output to input) have different data types the data is automatically converted to the data type of the input port.")]),t._v(" "),e("p",[t._v("Check the class ConversionUtils for a full list of supported methods: "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"fetching-resource-uris-with-resourceregistry-class"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fetching-resource-uris-with-resourceregistry-class"}},[t._v("#")]),t._v(" Fetching resource URIs with ResourceRegistry class")]),t._v(" "),e("p",[t._v("If a plugin needs resources like data files (images, keyboard files, haarcascade definitions,…), the class "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("ResourceRegistry"),e("OutboundLink")],1),t._v(" must be used to fetch the resource URI.")]),t._v(" "),e("p",[t._v("This can be done by using the method:")]),t._v(" "),e("p",[e("code",[t._v("public URI getResource(String resourcePath, RES_TYPE type) throws URISyntaxException")])]),t._v(" "),e("p",[t._v("Returns the URI according to the given resourcePath string and the given resource type RES_TYPE.")]),t._v(" "),e("p",[t._v("Please refer to the Javadoc of the class and to the "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Fetching-resources-with-class-ResourceRegistry",target:"_blank",rel:"noopener noreferrer"}},[t._v("wiki page"),e("OutboundLink")],1),t._v(" for further examples.")]),t._v(" "),e("h2",{attrs:{id:"error-reporting-astericserrorhandling"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-astericserrorhandling"}},[t._v("#")]),t._v(" Error Reporting (AstericsErrorHandling)")]),t._v(" "),e("p",[t._v("The "),e("code",[t._v("AstericsErrorHandling")]),t._v(" provides a unified logging and error reporting mechanism. It contains methods for reporting an error of a component or even the ARE.")]),t._v(" "),e("h3",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),e("p",[t._v("The Logging support provides a uniform way of error reporting in the runtime environment so we have utilized the Java logging libraries and the various severity levels supported. The AsTeRICS error handling mechanism is used extensively from the runtime core classes but also utilized by the AsTeRICS components via the AstericsErrorHandling interface.")]),t._v(" "),e("p",[t._v("Each component is allowed to report an error message, a debug information or a simple information to be displayed on the screen. The ARE maintains four separate log files and updates them whenever a new error occurs. In particular there are different loggers for reporting severe errors, warnings, fine errors and one logger that contains them all.")]),t._v(" "),e("p",[t._v("ARE also maintains a status object for the current status of the runtime environment. Whenever a fatal error occurs (either internally or caused by one of the deployed components) the status changes to fatal error. Other possible statuses are unknown, OK, deployed, running and paused.")]),t._v(" "),e("p",[t._v("The ACS can request the current status of the runtime environment and update its own state accordingly. For example the ACS user can be informed about the current ARE status while the ACS will terminate a connection (or refuse to establish a new one) with a non-working ARE.")]),t._v(" "),e("p",[t._v("Using a Logger is the recommended way to report notifications or error descriptions to the user. In the ARE framework, using the Java logging service is recommended. The Java logger can be configured using the file “logging.properties” (see section 2.3.3.1) and used as follows:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("…"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsErrorHandling")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h3",{attrs:{id:"error-reporting-of-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-of-components"}},[t._v("#")]),t._v(" Error Reporting of components")]),t._v(" "),e("p",[t._v("If a component wants to notify an error it should use the following method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_warning.log” file. Additionally the status of the component is set to error with the given error message and an error dialog is shown in the ARE gui, if enabled.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportInfo")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" info"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_fine.log” file.")]),t._v(" "),e("h3",{attrs:{id:"status-checking"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#status-checking"}},[t._v("#")]),t._v(" Status checking")]),t._v(" "),e("p",[t._v("The status checking mechanism is responsible for recording the current status of the ARE or the error state of a component. The status is recorded by creating and storing objects called "),e("em",[t._v("statusObjects")]),t._v(". A statusObject stores the status of its creator as a string, its creator (the ARE or the specific component) and the error message.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setStatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" status"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The status of the ARE can be one of the following strings:")]),t._v(" "),e("p",[t._v("UNKNOWN: initial state for the ARE")]),t._v(" "),e("p",[t._v("OK: ARE is running and ready to deploy a model")]),t._v(" "),e("p",[t._v("DEPLOYED: A model has been deployed and the ARE is now ready to run the model")]),t._v(" "),e("p",[t._v("RUNNING: A model is running on the ARE")]),t._v(" "),e("p",[t._v("PAUSED: A model has been deployed and the ARE is in paused mode")]),t._v(" "),e("p",[t._v("ERROR: An error occurred")]),t._v(" "),e("p",[t._v("FATAL_ERROR: A fatal error occurred, model or deployment aborted")]),t._v(" "),e("p",[t._v("The status of a component can only be the ERROR state because this is the only state of a component that we are interested in recording for later use. An ERROR statusObject is automatically created when a component calls the reportError method as described above.")]),t._v(" "),e("p",[t._v("For retrieving the statusObjects, the following method is used:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("queryStatus")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" fullList"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is particularly useful for the ACS to determine the current status of the runtime environment and of the deployed components. If the ARE or one of the components are in a problematic state it can be reflected in the ACS.")]),t._v(" "),e("p",[t._v("The boolean "),e("em",[t._v("fullList")]),t._v(" argument specifies whether the error list to be returned will include all statusObjects generated since the ARE startup or just those that have not been requested by the ACS before.")]),t._v(" "),e("h2",{attrs:{id:"the-are-thread-pool"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-thread-pool"}},[t._v("#")]),t._v(" The ARE Thread Pool")]),t._v(" "),e("p",[t._v("In order to avoid resource greedy threads and to achieve best thread handling, ARE uses one of the Thread Pool implementations provided by Java since JRE 1.5. In particular, we have utilized the java.util.concurrent.Executors library for creating a CachedThreadPool.")]),t._v(" "),e("p",[t._v("A cached thread pool will create threads as needed but will reuse previously instantiated threads when they are available and inactive. A cached thread pool is particularly useful for many short-lived asynchronous tasks and improves the performance of the runtime environment.")]),t._v(" "),e("p",[t._v("Developers are expected to use the ARE thread pool for executing their tasks that require a new Thread. You will need to import the middleware services package in order to get access to the "),e("strong",[t._v("AstericsThreadPool")]),t._v(" class.")]),t._v(" "),e("h2",{attrs:{id:"the-are-gui-support"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-gui-support"}},[t._v("#")]),t._v(" The ARE GUI support")]),t._v(" "),e("p",[t._v("The ARE provides a panel area (“ARE Desktop”) where plugins can display their graphical elements using the ARE GUI support classes. The ACS provides a dedicated canvas editor that allows end users positioning and resizing graphical elements of the plugins. Based on this information, the ARE displays plugins on the local device, maintaining the correct screen position and aspect ratio of graphical elements with respect to the screen resolution of the deployment device. (For more information about the usage of the ACS GUI editor and the ARE GUI control panel refer to the User Manual.)")]),t._v(" "),e("p",[e("img",{attrs:{src:a(295),alt:""}})]),t._v(" "),e("p",[e("strong",[t._v("GUI composition using the ACS GUI designer (right), resulting ARE GUI (left)")])]),t._v(" "),e("p",[t._v("In order to be recognized as GUI-plugin by ACS and ARE, the bundle descriptor of the plugin has to be extended with a dedicated "),e("code",[t._v("")]),t._v(" entry, which specifies the default size in a virtual coordinate system of 10000/10000 pixels. In the deployment model, the ACS will create position and size information according to the area defined in the ACS GUI designer.")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("gui")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("width")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("5000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("height")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("3000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[e("strong",[t._v("The gui element addition to the bundle descriptor")])]),t._v(" "),e("p",[t._v("The AsTeRICS middleware provides some services to the plugin developers in order to allow them displaying their GUI element onto the ARE Desktop. The middleware services encapsulate the complexity of dealing with positioning and allow displaying all GUI elements onto the same container: the ARE Desktop.")]),t._v(" "),e("p",[t._v("All GUI services are defined in eu.asterics.mw.services.AREServices so developers need to import this class in order to get access to the following methods:")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void displayPanel (JPanel panel, IRuntimeComponentInstance componentInstance, boolean display)")])])]),t._v(" "),e("p",[t._v("This method is used for displaying (or hiding) a plugin’s panel at/from the ARE desktop. Developers need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the panel they want to be displayed (or removed)")])]),t._v(" "),e("li",[e("p",[t._v("the plugin object, in order to help the middleware finding the desired position and dimensions from the deployment model")])]),t._v(" "),e("li",[e("p",[t._v("a boolean argument specifying if they wish to hide or show the given panel.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("Dimension getAvailableSpace(IRuntimeComponentInstance componentInstance)")])])])]),t._v(" "),e("p",[t._v("The space that each plugin will occupy on the ARE desktop is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the available space for their graphical elements by calling the getAvailableSpace method which will return the space occupied for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("Point getComponentPosition (IRuntimeComponentInstance componentInstance)")])])]),t._v(" "),e("p",[t._v("The positioning of plugin’s GUI elements is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the position of their graphical elements by calling the getComponentPosition which will return the position on screen for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void adjustFonts(JPanel panel, int maxFontSize, int minFontSize, int offset)")])])]),t._v(" "),e("p",[t._v("This service can be used by plugin developers interested in auto-adjusting the fonts of their GUI components depending on the space occupied for their plugins on the ARE desktop. They need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a panel to which all the internal fonts will be auto-adjusted")])]),t._v(" "),e("li",[e("p",[t._v("the maximum font size (in case there is more space available than needed)")])]),t._v(" "),e("li",[e("p",[t._v("the minimum font size, in case there is too little space which causes the text to become non-readable. Finally, the offset argument is used in case we want to occupy a percentage of the available space.")])])]),t._v(" "),e("p",[t._v("A good approach to GUI plugin development is to analyse existing plugins which provide GUI elements, e.g. the BarDisplay or Oscilloscope actuators, or the Slider or Cellboard sensor components.")]),t._v(" "),e("p",[t._v("If the plugin uses "),e("strong",[t._v("Swing to implement a GUI-widget")]),t._v(" (e.g. Slider,…), please check the following guidelines as well 4.2.8")]),t._v(" "),e("h2",{attrs:{id:"are-core-events-notification-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-core-events-notification-services"}},[t._v("#")]),t._v(" ARE core events notification services")]),t._v(" "),e("p",[t._v("The ARE core events notification service allows plugins to register/unregister to the ARE middleware in order to receive notifications of ARE core events.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void registerAREEventListener(IAREEventListener clazz)")])])]),t._v(" "),e("p",[t._v("It is sometimes necessary that plugins can be notified of various ARE events so they can react as needed. This method can be called by component instances that wish to be notified of such ARE events. Currently, the core events supported are:")]),t._v(" "),e("ul",[e("li",[e("p",[e("em",[t._v("preDeployModel:")]),t._v(" registered ARE event listeners will be notified just before the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postDeployModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStartModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStartModel:")]),t._v(" registered ARE event listeners will be notified immediately after the currently deployed model has been started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStopModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStopModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("prePauseModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postPauseModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preResumeModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postResumeModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified just before the bundles are is installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified immediately after the bundles have been installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("void unregisterAREEventListener(IAREEventListener clazz)")])])])]),t._v(" "),e("p",[t._v("Plugins already registered for receiving ARE core events can un-register using this method.")]),t._v(" "),e("h2",{attrs:{id:"dynamic-properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-properties"}},[t._v("#")]),t._v(" Dynamic Properties")]),t._v(" "),e("p",[t._v("In some applications, the ACS should be able to provide several options for property values which are not known in advance but depend on the current state of the ARE (see AsTeRUCS User Manual, section “Dynamic Properties”)… A typical example is the selection of a file which is available in the ARE file system (e.g. a .wav-file for the wave player plugin). This feature is particularly useful for plugins that are hardware dependent (selecting e.g. a soundcard or a midi player), or depend on the file system.")]),t._v(" "),e("p",[t._v("If a plugin is implementing a dynamic property, the values will be requested from the ARE, as soon as the ACS is synchronized with the ARE, via the ASAPI function:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),e("span",{pre:!0,attrs:{class:"token generics"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n")])])]),e("p",[t._v("The ARE middleware will forward the request for valid property values to the component instance with the given ID. The "),e("code",[t._v("List getRuntimePropertyList(String key)")]),t._v(" method has to be implemented in the "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" class which every AsTeRICS component extends.\nThe method implementation creates the list of valid properties and returns it to the middleware and the latter forwards the string list to the ACS via ASAPI. The ACS will dynamically update the property list in the properties window.")]),t._v(" "),e("p",[t._v("For an example of the dynamic property implementation, see the WaveFilePlayer plugin.")]),t._v(" "),e("h2",{attrs:{id:"data-synchronization"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-synchronization"}},[t._v("#")]),t._v(" Data Synchronization")]),t._v(" "),e("p",[t._v("Some plugins need data of multiple input ports to be able to start processing. Without data synchronization it is possible that one input port of a plugin receives multiple values before another port gets one value, although both signal channels deliver values at the same sampling rate.")]),t._v(" "),e("p",[t._v("The synchronization service provides a buffering mechanism at the middleware level that can be utilized by plugin developers in order to make sure that incoming data of selected input ports arrives synchronized.")]),t._v(" "),e("p",[t._v("To use the synchronization service in the plugin code, plugin developers are expected to extend the "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" instead of implementing the "),e("em",[t._v("IRuntimeInputPort.")]),t._v(" Basically, "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" provides a default implementation for the necessary buffering methods, as shown in the table below.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("abstract")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DefaultRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("receiveData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" startBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" stopBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" isBuffered "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("The designer can define that a plugin’s input port should be synchronized with some other input ports via the ACS. This will cause an argument change of the inputPort element on the deployment model file (e.g.,"),e("code",[t._v('')]),t._v(").")]),t._v(" "),e("p",[t._v("As soon as a model is deployed on the ARE, the middleware collects per component every port noted as synchronized port. When the model is successfully deployed and started, the ARE will buffer data which enters synchronized input ports until data on all synchronized ports has arrived. At that point, the ARE will call a new "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" callback method.")]),t._v(" "),e("p",[t._v("Developers that wish to support data synchronization need to implement the following method at their component instances.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("syncedValuesReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Where dataRow is a HashMap between Input Port ID and byte[]. For synchronized input ports, instead of implementing the regular "),e("em",[t._v("void receiveData(byte[] data)")]),t._v(" method which delivers incoming data of a single port, developers need to implement the "),e("em",[t._v("syncedValuesReceived")]),t._v(" method which will be called from the ARE with synchronized data from all the input ports that have been selected.")]),t._v(" "),e("h2",{attrs:{id:"interfacing-native-c-c-code-via-jni"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#interfacing-native-c-c-code-via-jni"}},[t._v("#")]),t._v(" Interfacing Native C/C++ Code via JNI")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",[e("code",[t._v("## Specifying native libraries in the Manifest\n")])])]),e("p",[t._v("The Manifest file of a bundle which includes native libraries has to specify these .dlls as shown in the following example:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-sensors.mycomponent\nBundle-SymbolicName: org.asterics.mycomponent\nBundle-Version: 0.1.0\nBundle-NativeCode: lib/native/mylib1.dll;\n lib/native/mylib2.dll;\n lib/native/mylib3.dll;\n osname=win32;processor=x86;\n osname=win;processor=x86-64;\n osname=win8;processor=x86;\n osname=win8;processor=x86-64;\n osname=windows 8;processor=x86;\n osname=windows 8;processor=x86-64;\n osname=windows8;processor=x86;\n osname=windows8;processor=x86-64;\n osname=Windows 8.1;processor=x86;\n osname=Windows 8.1;processor=x86-64\nDynamicImport-Package: *\n")])])]),e("p",[t._v("Components which interface native code via JNI and their respective manifest files can be found in the SVN, e.g. the “webcamera” component or the signal processing plugins by Starlab.")]),t._v(" "),e("p",[t._v("Note that the .jar containing the .dlls can be built manually using the command:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("jar "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-cvfm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("/mybundle.jar META-INF/MANIFEST.MF "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])]),e("h2",{attrs:{id:"java-implementation-jni-bridge"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#java-implementation-jni-bridge"}},[t._v("#")]),t._v(" Java-Implementation: JNI-Bridge")]),t._v(" "),e("p",[t._v("The recommended way to interface Java code of an ARE component with native code in a .dll is a bridge class which encapsulates the JNI functions and callbacks and maps the functions of the ARE component’s lifecycle-, port- and property-management to the corresponding functions in the native code. Here is a simple example which comprises one component property and receives data callbacks from a thread implemented in C. The received values are transferred to the component’s output port:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("jni")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mycomponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Statically load the native library */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib1"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib1.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib2"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib2.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib3"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib3.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAnonymousLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("my_outport "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Activates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("activate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Deactivates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("deactivate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Gets the value of the named property.\n *\n * @param key the name of the property to be accessed\n * @return the value of the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Sets the named property to the defined value.\n *\n * @param key the name of the property to be accessed\n * @param value the value to be assigned to the named property\n * @return the value previously assigned to the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code on demand to signify \n * an internal error. The first argument corresponds to an error code \n * and the second argument corresponds to a textual description \n * of the error.\n * @param errorCode an error code\n * @param message a textual description of the error\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("errorReport_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" errorCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("severe")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorCode "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('": "')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code to send data\n * to the component’s output port.\n *\n * @param data1 (range is [0, Short.MAX_VALUE])\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("newData_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"c-implementation-callbacks-and-jni-code"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#c-implementation-callbacks-and-jni-code"}},[t._v("#")]),t._v(" C-Implementation: Callbacks and JNI code")]),t._v(" "),e("p",[t._v("The native C-code needs to be compiled into a .dll and include the JNI header files and libraries. An example for the Microsoft Visual Studio compiler looks as follows:")]),t._v(" "),e("p",[t._v("The following C-example shows how to implement a JNI-callback from a C-thread and an ARE-compliant exchange of a component property:")]),t._v(" "),e("div",{staticClass:"language-c extra-class"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" JavaVM "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" jobject g_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myProperty"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"20"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_activate")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\terror_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetJavaVM")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tjclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newData_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// explicitly ask for a global reference")]),t._v("\n\tg_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_init")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_deactivate")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_exit")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tenv"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("DeleteGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_getProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\t\t\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_setProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n\t strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown */")]),t._v("\n\t strValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\tpollingIntervalValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prepare JNI callback")]),t._v("\n JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n g_jvm"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("AttachCurrentThread")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newCoordinates_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// perform JNI callback")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("CallVoidMethod")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("my_new_data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("This native C-code needs to be compiled into a .dll, the JNI header files and libraries have to be specified to the compiler and linker respectively. An example for the Microsoft Visual Studio build tools looks as follows:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('cl -c -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include" -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include\\win32" -I ".\\3rdparylib" my_c_file.cpp /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_WARNINGS" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /Gm- /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /errorReport:queue \nlink my_c_file.obj /DLL /OUT:".\\my_c_file.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"libmsvc" /LIBPATH:"3rdparylib" "odbc32.lib" "odbccp32.lib" "comctl32.lib" "winmm.lib" "opengl32.lib" "ole32.lib" "strmiids.lib" "uuid.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "oleaut32.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"atlthunk" /NODEFAULTLIB:"LIBCMT" /MANIFESTUAC:"level=\'asInvoker\' uiAccess=\'false\'" /DEBUG /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:QUEUE\n')])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("The compiler and linker switches may differ depending on the nature of your dependency libraries and setup.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-packaging-environment-ape"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-packaging-environment-ape"}},[t._v("#")]),t._v(" AsTeRICS Packaging Environment (APE)")]),t._v(" "),e("p",[t._v("The APE let’s you select a set of AsTeRICS model files and create a downstripped (minimum size) version of the ARE including plugins, configuration files and data files to execute the models. Optionally, the APE allows the creation of native installers for Windows, Linux incl. Raspberry Pi and Mac OSX using "),e("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaFX packaging technology"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("See "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/AsTeRICS-Packaging-Environment-(APE)",target:"_blank",rel:"noopener noreferrer"}},[t._v("APE documentation"),e("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/190.43fd2af8.js b/assets/js/190.1305662c.js similarity index 90% rename from assets/js/190.43fd2af8.js rename to assets/js/190.1305662c.js index 9ccbbd25c2..6c14f4d7a3 100644 --- a/assets/js/190.43fd2af8.js +++ b/assets/js/190.1305662c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[190],{1150:function(t,e,i){"use strict";i.r(e);var o=i(2),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"decimation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#decimation"}},[t._v("#")]),t._v(" Decimation")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The decimation operation performed by this component consists in an anti-aliasing low band pass filter plus a down-sampling. The component outputs a computed sample after receiving a certain number of input samples according to the down-sampling-ratio property value. So the resultant signal is like the original signal, but sampled to a lower ratio determined by the mentioned property.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(713),alt:"Screenshot: Decimation plugin",title:"Screenshot: Decimation plugin"}})]),t._v(" "),e("p",[t._v("Decimation plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the signal to be decimated.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port of the decimated signal.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("DownSamplingRatio [integer]:")]),t._v(" Defines the ratio between the number of samples in the input and output ports.")])])])}),[],!1,null,null,null);e.default=n.exports},713:function(t,e,i){t.exports=i.p+"assets/img/decimation.9b7875bb.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[190],{1146:function(t,e,i){"use strict";i.r(e);var o=i(2),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"decimation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#decimation"}},[t._v("#")]),t._v(" Decimation")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The decimation operation performed by this component consists in an anti-aliasing low band pass filter plus a down-sampling. The component outputs a computed sample after receiving a certain number of input samples according to the down-sampling-ratio property value. So the resultant signal is like the original signal, but sampled to a lower ratio determined by the mentioned property.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(708),alt:"Screenshot: Decimation plugin",title:"Screenshot: Decimation plugin"}})]),t._v(" "),e("p",[t._v("Decimation plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the signal to be decimated.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port of the decimated signal.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("DownSamplingRatio [integer]:")]),t._v(" Defines the ratio between the number of samples in the input and output ports.")])])])}),[],!1,null,null,null);e.default=n.exports},708:function(t,e,i){t.exports=i.p+"assets/img/decimation.9b7875bb.jpg"}}]); \ No newline at end of file diff --git a/assets/js/191.3ee5c506.js b/assets/js/191.645545b1.js similarity index 92% rename from assets/js/191.3ee5c506.js rename to assets/js/191.645545b1.js index b90a718841..0c97cc48b9 100644 --- a/assets/js/191.3ee5c506.js +++ b/assets/js/191.645545b1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[191],{1144:function(t,e,r){"use strict";r.r(e);var s=r(2),a=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"delay"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#delay"}},[t._v("#")]),t._v(" Delay")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This plugin passes received double values after a defined delay.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(707),alt:"Screenshot: Delay plugin",title:"Screenshot: Delay plugin"}})]),t._v(" "),e("p",[t._v("Delay plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in (double):")]),t._v(" Input port for the incoming signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out (double):")]),t._v(" Output port for the delayed signal.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" Delay between input and output signal (in milliseconds).")])])])}),[],!1,null,null,null);e.default=a.exports},707:function(t,e,r){t.exports=r.p+"assets/img/delay.04385069.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[191],{1144:function(t,e,r){"use strict";r.r(e);var s=r(2),a=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"delay"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#delay"}},[t._v("#")]),t._v(" Delay")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This plugin passes received double values after a defined delay.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(706),alt:"Screenshot: Delay plugin",title:"Screenshot: Delay plugin"}})]),t._v(" "),e("p",[t._v("Delay plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in (double):")]),t._v(" Input port for the incoming signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out (double):")]),t._v(" Output port for the delayed signal.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" Delay between input and output signal (in milliseconds).")])])])}),[],!1,null,null,null);e.default=a.exports},706:function(t,e,r){t.exports=r.p+"assets/img/delay.04385069.jpg"}}]); \ No newline at end of file diff --git a/assets/js/192.3ab5f6e6.js b/assets/js/192.1cff1d91.js similarity index 94% rename from assets/js/192.3ab5f6e6.js rename to assets/js/192.1cff1d91.js index f20af817a9..7a9bde917d 100644 --- a/assets/js/192.3ab5f6e6.js +++ b/assets/js/192.1cff1d91.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[192],{1147:function(t,e,i){"use strict";i.r(e);var r=i(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"derivative"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#derivative"}},[t._v("#")]),t._v(" Derivative")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component computes the first derivative operation of the input signal by using an approximation by a numerical differentiation method using five points. Due to the fact that the component takes into consideration the previous four samples plus the current one, it will output the derivative value corresponding to the centre sample of the five ones. It means two samples earlier from the one that is received in the input port.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(710),alt:"Screenshot: Derivative plugin",title:"Screenshot: Derivative plugin"}})]),t._v(" "),e("p",[t._v("Derivative plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the signal to be derived.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port of the first derivative of the input signal. The output values present a delay of two samples because of the reason given in the general description.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("SampleFrequency [integer]:")]),t._v(" Defines the frequency which the input signal is sampled, so the distance between two consecutive samples, which is used by the component, is defined.")])])])}),[],!1,null,null,null);e.default=s.exports},710:function(t,e,i){t.exports=i.p+"assets/img/derivative.b98138ff.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[192],{1147:function(t,e,i){"use strict";i.r(e);var r=i(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"derivative"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#derivative"}},[t._v("#")]),t._v(" Derivative")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component computes the first derivative operation of the input signal by using an approximation by a numerical differentiation method using five points. Due to the fact that the component takes into consideration the previous four samples plus the current one, it will output the derivative value corresponding to the centre sample of the five ones. It means two samples earlier from the one that is received in the input port.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(709),alt:"Screenshot: Derivative plugin",title:"Screenshot: Derivative plugin"}})]),t._v(" "),e("p",[t._v("Derivative plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the signal to be derived.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port of the first derivative of the input signal. The output values present a delay of two samples because of the reason given in the general description.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("SampleFrequency [integer]:")]),t._v(" Defines the frequency which the input signal is sampled, so the distance between two consecutive samples, which is used by the component, is defined.")])])])}),[],!1,null,null,null);e.default=s.exports},709:function(t,e,i){t.exports=i.p+"assets/img/derivative.b98138ff.jpg"}}]); \ No newline at end of file diff --git a/assets/js/193.5759071f.js b/assets/js/193.99d4b013.js similarity index 96% rename from assets/js/193.5759071f.js rename to assets/js/193.99d4b013.js index 397d08c49f..e66ce37ad7 100644 --- a/assets/js/193.5759071f.js +++ b/assets/js/193.99d4b013.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[193],{1148:function(t,e,r){"use strict";r.r(e);var i=r(2),n=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"differentiate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#differentiate"}},[t._v("#")]),t._v(" Differentiate")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The differentiate component outputs the difference of the previous to the current input value on the output port. This functionality can be considered as a simplified implementation of the derivative component.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(711),alt:"Screenshot: Differentiate plugin",title:"Screenshot: Differentiate plugin"}})]),t._v(" "),e("p",[t._v("Differentiate plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" Input port for signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" Output of difference value.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("resetValue [double]:")]),t._v(" The value that is used in the first difference calculation after start.")])])])}),[],!1,null,null,null);e.default=n.exports},711:function(t,e,r){t.exports=r.p+"assets/img/differentiate.7fe386c5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[193],{1149:function(t,e,r){"use strict";r.r(e);var i=r(2),n=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"differentiate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#differentiate"}},[t._v("#")]),t._v(" Differentiate")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The differentiate component outputs the difference of the previous to the current input value on the output port. This functionality can be considered as a simplified implementation of the derivative component.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(711),alt:"Screenshot: Differentiate plugin",title:"Screenshot: Differentiate plugin"}})]),t._v(" "),e("p",[t._v("Differentiate plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" Input port for signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" Output of difference value.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("resetValue [double]:")]),t._v(" The value that is used in the first difference calculation after start.")])])])}),[],!1,null,null,null);e.default=n.exports},711:function(t,e,r){t.exports=r.p+"assets/img/differentiate.7fe386c5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/194.0e3e6669.js b/assets/js/194.e6b2db6c.js similarity index 91% rename from assets/js/194.0e3e6669.js rename to assets/js/194.e6b2db6c.js index 38e7d06863..246c1f5ab0 100644 --- a/assets/js/194.0e3e6669.js +++ b/assets/js/194.e6b2db6c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[194],{1145:function(t,e,i){"use strict";i.r(e);var s=i(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"dissimilarity"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dissimilarity"}},[t._v("#")]),t._v(" Dissimilarity")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This component computes the Euclidean distance between two input vectors. The component stores the input values from both input ports until DataLen values have been received, then the computation is performed and sent to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(708),alt:"Screenshot: Dissimilarity plugin",title:"Screenshot: Dissimilarity plugin"}})]),t._v(" "),e("p",[t._v("Dissimilarity plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1 [double]:")]),t._v(" Input port for the first signal.")]),t._v(" "),e("li",[e("strong",[t._v("input2 [double]:")]),t._v(" Input port for the second signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port for the dissimilarity computation. A value is provided every time DataLen samples arrive to the input ports.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("DataLen [integer]:")]),t._v(" Defines the length of the signals over which the dissimilarity is computed.")])])])}),[],!1,null,null,null);e.default=r.exports},708:function(t,e,i){t.exports=i.p+"assets/img/dissimilarity.a5839466.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[194],{1148:function(t,e,i){"use strict";i.r(e);var s=i(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"dissimilarity"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dissimilarity"}},[t._v("#")]),t._v(" Dissimilarity")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This component computes the Euclidean distance between two input vectors. The component stores the input values from both input ports until DataLen values have been received, then the computation is performed and sent to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(710),alt:"Screenshot: Dissimilarity plugin",title:"Screenshot: Dissimilarity plugin"}})]),t._v(" "),e("p",[t._v("Dissimilarity plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1 [double]:")]),t._v(" Input port for the first signal.")]),t._v(" "),e("li",[e("strong",[t._v("input2 [double]:")]),t._v(" Input port for the second signal.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port for the dissimilarity computation. A value is provided every time DataLen samples arrive to the input ports.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("DataLen [integer]:")]),t._v(" Defines the length of the signals over which the dissimilarity is computed.")])])])}),[],!1,null,null,null);e.default=r.exports},710:function(t,e,i){t.exports=i.p+"assets/img/dissimilarity.a5839466.jpg"}}]); \ No newline at end of file diff --git a/assets/js/195.ff5e6a58.js b/assets/js/195.1dda4f5a.js similarity index 87% rename from assets/js/195.ff5e6a58.js rename to assets/js/195.1dda4f5a.js index 8a15de96b4..ab3233f629 100644 --- a/assets/js/195.ff5e6a58.js +++ b/assets/js/195.1dda4f5a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[195],{1146:function(t,o,r){"use strict";r.r(o);var e=r(2),s=Object(e.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"double-to-string"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#double-to-string"}},[t._v("#")]),t._v(" Double To String")]),t._v(" "),o("p",[t._v("Component Type: Processor (Subcategory: Data Converters)")]),t._v(" "),o("p",[t._v("This component converts the double values at the input port to string values at the output.")]),t._v(" "),o("p",[o("img",{attrs:{src:r(709),alt:"Screenshot: DoubleToString plugin",title:"Screenshot: DoubleToString plugin"}})]),t._v(" "),o("p",[t._v("DoubleToString plugin")]),t._v(" "),o("h2",{attrs:{id:"input-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("input [double]:")]),t._v(" Input port for the double values to be converted.")])]),t._v(" "),o("h2",{attrs:{id:"output-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("output [string]:")]),t._v(" Output port for the converted string values.")])])])}),[],!1,null,null,null);o.default=s.exports},709:function(t,o,r){t.exports=r.p+"assets/img/doubletostring.1cadca65.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[195],{1151:function(t,o,r){"use strict";r.r(o);var e=r(2),s=Object(e.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"double-to-string"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#double-to-string"}},[t._v("#")]),t._v(" Double To String")]),t._v(" "),o("p",[t._v("Component Type: Processor (Subcategory: Data Converters)")]),t._v(" "),o("p",[t._v("This component converts the double values at the input port to string values at the output.")]),t._v(" "),o("p",[o("img",{attrs:{src:r(713),alt:"Screenshot: DoubleToString plugin",title:"Screenshot: DoubleToString plugin"}})]),t._v(" "),o("p",[t._v("DoubleToString plugin")]),t._v(" "),o("h2",{attrs:{id:"input-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("input [double]:")]),t._v(" Input port for the double values to be converted.")])]),t._v(" "),o("h2",{attrs:{id:"output-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("output [string]:")]),t._v(" Output port for the converted string values.")])])])}),[],!1,null,null,null);o.default=s.exports},713:function(t,o,r){t.exports=r.p+"assets/img/doubletostring.1cadca65.jpg"}}]); \ No newline at end of file diff --git a/assets/js/196.69e8f6d9.js b/assets/js/196.358a3231.js similarity index 98% rename from assets/js/196.69e8f6d9.js rename to assets/js/196.358a3231.js index 6358acbd03..1118ef5c09 100644 --- a/assets/js/196.69e8f6d9.js +++ b/assets/js/196.358a3231.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[196],{1149:function(t,e,r){"use strict";r.r(e);var i=r(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ecmascriptinterpreter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ecmascriptinterpreter"}},[t._v("#")]),t._v(" ECMAScriptInterpreter")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Scripting)")]),t._v(" "),e("p",[t._v("This component is a general purpose processor that can relays the input and incoming events to a script compatible to the ECMA script specification (e.g. JavaScript). The script is specified by the property scriptname. If the property is left empty, the component will load the file “script.js” from local storage. If this file does not exist, the component will generate the file in local storage and fill it with a default “pass-through” script.")]),t._v(" "),e("p",[t._v("There are certain constraints for the script:")]),t._v(" "),e("ul",[e("li",[t._v("the script has to contain an object named scriptclass.")]),t._v(" "),e("li",[t._v("the object has to implement a method dataInput(input_index, input_data)")]),t._v(" "),e("li",[t._v("the object has to implement a method eventInput(event_index)")])]),t._v(" "),e("p",[t._v("The script is provided with the following external variables:")]),t._v(" "),e("ul",[e("li",[t._v("output: an array of size 8 representing 8 IRuntimeOutputPorts")]),t._v(" "),e("li",[t._v("eventout: an array of size 8 representing 8 IRuntimeEventTriggererPorts")]),t._v(" "),e("li",[t._v("property: an array of size 8 holding strings with the property inputs from the components property fields")])]),t._v(" "),e("p",[t._v("The sendData method of the output variables has to be called with a string. If necessary this needs to be converted into a Java string, this can be done like this:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",[e("code",[t._v("\t\tstr = new java.lang.String(in\\_data);\n\t\toutput\\[in\\_nb\\].sendData(str.getBytes());\n")])])]),e("p",[t._v("For more information please see a demo script in the plugin source code!")]),t._v(" "),e("p",[e("img",{attrs:{src:r(712),alt:"Screenshot: ECMAScriptInterpreter plugin",title:"Screenshot: ECMAScriptInterpreter plugin"}})]),t._v(" "),e("p",[t._v("ECMAScriptInterpreter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputPort1 - inputPort8 [string]:")]),t._v(" input ports for script parameters")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputPort1 - outputPort8 [string]:")]),t._v(" output ports for script results")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("elpPort1 - elpPort8:")]),t._v(" 8 event listener ports which can be used by the script code.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("etpPort1 - elpPort8:")]),t._v(" 8 event trigger ports which can be used by the script code.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("scriptname [string]:")]),t._v(" a valid filename of an ECMA-compatible script (e.g. Javascript) which shall be interpreted")]),t._v(" "),e("li",[e("strong",[t._v("value1 - value8 [string]:")]),t._v(" 8 properties which can be used by the script.")])])])}),[],!1,null,null,null);e.default=s.exports},712:function(t,e,r){t.exports=r.p+"assets/img/ecmascriptinterpreter.dc7ee5f0.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[196],{1150:function(t,e,r){"use strict";r.r(e);var i=r(2),s=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ecmascriptinterpreter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ecmascriptinterpreter"}},[t._v("#")]),t._v(" ECMAScriptInterpreter")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Scripting)")]),t._v(" "),e("p",[t._v("This component is a general purpose processor that can relays the input and incoming events to a script compatible to the ECMA script specification (e.g. JavaScript). The script is specified by the property scriptname. If the property is left empty, the component will load the file “script.js” from local storage. If this file does not exist, the component will generate the file in local storage and fill it with a default “pass-through” script.")]),t._v(" "),e("p",[t._v("There are certain constraints for the script:")]),t._v(" "),e("ul",[e("li",[t._v("the script has to contain an object named scriptclass.")]),t._v(" "),e("li",[t._v("the object has to implement a method dataInput(input_index, input_data)")]),t._v(" "),e("li",[t._v("the object has to implement a method eventInput(event_index)")])]),t._v(" "),e("p",[t._v("The script is provided with the following external variables:")]),t._v(" "),e("ul",[e("li",[t._v("output: an array of size 8 representing 8 IRuntimeOutputPorts")]),t._v(" "),e("li",[t._v("eventout: an array of size 8 representing 8 IRuntimeEventTriggererPorts")]),t._v(" "),e("li",[t._v("property: an array of size 8 holding strings with the property inputs from the components property fields")])]),t._v(" "),e("p",[t._v("The sendData method of the output variables has to be called with a string. If necessary this needs to be converted into a Java string, this can be done like this:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",[e("code",[t._v("\t\tstr = new java.lang.String(in\\_data);\n\t\toutput\\[in\\_nb\\].sendData(str.getBytes());\n")])])]),e("p",[t._v("For more information please see a demo script in the plugin source code!")]),t._v(" "),e("p",[e("img",{attrs:{src:r(712),alt:"Screenshot: ECMAScriptInterpreter plugin",title:"Screenshot: ECMAScriptInterpreter plugin"}})]),t._v(" "),e("p",[t._v("ECMAScriptInterpreter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputPort1 - inputPort8 [string]:")]),t._v(" input ports for script parameters")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputPort1 - outputPort8 [string]:")]),t._v(" output ports for script results")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("elpPort1 - elpPort8:")]),t._v(" 8 event listener ports which can be used by the script code.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("etpPort1 - elpPort8:")]),t._v(" 8 event trigger ports which can be used by the script code.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("scriptname [string]:")]),t._v(" a valid filename of an ECMA-compatible script (e.g. Javascript) which shall be interpreted")]),t._v(" "),e("li",[e("strong",[t._v("value1 - value8 [string]:")]),t._v(" 8 properties which can be used by the script.")])])])}),[],!1,null,null,null);e.default=s.exports},712:function(t,e,r){t.exports=r.p+"assets/img/ecmascriptinterpreter.dc7ee5f0.jpg"}}]); \ No newline at end of file diff --git a/assets/js/197.656f66e0.js b/assets/js/197.9a6dfbc9.js similarity index 97% rename from assets/js/197.656f66e0.js rename to assets/js/197.9a6dfbc9.js index 1cdd8dbe1e..e8c4701694 100644 --- a/assets/js/197.656f66e0.js +++ b/assets/js/197.9a6dfbc9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[197],{1151:function(t,e,s){"use strict";s.r(e);var n=s(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"event-block"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-block"}},[t._v("#")]),t._v(" Event Block")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This plugin, depending on its state, can pass or block events from the input port.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(714),alt:"Screenshot: EventBlock plugin",title:"Screenshot: EventBlock plugin"}})]),t._v(" "),e("p",[t._v("EventBlock plugin")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("input:")]),t._v(" Input port for the events.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("pass:")]),t._v(" Pass the events.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("block:")]),t._v(" Block the events.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("change:")]),t._v(" Change the state of component: pass/block to the opposite.")])])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v(":")]),t._v(" Output port for events.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("block [boolean]:")]),t._v(" If is set to true, the component will block the events after start.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("blockAfterEvent [boolean]:")]),t._v(" If is set to true, the component will block the events after passing one event.")])])])])}),[],!1,null,null,null);e.default=r.exports},714:function(t,e,s){t.exports=s.p+"assets/img/eventblock.a52607a8.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[197],{1152:function(t,e,s){"use strict";s.r(e);var n=s(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"event-block"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-block"}},[t._v("#")]),t._v(" Event Block")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This plugin, depending on its state, can pass or block events from the input port.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(714),alt:"Screenshot: EventBlock plugin",title:"Screenshot: EventBlock plugin"}})]),t._v(" "),e("p",[t._v("EventBlock plugin")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("input:")]),t._v(" Input port for the events.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("pass:")]),t._v(" Pass the events.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("block:")]),t._v(" Block the events.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("change:")]),t._v(" Change the state of component: pass/block to the opposite.")])])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v(":")]),t._v(" Output port for events.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("block [boolean]:")]),t._v(" If is set to true, the component will block the events after start.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("blockAfterEvent [boolean]:")]),t._v(" If is set to true, the component will block the events after passing one event.")])])])])}),[],!1,null,null,null);e.default=r.exports},714:function(t,e,s){t.exports=s.p+"assets/img/eventblock.a52607a8.jpg"}}]); \ No newline at end of file diff --git a/assets/js/198.287970e2.js b/assets/js/198.ff7e37d1.js similarity index 97% rename from assets/js/198.287970e2.js rename to assets/js/198.ff7e37d1.js index 22af27aa92..86bd00c452 100644 --- a/assets/js/198.287970e2.js +++ b/assets/js/198.ff7e37d1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[198],{1153:function(e,t,r){"use strict";r.r(t);var s=r(2),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("The EventCascade component can be used to generate a sequence (or loops) of events with selectable delay times. The sequence can be started and stopped via incoming events.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(716),alt:"Screenshot: EventCascade plugin",title:"Screenshot: EventCascade plugin"}})]),e._v(" "),t("p",[e._v("EventCascade plugin")]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("nextEvent:")]),e._v(" Triggers the next event in the event cascade (with wrap-around)")]),e._v(" "),t("li",[t("strong",[e._v("previousEvent:")]),e._v(" Triggers the previouse event in the event cascade (with wrap-around)")]),e._v(" "),t("li",[t("strong",[e._v("startCascade:")]),e._v(" Starts the event sequence")]),e._v(" "),t("li",[t("strong",[e._v("startCascade:")]),e._v(" Stops the event sequence")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" Sets the next event number to zero (first in the sequence)")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("trigger1 - trigger15:")]),e._v(" The available event trigger outputs")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activeTriggers [integer]:")]),e._v(" How many event triggers are active (defines the wrap-around)")]),e._v(" "),t("li",[t("strong",[e._v("loops [integer]:")]),e._v(" How many loops will be performed before the event sequence stops (0=endless loop)")]),e._v(" "),t("li",[t("strong",[e._v("autoStart [boolean]:")]),e._v(" Defines if the event cascade will be automatically started at model startup")]),e._v(" "),t("li",[t("strong",[e._v("delayBeforeTrigger1 - delayBeforeTrigger15[integer]:")]),e._v(" Delay time before the corresponding trigger event is created")])])])}),[],!1,null,null,null);t.default=n.exports},716:function(e,t,r){e.exports=r.p+"assets/img/eventcascade.b78f3d67.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[198],{1154:function(e,t,r){"use strict";r.r(t);var s=r(2),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("The EventCascade component can be used to generate a sequence (or loops) of events with selectable delay times. The sequence can be started and stopped via incoming events.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(716),alt:"Screenshot: EventCascade plugin",title:"Screenshot: EventCascade plugin"}})]),e._v(" "),t("p",[e._v("EventCascade plugin")]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("nextEvent:")]),e._v(" Triggers the next event in the event cascade (with wrap-around)")]),e._v(" "),t("li",[t("strong",[e._v("previousEvent:")]),e._v(" Triggers the previouse event in the event cascade (with wrap-around)")]),e._v(" "),t("li",[t("strong",[e._v("startCascade:")]),e._v(" Starts the event sequence")]),e._v(" "),t("li",[t("strong",[e._v("startCascade:")]),e._v(" Stops the event sequence")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" Sets the next event number to zero (first in the sequence)")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("trigger1 - trigger15:")]),e._v(" The available event trigger outputs")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activeTriggers [integer]:")]),e._v(" How many event triggers are active (defines the wrap-around)")]),e._v(" "),t("li",[t("strong",[e._v("loops [integer]:")]),e._v(" How many loops will be performed before the event sequence stops (0=endless loop)")]),e._v(" "),t("li",[t("strong",[e._v("autoStart [boolean]:")]),e._v(" Defines if the event cascade will be automatically started at model startup")]),e._v(" "),t("li",[t("strong",[e._v("delayBeforeTrigger1 - delayBeforeTrigger15[integer]:")]),e._v(" Delay time before the corresponding trigger event is created")])])])}),[],!1,null,null,null);t.default=n.exports},716:function(e,t,r){e.exports=r.p+"assets/img/eventcascade.b78f3d67.jpg"}}]); \ No newline at end of file diff --git a/assets/js/199.aeaefb56.js b/assets/js/199.1f02fbb0.js similarity index 98% rename from assets/js/199.aeaefb56.js rename to assets/js/199.1f02fbb0.js index a8be50fbe9..343e6cf2b0 100644 --- a/assets/js/199.aeaefb56.js +++ b/assets/js/199.1f02fbb0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[199],{1152:function(e,t,i){"use strict";i.r(t);var n=i(2),o=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component counts events. It can increase and decrease a counts via incoming events.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(715),alt:"Screenshot: EventCounter plugin",title:"Screenshot: EventCounter plugin"}})]),e._v(" "),t("p",[e._v("EventCounter plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("setValue [integer]:")]),e._v(" Sets the event counter to the incoming value. Note that this value is not propagated to the output port (to avoid loops).")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [integer]:")]),e._v(" Sends the number of events.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("increase:")]),e._v(" Increases the number of events.")]),e._v(" "),t("li",[t("strong",[e._v("decrease:")]),e._v(" Decreases the number of events.")]),e._v(" "),t("li",[t("strong",[e._v("resetToZero:")]),e._v(" Sets the event counter to zero.")]),e._v(" "),t("li",[t("strong",[e._v("resetToInitial:")]),e._v(" Sets the event counter to the initial value (property).")]),e._v(" "),t("li",[t("strong",[e._v("sendNow:")]),e._v(" sendes the current value of the counter to the output port")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("mode [integer]:")]),e._v(" Defines counting mode:")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("no limit:")]),e._v(" The component counts events without any limitation.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("limit maximum:")]),e._v(" In this mode, the maximum value of the counter is limited by the maxValue property.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("limit minimum:")]),e._v(" In this mode, the minimum value of the counter is limited by the minValue property.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("limit minimum and maximum:")]),e._v(" In this mode, both maximum and minimum values of the counter are limited by the maxValue amd minValue properties.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("minValue [integer]:")]),e._v(" Defines the minimum value of the counter.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("maxValue [integer]:")]),e._v(" Defines the maximum value of the counter.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("initialValue [integer]:")]),e._v(" Defines the initial value of the counter.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("wrapAround [boolean]:")]),e._v(" if selected and the appropriate mode is set, exceeding the maximum value will wrap to the minimum value and vice versa.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("sendInitialValue [boolean]:")]),e._v(" if selected, the initial value is sent at the startup.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("autoSend [boolean]:")]),e._v(" if selected, the changes of the event counter are sent immediately to the output port")])])])])}),[],!1,null,null,null);t.default=o.exports},715:function(e,t,i){e.exports=i.p+"assets/img/eventcounter.2b933163.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[199],{1153:function(e,t,i){"use strict";i.r(t);var n=i(2),o=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component counts events. It can increase and decrease a counts via incoming events.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(715),alt:"Screenshot: EventCounter plugin",title:"Screenshot: EventCounter plugin"}})]),e._v(" "),t("p",[e._v("EventCounter plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("setValue [integer]:")]),e._v(" Sets the event counter to the incoming value. Note that this value is not propagated to the output port (to avoid loops).")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("output [integer]:")]),e._v(" Sends the number of events.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("increase:")]),e._v(" Increases the number of events.")]),e._v(" "),t("li",[t("strong",[e._v("decrease:")]),e._v(" Decreases the number of events.")]),e._v(" "),t("li",[t("strong",[e._v("resetToZero:")]),e._v(" Sets the event counter to zero.")]),e._v(" "),t("li",[t("strong",[e._v("resetToInitial:")]),e._v(" Sets the event counter to the initial value (property).")]),e._v(" "),t("li",[t("strong",[e._v("sendNow:")]),e._v(" sendes the current value of the counter to the output port")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("mode [integer]:")]),e._v(" Defines counting mode:")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("no limit:")]),e._v(" The component counts events without any limitation.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("limit maximum:")]),e._v(" In this mode, the maximum value of the counter is limited by the maxValue property.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("limit minimum:")]),e._v(" In this mode, the minimum value of the counter is limited by the minValue property.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("limit minimum and maximum:")]),e._v(" In this mode, both maximum and minimum values of the counter are limited by the maxValue amd minValue properties.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("minValue [integer]:")]),e._v(" Defines the minimum value of the counter.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("maxValue [integer]:")]),e._v(" Defines the maximum value of the counter.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("initialValue [integer]:")]),e._v(" Defines the initial value of the counter.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("wrapAround [boolean]:")]),e._v(" if selected and the appropriate mode is set, exceeding the maximum value will wrap to the minimum value and vice versa.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("sendInitialValue [boolean]:")]),e._v(" if selected, the initial value is sent at the startup.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("autoSend [boolean]:")]),e._v(" if selected, the changes of the event counter are sent immediately to the output port")])])])])}),[],!1,null,null,null);t.default=o.exports},715:function(e,t,i){e.exports=i.p+"assets/img/eventcounter.2b933163.jpg"}}]); \ No newline at end of file diff --git a/assets/js/20.3b70a273.js b/assets/js/20.3b70a273.js deleted file mode 100644 index 8f3f14e5ba..0000000000 --- a/assets/js/20.3b70a273.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{441:function(e,t,i){e.exports=i.p+"assets/img/github-edit.407e1611.png"},442:function(e,t,i){e.exports=i.p+"assets/img/github-edit-preview.73262122.png"},443:function(e,t,i){e.exports=i.p+"assets/img/github-edit-commit-explanation.71943c6f.png"},444:function(e,t,i){e.exports=i.p+"assets/img/github-edit-upload.4d561aef.png"},445:function(e,t,i){e.exports=i.p+"assets/img/github-upload-location.98927c88.png"},446:function(e,t,i){e.exports=i.p+"assets/img/github-upload.56f5573f.png"},447:function(e,t,i){e.exports=i.p+"assets/img/github-dev-preview.1b4ac609.png"},999:function(e,t,i){"use strict";i.r(t);var s=i(2),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"website-editor-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#website-editor-guide"}},[e._v("#")]),e._v(" Website Editor Guide")]),e._v(" "),t("p",[e._v("This guide describes how to edit or update content of the website "),t("a",{attrs:{href:"https://www.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://www.asterics.eu"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("hr"),e._v(" "),t("p",[e._v("Editors can improve, correct and adapt the contents of this website in two ways:")]),e._v(" "),t("ul",[t("li",[e._v("online, or")]),e._v(" "),t("li",[e._v("offline")])]),e._v(" "),t("h2",{attrs:{id:"online"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#online"}},[e._v("#")]),e._v(" Online")]),e._v(" "),t("p",[e._v("You can edit the contents of this website online, or "),t("em",[e._v("remotely")]),e._v(", via GitHub.")]),e._v(" "),t("p",[e._v("The easiest way to locate the files in their source repository, is by clicking the link "),t("code",[e._v("Edit this page on GitHub")]),e._v(" provided within every page of this website.\nAfter clicking the link, a website at GitHub is opened, displaying the relevant file and allowing to perform the required changes and committing immediately.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(441),alt:"GitHub Editing",title:"GitHub Editing"}})]),e._v(" "),t("p",[e._v("Testing the changes is not possible when editing the files remotely, but GitHub provides a simple preview function, which understands basic markdown syntax.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(442),alt:"GitHub Editing - Preview",title:"GitHub Editing - Preview"}})]),e._v(" "),t("p",[e._v("Note, however, that GitHub supports only a "),t("strong",[e._v("subset")]),e._v(" of the markdown features described in the "),t("RouterLink",{attrs:{to:"/guide/markdown.html"}},[e._v("markdown guide")]),e._v(" of this website.\nThe preview does not show the same "),t("em",[e._v("style")]),e._v(" of the page as shown on "),t("a",{attrs:{href:"https://www.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://www.asterics.eu"),t("OutboundLink")],1),e._v(".")],1),e._v(" "),t("p",[e._v("After you finish editing a file, you can commit your changes to the repository.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(443),alt:"Github Editing - Commit",title:"GitHub Editing - Commit"}})]),e._v(" "),t("p",[e._v("At the bottom of the page you will find the "),t("strong",[e._v("Commit changes")]),e._v(" section.\nPerform the following steps to save your changes.")]),e._v(" "),t("ol",[t("li",[e._v("Enter your commit message")]),e._v(" "),t("li",[e._v("Optionally, provide a detailed description of the current changes")]),e._v(" "),t("li",[e._v("Define a GitHub profile as the author of the commit")]),e._v(" "),t("li",[e._v("Create a "),t("em",[e._v("new branch")]),e._v(" , if you don’t have write access to the repository, and start a pull request")]),e._v(" "),t("li",[e._v("Propose the changes to the owners of the repository")])]),e._v(" "),t("h3",{attrs:{id:"uploading-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-files"}},[e._v("#")]),e._v(" Uploading Files")]),e._v(" "),t("p",[e._v("GitHub allows you to upload files and pictures, by "),t("em",[e._v("dragging & dropping")]),e._v(", "),t("em",[e._v("selecting")]),e._v(", and "),t("em",[e._v("pasting")]),e._v(" them.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(444),alt:"GitHub Editing - Uploading Files",title:"GitHub Editing - Uploading Files"}})]),e._v(" "),t("p",[e._v("The above screenshots shows GitHub’s behavior when adding files ("),t("code",[e._v("editor.md")]),e._v(") and pictures ("),t("code",[e._v("github-edit.png")]),e._v(").\nFiles are stored in the respective repository directly.\nHowever, pictures are stored in user specific locations.\nYou can keep (and reuse) this link, without the need to add the picture to the source repository.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Hint")]),e._v(" "),t("p",[e._v("Pictures uploaded to "),t("code",[e._v("githubusercontent.com")]),e._v(" are added, by the developers of this website, to the source repository at a later point, when merging the changes to the main branch.")])]),e._v(" "),t("p",[e._v("Note, that you "),t("strong",[e._v("can’t")]),e._v(" determine their path or location using this view.")]),e._v(" "),t("p",[e._v("Alternatively, you can open the folder in a repository via GitHub, like in the following screenshot, by clicking the directory.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(445),alt:"GitHub Editing - Upload Location",title:"GitHub Editing - Upload Location"}})]),e._v(" "),t("p",[e._v("Afterwards you can create new files or upload multiple files in the opened directory and thereby define the path or location of the uploaded files in the repository.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(446),alt:"GitHub Editing - Uploading Files",title:"GitHub Editing - Uploading Files"}})]),e._v(" "),t("h3",{attrs:{id:"web-based-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#web-based-editor"}},[e._v("#")]),e._v(" Web-based editor")]),e._v(" "),t("p",[e._v("GitHub provides a "),t("a",{attrs:{href:"https://docs.github.com/en/codespaces/developing-in-codespaces/web-based-editor",target:"_blank",rel:"noopener noreferrer"}},[e._v("web-based editor"),t("OutboundLink")],1),e._v(" that allows editing files remotely, but with a similar experience to working locally.")]),e._v(" "),t("p",[e._v("To edit the files of a GitHub repository online, you can press "),t("code",[e._v(".")]),e._v(" on the main page of the repository.\nGitHub displays the files inside the "),t("em",[e._v("web-based editor")]),e._v(", allowing you to edit several files at once, remotely.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(447),alt:"GitHub Web-based Editor",title:"GitHub Web-based Editor"}})]),e._v(" "),t("h2",{attrs:{id:"offline"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#offline"}},[e._v("#")]),e._v(" Offline")]),e._v(" "),t("p",[e._v("To edit the contents of this website offline, or "),t("em",[e._v("locally")]),e._v(", you need to download the "),t("a",{attrs:{href:"https://github.com/asterics/asterics-docs.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("source repository"),t("OutboundLink")],1),e._v(".\nAll required steps are described in the "),t("RouterLink",{attrs:{to:"/guide/docs.html"}},[e._v("developer guide")]),e._v(".")],1),e._v(" "),t("p",[e._v("After cloning the source repository and installing all required tools, run following commands.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" docs init "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Initialize git submodules")]),e._v("\n$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" docs setup "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Create folder docs/ containing all files")]),e._v("\n$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" dev "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Build website and host files with the development server")]),e._v("\n")])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Detailed Instructions")]),e._v(" "),t("p",[e._v("For details, please refer to the "),t("RouterLink",{attrs:{to:"/guide/docs.html"}},[e._v("developer guide")]),e._v(".")],1)]),e._v(" "),t("p",[e._v("With the last command, a development server is started hosting the files locally.\nYou should see a similar output:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("success "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("13")]),e._v(":13:42"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" Build 6b0cef finished "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("400")]),e._v(" ms"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v(" http://localhost:8080/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("p",[e._v("Afterwards you need to perform the desired changes within the files inside "),t("code",[e._v("docs/")]),e._v(".\nWhen saving changes inside those files, a new build is triggered and the content displayed in the browser is updated, automatically.")]),e._v(" "),t("p",[e._v("After finishing editing the files, you need to create a pull request or commit and push your changes to the source repository. Please check the "),t("RouterLink",{attrs:{to:"/guide/docs.html"}},[e._v("developer guide")]),e._v(" for this purpose.")],1),e._v(" "),t("h2",{attrs:{id:"publishing-updates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#publishing-updates"}},[e._v("#")]),e._v(" Publishing Updates")]),e._v(" "),t("p",[e._v("You can’t publish new builds of the website by yourself.\nThe developers of this website integrate incoming pull request regularly.\nAfter adding the pull request, the website is built and published with the most recent content.")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/20.85754a20.js b/assets/js/20.85754a20.js new file mode 100644 index 0000000000..d085b8e8e3 --- /dev/null +++ b/assets/js/20.85754a20.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{1e3:function(e,t,i){"use strict";i.r(t);var s=i(2),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"website-editor-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#website-editor-guide"}},[e._v("#")]),e._v(" Website Editor Guide")]),e._v(" "),t("p",[e._v("This guide describes how to edit or update content of the website "),t("a",{attrs:{href:"https://www.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://www.asterics.eu"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("hr"),e._v(" "),t("p",[e._v("Editors can improve, correct and adapt the contents of this website in two ways:")]),e._v(" "),t("ul",[t("li",[e._v("online, or")]),e._v(" "),t("li",[e._v("offline")])]),e._v(" "),t("h2",{attrs:{id:"online"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#online"}},[e._v("#")]),e._v(" Online")]),e._v(" "),t("p",[e._v("You can edit the contents of this website online, or "),t("em",[e._v("remotely")]),e._v(", via GitHub.")]),e._v(" "),t("p",[e._v("The easiest way to locate the files in their source repository, is by clicking the link "),t("code",[e._v("Edit this page on GitHub")]),e._v(" provided within every page of this website.\nAfter clicking the link, a website at GitHub is opened, displaying the relevant file and allowing to perform the required changes and committing immediately.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(441),alt:"GitHub Editing",title:"GitHub Editing"}})]),e._v(" "),t("p",[e._v("Testing the changes is not possible when editing the files remotely, but GitHub provides a simple preview function, which understands basic markdown syntax.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(442),alt:"GitHub Editing - Preview",title:"GitHub Editing - Preview"}})]),e._v(" "),t("p",[e._v("Note, however, that GitHub supports only a "),t("strong",[e._v("subset")]),e._v(" of the markdown features described in the "),t("RouterLink",{attrs:{to:"/guide/markdown.html"}},[e._v("markdown guide")]),e._v(" of this website.\nThe preview does not show the same "),t("em",[e._v("style")]),e._v(" of the page as shown on "),t("a",{attrs:{href:"https://www.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://www.asterics.eu"),t("OutboundLink")],1),e._v(".")],1),e._v(" "),t("p",[e._v("After you finish editing a file, you can commit your changes to the repository.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(443),alt:"Github Editing - Commit",title:"GitHub Editing - Commit"}})]),e._v(" "),t("p",[e._v("At the bottom of the page you will find the "),t("strong",[e._v("Commit changes")]),e._v(" section.\nPerform the following steps to save your changes.")]),e._v(" "),t("ol",[t("li",[e._v("Enter your commit message")]),e._v(" "),t("li",[e._v("Optionally, provide a detailed description of the current changes")]),e._v(" "),t("li",[e._v("Define a GitHub profile as the author of the commit")]),e._v(" "),t("li",[e._v("Create a "),t("em",[e._v("new branch")]),e._v(" , if you don’t have write access to the repository, and start a pull request")]),e._v(" "),t("li",[e._v("Propose the changes to the owners of the repository")])]),e._v(" "),t("h3",{attrs:{id:"uploading-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uploading-files"}},[e._v("#")]),e._v(" Uploading Files")]),e._v(" "),t("p",[e._v("GitHub allows you to upload files and pictures, by "),t("em",[e._v("dragging & dropping")]),e._v(", "),t("em",[e._v("selecting")]),e._v(", and "),t("em",[e._v("pasting")]),e._v(" them.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(444),alt:"GitHub Editing - Uploading Files",title:"GitHub Editing - Uploading Files"}})]),e._v(" "),t("p",[e._v("The above screenshots shows GitHub’s behavior when adding files ("),t("code",[e._v("editor.md")]),e._v(") and pictures ("),t("code",[e._v("github-edit.png")]),e._v(").\nFiles are stored in the respective repository directly.\nHowever, pictures are stored in user specific locations.\nYou can keep (and reuse) this link, without the need to add the picture to the source repository.")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Hint")]),e._v(" "),t("p",[e._v("Pictures uploaded to "),t("code",[e._v("githubusercontent.com")]),e._v(" are added, by the developers of this website, to the source repository at a later point, when merging the changes to the main branch.")])]),e._v(" "),t("p",[e._v("Note, that you "),t("strong",[e._v("can’t")]),e._v(" determine their path or location using this view.")]),e._v(" "),t("p",[e._v("Alternatively, you can open the folder in a repository via GitHub, like in the following screenshot, by clicking the directory.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(445),alt:"GitHub Editing - Upload Location",title:"GitHub Editing - Upload Location"}})]),e._v(" "),t("p",[e._v("Afterwards you can create new files or upload multiple files in the opened directory and thereby define the path or location of the uploaded files in the repository.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(446),alt:"GitHub Editing - Uploading Files",title:"GitHub Editing - Uploading Files"}})]),e._v(" "),t("h3",{attrs:{id:"web-based-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#web-based-editor"}},[e._v("#")]),e._v(" Web-based editor")]),e._v(" "),t("p",[e._v("GitHub provides a "),t("a",{attrs:{href:"https://docs.github.com/en/codespaces/developing-in-codespaces/web-based-editor",target:"_blank",rel:"noopener noreferrer"}},[e._v("web-based editor"),t("OutboundLink")],1),e._v(" that allows editing files remotely, but with a similar experience to working locally.")]),e._v(" "),t("p",[e._v("To edit the files of a GitHub repository online, you can press "),t("code",[e._v(".")]),e._v(" on the main page of the repository.\nGitHub displays the files inside the "),t("em",[e._v("web-based editor")]),e._v(", allowing you to edit several files at once, remotely.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(447),alt:"GitHub Web-based Editor",title:"GitHub Web-based Editor"}})]),e._v(" "),t("h2",{attrs:{id:"offline"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#offline"}},[e._v("#")]),e._v(" Offline")]),e._v(" "),t("p",[e._v("To edit the contents of this website offline, or "),t("em",[e._v("locally")]),e._v(", you need to download the "),t("a",{attrs:{href:"https://github.com/asterics/asterics-docs.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("source repository"),t("OutboundLink")],1),e._v(".\nAll required steps are described in the "),t("RouterLink",{attrs:{to:"/guide/docs.html"}},[e._v("developer guide")]),e._v(".")],1),e._v(" "),t("p",[e._v("After cloning the source repository and installing all required tools, run following commands.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" docs init "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Initialize git submodules")]),e._v("\n$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" docs setup "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Create folder docs/ containing all files")]),e._v("\n$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" dev "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Build website and host files with the development server")]),e._v("\n")])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Detailed Instructions")]),e._v(" "),t("p",[e._v("For details, please refer to the "),t("RouterLink",{attrs:{to:"/guide/docs.html"}},[e._v("developer guide")]),e._v(".")],1)]),e._v(" "),t("p",[e._v("With the last command, a development server is started hosting the files locally.\nYou should see a similar output:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("success "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("13")]),e._v(":13:42"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" Build 6b0cef finished "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("400")]),e._v(" ms"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("!")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v(" http://localhost:8080/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n")])])]),t("p",[e._v("Afterwards you need to perform the desired changes within the files inside "),t("code",[e._v("docs/")]),e._v(".\nWhen saving changes inside those files, a new build is triggered and the content displayed in the browser is updated, automatically.")]),e._v(" "),t("p",[e._v("After finishing editing the files, you need to create a pull request or commit and push your changes to the source repository. Please check the "),t("RouterLink",{attrs:{to:"/guide/docs.html"}},[e._v("developer guide")]),e._v(" for this purpose.")],1),e._v(" "),t("h2",{attrs:{id:"publishing-updates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#publishing-updates"}},[e._v("#")]),e._v(" Publishing Updates")]),e._v(" "),t("p",[e._v("You can’t publish new builds of the website by yourself.\nThe developers of this website integrate incoming pull request regularly.\nAfter adding the pull request, the website is built and published with the most recent content.")])])}),[],!1,null,null,null);t.default=o.exports},441:function(e,t,i){e.exports=i.p+"assets/img/github-edit.407e1611.png"},442:function(e,t,i){e.exports=i.p+"assets/img/github-edit-preview.73262122.png"},443:function(e,t,i){e.exports=i.p+"assets/img/github-edit-commit-explanation.71943c6f.png"},444:function(e,t,i){e.exports=i.p+"assets/img/github-edit-upload.4d561aef.png"},445:function(e,t,i){e.exports=i.p+"assets/img/github-upload-location.98927c88.png"},446:function(e,t,i){e.exports=i.p+"assets/img/github-upload.56f5573f.png"},447:function(e,t,i){e.exports=i.p+"assets/img/github-dev-preview.1b4ac609.png"}}]); \ No newline at end of file diff --git a/assets/js/200.8d85a009.js b/assets/js/200.97795e0a.js similarity index 89% rename from assets/js/200.8d85a009.js rename to assets/js/200.97795e0a.js index ab49ec665f..d8549d6c99 100644 --- a/assets/js/200.8d85a009.js +++ b/assets/js/200.97795e0a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[200],{1154:function(t,e,r){"use strict";r.r(e);var n=r(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This plugin passes received events after a defined delay.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(717),alt:"Screenshot: EventDelay plugin",title:"Screenshot: EventDelay plugin"}})]),t._v(" "),e("p",[t._v("EventDelay plugin")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input:")]),t._v(" Input port for the events.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v(":")]),t._v(" Output port for events.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" Delay between input and output event (in milliseconds).")])])])}),[],!1,null,null,null);e.default=s.exports},717:function(t,e,r){t.exports=r.p+"assets/img/eventdelay.6862b2c8.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[200],{1156:function(t,e,r){"use strict";r.r(e);var n=r(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This plugin passes received events after a defined delay.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(718),alt:"Screenshot: EventDelay plugin",title:"Screenshot: EventDelay plugin"}})]),t._v(" "),e("p",[t._v("EventDelay plugin")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input:")]),t._v(" Input port for the events.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v(":")]),t._v(" Output port for events.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" Delay between input and output event (in milliseconds).")])])])}),[],!1,null,null,null);e.default=s.exports},718:function(t,e,r){t.exports=r.p+"assets/img/eventdelay.6862b2c8.jpg"}}]); \ No newline at end of file diff --git a/assets/js/201.02f25e09.js b/assets/js/201.7c3001fd.js similarity index 90% rename from assets/js/201.02f25e09.js rename to assets/js/201.7c3001fd.js index 7f4ede2c86..1c40afd1f9 100644 --- a/assets/js/201.02f25e09.js +++ b/assets/js/201.7c3001fd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[201],{1157:function(t,e,n){"use strict";n.r(e);var r=n(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component translates incoming strings to events. Ten string slots for commands and ten associated Event Trigger Ports are available. This component can be useful to generate an event from a string command (which is generated by OSKA or another string-sending component).")]),t._v(" "),e("p",[e("img",{attrs:{src:n(720),alt:"Screenshot: EventDispatcher plugin",title:"Screenshot: EventDispatcher plugin"}})]),t._v(" "),e("p",[t._v("EventDispatcher plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("cmd [string]:")]),t._v(" The incoming command string.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("recognizedCommand1 - recognizedCommand10:")]),t._v(" the events triggered by the recognized commands")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("command1 - command10 [string]:")]),t._v(" Ten string slots for commands. If an incoming string matches one of these property values, the associated event trigger is raised.")])])])}),[],!1,null,null,null);e.default=s.exports},720:function(t,e,n){t.exports=n.p+"assets/img/eventdispatcher.4aaea330.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[201],{1155:function(t,e,n){"use strict";n.r(e);var r=n(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component translates incoming strings to events. Ten string slots for commands and ten associated Event Trigger Ports are available. This component can be useful to generate an event from a string command (which is generated by OSKA or another string-sending component).")]),t._v(" "),e("p",[e("img",{attrs:{src:n(717),alt:"Screenshot: EventDispatcher plugin",title:"Screenshot: EventDispatcher plugin"}})]),t._v(" "),e("p",[t._v("EventDispatcher plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("cmd [string]:")]),t._v(" The incoming command string.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("recognizedCommand1 - recognizedCommand10:")]),t._v(" the events triggered by the recognized commands")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("command1 - command10 [string]:")]),t._v(" Ten string slots for commands. If an incoming string matches one of these property values, the associated event trigger is raised.")])])])}),[],!1,null,null,null);e.default=s.exports},717:function(t,e,n){t.exports=n.p+"assets/img/eventdispatcher.4aaea330.jpg"}}]); \ No newline at end of file diff --git a/assets/js/202.4ab3cb1f.js b/assets/js/202.fa02c017.js similarity index 92% rename from assets/js/202.4ab3cb1f.js rename to assets/js/202.fa02c017.js index 6433e36f6b..84d5b6058d 100644 --- a/assets/js/202.4ab3cb1f.js +++ b/assets/js/202.fa02c017.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[202],{1155:function(t,e,n){"use strict";n.r(e);var s=n(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component stores the state, driven by an event. When the event-in event is received and the internal status is 1, event-out1 is fired and the internal status set to 2. When the event-in event is received and the internal status is 2, event-out2 is fired and the internal status set to 1.")]),t._v(" "),e("p",[e("img",{attrs:{src:n(718),alt:"Screenshot: Event Flip Flop plugin",title:"Screenshot: Event Flip Flop plugin"}})]),t._v(" "),e("p",[t._v("Event Flip Flop plugin")]),t._v(" "),e("h2",{attrs:{id:"event-listener-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-ports"}},[t._v("#")]),t._v(" Event Listener Ports")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("event-in:")]),t._v(" Event input to change the state of the flip-flop and fire an out-event.")]),t._v(" "),e("li",[e("strong",[t._v("selectOut1:")]),t._v(" selects state 1 (event-out1 trigger port will send the next incoming event)")]),t._v(" "),e("li",[e("strong",[t._v("selectOut2:")]),t._v(" selects state 2 (event-out2 trigger port will send the next incoming event)")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("event-out1:")]),t._v(" Event fired, if event-in received and stored state is 1.")]),t._v(" "),e("li",[e("strong",[t._v("event-out2:")]),t._v(" Event fired, if event-in received and stored state is 2.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("p",[t._v("No Properties.")])])}),[],!1,null,null,null);e.default=r.exports},718:function(t,e,n){t.exports=n.p+"assets/img/eventflipflop.4be67c4a.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[202],{1158:function(t,e,n){"use strict";n.r(e);var s=n(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component stores the state, driven by an event. When the event-in event is received and the internal status is 1, event-out1 is fired and the internal status set to 2. When the event-in event is received and the internal status is 2, event-out2 is fired and the internal status set to 1.")]),t._v(" "),e("p",[e("img",{attrs:{src:n(720),alt:"Screenshot: Event Flip Flop plugin",title:"Screenshot: Event Flip Flop plugin"}})]),t._v(" "),e("p",[t._v("Event Flip Flop plugin")]),t._v(" "),e("h2",{attrs:{id:"event-listener-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-ports"}},[t._v("#")]),t._v(" Event Listener Ports")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("event-in:")]),t._v(" Event input to change the state of the flip-flop and fire an out-event.")]),t._v(" "),e("li",[e("strong",[t._v("selectOut1:")]),t._v(" selects state 1 (event-out1 trigger port will send the next incoming event)")]),t._v(" "),e("li",[e("strong",[t._v("selectOut2:")]),t._v(" selects state 2 (event-out2 trigger port will send the next incoming event)")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("event-out1:")]),t._v(" Event fired, if event-in received and stored state is 1.")]),t._v(" "),e("li",[e("strong",[t._v("event-out2:")]),t._v(" Event fired, if event-in received and stored state is 2.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("p",[t._v("No Properties.")])])}),[],!1,null,null,null);e.default=r.exports},720:function(t,e,n){t.exports=n.p+"assets/img/eventflipflop.4be67c4a.png"}}]); \ No newline at end of file diff --git a/assets/js/203.4422e380.js b/assets/js/203.6ed3ddcc.js similarity index 98% rename from assets/js/203.4422e380.js rename to assets/js/203.6ed3ddcc.js index 03ce5d2619..e5b1dd006b 100644 --- a/assets/js/203.4422e380.js +++ b/assets/js/203.6ed3ddcc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[203],{1156:function(e,t,r){"use strict";r.r(t);var n=r(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"eventrouter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventrouter"}},[e._v("#")]),e._v(" EventRouter")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component allows routing up to 6 incoming events to one of 8 corresponding output (trigger) event ports.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(719),alt:"Screenshot: EventRouter",title:"Screenshot: Event Router plugin"}})]),e._v(" "),t("p",[e._v("Event Router plugin")]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventIn1-6:")]),e._v(" The incoming events to be routed.")]),e._v(" "),t("li",[t("strong",[e._v("select1-select8:")]),e._v(" selects one of the 8 corresponding event routes (trigger output ports) events entering the eventIn ports")]),e._v(" "),t("li",[t("strong",[e._v("selectNext:")]),e._v(" selects the next event route")]),e._v(" "),t("li",[t("strong",[e._v("selectPrevious:")]),e._v(" selects the next event route")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut2_1-eventOut2_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn2 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut3_1-eventOut3_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn3 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut4_1-eventOut4_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn4 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut5_1-eventOut5_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn5 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut6_1-eventOut6_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn6 can be routed to.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activeRoutes (integer):")]),e._v(" number of active routes (relevant for the selectNext and selectPrevious functions and the wrapAround feature)")]),e._v(" "),t("li",[t("strong",[e._v("wrapAround (boolean):")]),e._v(" if selected selectNext srats again at the first route when the last active route was reached, and selectPrevious continues at the last active route when triggered at the first route.")])])])}),[],!1,null,null,null);t.default=s.exports},719:function(e,t,r){e.exports=r.p+"assets/img/eventrouter.a4b5b104.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[203],{1157:function(e,t,r){"use strict";r.r(t);var n=r(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"eventrouter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventrouter"}},[e._v("#")]),e._v(" EventRouter")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component allows routing up to 6 incoming events to one of 8 corresponding output (trigger) event ports.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(719),alt:"Screenshot: EventRouter",title:"Screenshot: Event Router plugin"}})]),e._v(" "),t("p",[e._v("Event Router plugin")]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventIn1-6:")]),e._v(" The incoming events to be routed.")]),e._v(" "),t("li",[t("strong",[e._v("select1-select8:")]),e._v(" selects one of the 8 corresponding event routes (trigger output ports) events entering the eventIn ports")]),e._v(" "),t("li",[t("strong",[e._v("selectNext:")]),e._v(" selects the next event route")]),e._v(" "),t("li",[t("strong",[e._v("selectPrevious:")]),e._v(" selects the next event route")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut2_1-eventOut2_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn2 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut3_1-eventOut3_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn3 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut4_1-eventOut4_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn4 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut5_1-eventOut5_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn5 can be routed to.")]),e._v(" "),t("li",[t("strong",[e._v("eventOut6_1-eventOut6_8:")]),e._v(" 8 event trigger ports where the events entering the listener port eventIn6 can be routed to.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activeRoutes (integer):")]),e._v(" number of active routes (relevant for the selectNext and selectPrevious functions and the wrapAround feature)")]),e._v(" "),t("li",[t("strong",[e._v("wrapAround (boolean):")]),e._v(" if selected selectNext srats again at the first route when the last active route was reached, and selectPrevious continues at the last active route when triggered at the first route.")])])])}),[],!1,null,null,null);t.default=s.exports},719:function(e,t,r){e.exports=r.p+"assets/img/eventrouter.a4b5b104.jpg"}}]); \ No newline at end of file diff --git a/assets/js/204.05359b66.js b/assets/js/204.03ad897e.js similarity index 98% rename from assets/js/204.05359b66.js rename to assets/js/204.03ad897e.js index 3a1be07a79..09dc753c18 100644 --- a/assets/js/204.05359b66.js +++ b/assets/js/204.03ad897e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[204],{1158:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"eventstatemachine"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventstatemachine"}},[e._v("#")]),e._v(" EventStateMachine")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component allows definition of a sequence of events (up to 9 different incoming events are supported). If the sequence appears at the event listener ports in the given order, an event is fired by the EventStateMachine plugin. Optionally, a timing can be specified for a valid event sequence.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(721),alt:"Screenshot: EventStateMachine",title:"Screenshot: Event State Machine plugin"}})]),e._v(" "),t("p",[e._v("Event State Machine plugin")]),e._v(" "),t("h2",{attrs:{id:"eventstatemachine-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventstatemachine-description"}},[e._v("#")]),e._v(" EventStateMachine Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1-in9:")]),e._v(" Incoming events")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" Resets the current state detection to the first element of the sequence")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("finalStateReached:")]),e._v(" fired if the last element of the sequence is reached.")]),e._v(" "),t("li",[t("strong",[e._v("stateError:")]),e._v(" fired if an incoming event does not fit the sequence.")]),e._v(" "),t("li",[t("strong",[e._v("stateChanged:")]),e._v(" fired if a new state of the sequence is reached.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("stateSequence [string]:")]),e._v(" A sequence of digits separated by commas, representing the order of incoming events, for example: “1,5,2,3,1”.")]),e._v(" "),t("li",[t("strong",[e._v("stateTiming [string]:")]),e._v(" An (optional) sequence of timings for the above events, specified in min/max milliseconds for a state transition. One timing information consists of a numeric value for the maximum time or two numeric values separated by a forward slash (/) for minimum and maximum time. For example the timing “1000/2000,500/1000,x,3000” defines that the transition from first to second state my take a minimum of 1000 milliseconds and a maximum of 3000 milliseconds; The transition to the next state may trake 500-1000 milliseconds, the next transition has no timing contraints, the next transition may take up to 3000 milliseconds. If this property is left empty, no timing constraints are active for the event state transitions.")]),e._v(" "),t("li",[t("strong",[e._v("resetOnIncorrectEvent [boolean]:")]),e._v(" if checked, an incoming event which does not fit the current element of the sequence will reset the state detection to the first element of the sequence.")])])])}),[],!1,null,null,null);t.default=s.exports},721:function(e,t,n){e.exports=n.p+"assets/img/eventstatemachine.5875716f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[204],{1159:function(e,t,n){"use strict";n.r(t);var i=n(2),s=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"eventstatemachine"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventstatemachine"}},[e._v("#")]),e._v(" EventStateMachine")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component allows definition of a sequence of events (up to 9 different incoming events are supported). If the sequence appears at the event listener ports in the given order, an event is fired by the EventStateMachine plugin. Optionally, a timing can be specified for a valid event sequence.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(721),alt:"Screenshot: EventStateMachine",title:"Screenshot: Event State Machine plugin"}})]),e._v(" "),t("p",[e._v("Event State Machine plugin")]),e._v(" "),t("h2",{attrs:{id:"eventstatemachine-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eventstatemachine-description"}},[e._v("#")]),e._v(" EventStateMachine Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1-in9:")]),e._v(" Incoming events")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" Resets the current state detection to the first element of the sequence")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("finalStateReached:")]),e._v(" fired if the last element of the sequence is reached.")]),e._v(" "),t("li",[t("strong",[e._v("stateError:")]),e._v(" fired if an incoming event does not fit the sequence.")]),e._v(" "),t("li",[t("strong",[e._v("stateChanged:")]),e._v(" fired if a new state of the sequence is reached.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("stateSequence [string]:")]),e._v(" A sequence of digits separated by commas, representing the order of incoming events, for example: “1,5,2,3,1”.")]),e._v(" "),t("li",[t("strong",[e._v("stateTiming [string]:")]),e._v(" An (optional) sequence of timings for the above events, specified in min/max milliseconds for a state transition. One timing information consists of a numeric value for the maximum time or two numeric values separated by a forward slash (/) for minimum and maximum time. For example the timing “1000/2000,500/1000,x,3000” defines that the transition from first to second state my take a minimum of 1000 milliseconds and a maximum of 3000 milliseconds; The transition to the next state may trake 500-1000 milliseconds, the next transition has no timing contraints, the next transition may take up to 3000 milliseconds. If this property is left empty, no timing constraints are active for the event state transitions.")]),e._v(" "),t("li",[t("strong",[e._v("resetOnIncorrectEvent [boolean]:")]),e._v(" if checked, an incoming event which does not fit the current element of the sequence will reset the state detection to the first element of the sequence.")])])])}),[],!1,null,null,null);t.default=s.exports},721:function(e,t,n){e.exports=n.p+"assets/img/eventstatemachine.5875716f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/205.d54ea064.js b/assets/js/205.7882f9cd.js similarity index 97% rename from assets/js/205.d54ea064.js rename to assets/js/205.7882f9cd.js index 1148697fa3..a5e4ede5b5 100644 --- a/assets/js/205.d54ea064.js +++ b/assets/js/205.7882f9cd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[205],{1160:function(e,t,o){"use strict";o.r(t);var s=o(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"fabi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fabi"}},[e._v("#")]),e._v(" FABI")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Microcontroller Interface)")]),e._v(" "),t("p",[e._v("This component provides an interface for a FABI controller and enables the programming process. It is possible to configure the buttons which are connected to the FABI controller and store the set to the built in EEPROM.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(723),alt:"Screenshot: FABI plugin",title:"Screenshot: FABI plugin"}})]),e._v(" "),t("p",[e._v("FABI plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The Plugin requires a FABI2.0 compatible Version as well as the right COM Port. The Baudrate is predefined at 9600 Baud.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("ButtonMode [integer]:")]),e._v(" Number of the button")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("SlotSaveName [string]:")]),e._v(" Name of the slot to save the set of modes")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("SlotLoadName [string]:")]),e._v(" Name of the slot to load the set of modes")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("MoveMouseX [integer]:")]),e._v(" Number of pixels to move the mouse in X direction (right)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("MoveMouseY [integer]:")]),e._v(" Number of pixels to move the mouse in Y direction (down)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Text [string]:")]),e._v(" Text for the KeyWrite command")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("key [string]:")]),e._v(" Text for the KeyPress command"),t("br"),e._v("\n(e.g. AT KP KEY_UP presses the “Cursor-Up” key, AT KP KEY_CTRL KEY_ALT KEY_DELETE presses all three keys)"),t("br"),e._v("\nsupported key identifiers for key press command (AT KP):")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[e._v("\t\t\t\tKEY\\_A KEY\\_B KEY\\_C KEY\\_D KEY\\_E KEY\\_F KEY\\_G KEY\\_H KEY\\_I KEY\\_J KEY\\_K KEY\\_L\n\t\t\t\tKEY\\_M KEY\\_N KEY\\_O KEY\\_P KEY\\_Q KEY\\_R KEY\\_S KEY\\_T KEY\\_U KEY\\_V KEY\\_W KEY\\_X\n\t\t\t\tKEY\\_Y KEY\\_Z KEY\\_1 KEY\\_2 KEY\\_3 KEY\\_4 KEY\\_5 KEY\\_6 KEY\\_7 KEY\\_8 KEY\\_9 KEY\\_0\n\t\t\t\tKEY\\_F1 KEY\\_F2 KEY\\_F3 KEY\\_F4 KEY\\_F5 KEY\\_F6 KEY\\_F7 KEY\\_F8 KEY\\_F9 KEY\\_F10 KEY\\_F11 KEY\\_F12\n\n\t\t\t\tKEY\\_RIGHT KEY\\_LEFT KEY\\_DOWN KEY\\_UP KEY\\_ENTER KEY\\_ESC KEY\\_BACKSPACE KEY\\_TAB\n\t\t\t\tKEY\\_HOME KEY\\_PAGE\\_UP KEY\\_PAGE\\_DOWN KEY\\_DELETE KEY\\_INSERT KEY\\_END\t KEY\\_NUM\\_LOCK KEY\\_SCROLL\\_LOCK\n\t\t\t\tKEY\\_SPACE KEY\\_CAPS\\_LOCK KEY\\_PAUSE KEY\\_SHIFT KEY\\_CTRL KEY\\_ALT KEY\\_RIGHT\\_ALT KEY\\_GUI\n\t\t\t\tKEY\\_RIGHT\\_GUI\n")])])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("List [string]:")]),e._v(" Lists the slots stored in the EEPROM of the FABI controller")]),e._v(" "),t("li",[t("strong",[e._v("ID [string]:")]),e._v(" Shows the ID of the FABI version")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("ID :")]),e._v(" identification string will be returned (e.g. “FABI Version 2.0”)"),t("br"),e._v("\nCorresponding FABI command is : “AT ID”")]),e._v(" "),t("li",[t("strong",[e._v("ButtonMode :")]),e._v(" button mode setting for a button (e.g. AT BM 2 -> next command defines the new function for button 2)"),t("br"),e._v("\nCorresponding FABI command is : “AT BM num”")]),e._v(" "),t("li",[t("strong",[e._v("ClickLeft :")]),e._v(" click left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CL”")]),e._v(" "),t("li",[t("strong",[e._v("ClickRight :")]),e._v(" click right mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CR”")]),e._v(" "),t("li",[t("strong",[e._v("ClickDoubleLeft :")]),e._v(" click double with left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CD”")]),e._v(" "),t("li",[t("strong",[e._v("ClickMiddle :")]),e._v(" click middle mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CM”")]),e._v(" "),t("li",[t("strong",[e._v("PressLeft :")]),e._v(" press/hold the left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT PL”")]),e._v(" "),t("li",[t("strong",[e._v("PressRight :")]),e._v(" press/hold the right mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT PR”")]),e._v(" "),t("li",[t("strong",[e._v("PressMiddle :")]),e._v(" press/hold the middle mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT PM”")]),e._v(" "),t("li",[t("strong",[e._v("ReleaseLeft :")]),e._v(" release the left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT RL”")]),e._v(" "),t("li",[t("strong",[e._v("ReleaseRight :")]),e._v(" release the right mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT RR”")]),e._v(" "),t("li",[t("strong",[e._v("ReleaseMiddle :")]),e._v(" release the middle mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT RM”")]),e._v(" "),t("li",[t("strong",[e._v("WheelUp :")]),e._v(" move mouse wheel up"),t("br"),e._v("\nCorresponding FABI command is : “AT WU”")]),e._v(" "),t("li",[t("strong",[e._v("WheelDown :")]),e._v(" move mouse wheel down"),t("br"),e._v("\nCorresponding FABI command is : “AT WD”")]),e._v(" "),t("li",[t("strong",[e._v("MoveMouseX :")]),e._v(" move mouse in x direction (e.g. AT X 4 moves 4 pixels to the right)"),t("br"),e._v("\nCorresponding FABI command is : “AT MX num”")]),e._v(" "),t("li",[t("strong",[e._v("MoveMouseY :")]),e._v(" move mouse in y direction (e.g. AT Y -10 moves 10 pixels up)"),t("br"),e._v("\nCorresponding FABI command is : “AT MY num”")]),e._v(" "),t("li",[t("strong",[e._v("KeyWrite :")]),e._v(" keyboard write text (e.g. AT KW Hello! writes “Hello!”)"),t("br"),e._v("\nCorresponding FABI command is : “AT KW text”")]),e._v(" "),t("li",[t("strong",[e._v("KeyPress :")]),e._v(" key press: press/hold all keys identified in text (e.g. AT KP KEY_UP presses the “Cursor-Up” key, AT KP KEY_CTRL KEY_ALT KEY_DELETE presses all three keys) The possible KeyPress commands are described in detail at the input port “key”!"),t("br"),e._v("\nCorresponding FABI command is : “AT KP text”")]),e._v(" "),t("li",[t("strong",[e._v("KeyRelease :")]),e._v(" key release: releases all keys identified in text"),t("br"),e._v("\nCorresponding FABI command is : “AT KR text”")]),e._v(" "),t("li",[t("strong",[e._v("KeyReleaseAll :")]),e._v(" release all: releases all currently pressed keys and buttons"),t("br"),e._v("\nCorresponding FABI command is : “AT RA”")]),e._v(" "),t("li",[t("strong",[e._v("Save :")]),e._v(" save settings and current button modes to next free eeprom slot under given name (e.g. AT SAVE mouse1)"),t("br"),e._v("\nCorresponding FABI command is : “AT SAVE text”")]),e._v(" "),t("li",[t("strong",[e._v("Load :")]),e._v(" load button modes from eeprom slot (e.g. AT LOAD mouse1 -> loads profile named “mouse1”)"),t("br"),e._v("\nCorresponding FABI command is : “AT LOAD text”")]),e._v(" "),t("li",[t("strong",[e._v("List :")]),e._v(" list all saved mode names"),t("br"),e._v("\nCorresponding FABI command is : “AT LIST”")]),e._v(" "),t("li",[t("strong",[e._v("Next :")]),e._v(" next mode will be loaded (wrap around after last slot)"),t("br"),e._v("\nCorresponding FABI command is : “AT NEXT”")]),e._v(" "),t("li",[t("strong",[e._v("Clear :")]),e._v(" clear EEPROM content (delete all stored slots)"),t("br"),e._v("\nCorresponding FABI command is : “AT CLEAR”")]),e._v(" "),t("li",[t("strong",[e._v("Idle :")]),e._v(" idle command (no operation)"),t("br"),e._v("\nCorresponding FABI command is : “AT IDLE”")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Stepsize [integer]:")]),e._v(" set mouse wheel stepsize (e.g. AT WS 3 sets the wheel stepsize to 3 rows)"),t("br"),e._v("\nThe stepsize is set when the plugin is started")]),e._v(" "),t("li",[t("strong",[e._v("COMPort [integer]:")]),e._v(" COM Port of FABI.")])])])}),[],!1,null,null,null);t.default=r.exports},723:function(e,t,o){e.exports=o.p+"assets/img/fabi.d2820cd0.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[205],{1164:function(e,t,o){"use strict";o.r(t);var s=o(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"fabi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fabi"}},[e._v("#")]),e._v(" FABI")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Microcontroller Interface)")]),e._v(" "),t("p",[e._v("This component provides an interface for a FABI controller and enables the programming process. It is possible to configure the buttons which are connected to the FABI controller and store the set to the built in EEPROM.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(727),alt:"Screenshot: FABI plugin",title:"Screenshot: FABI plugin"}})]),e._v(" "),t("p",[e._v("FABI plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The Plugin requires a FABI2.0 compatible Version as well as the right COM Port. The Baudrate is predefined at 9600 Baud.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("ButtonMode [integer]:")]),e._v(" Number of the button")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("SlotSaveName [string]:")]),e._v(" Name of the slot to save the set of modes")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("SlotLoadName [string]:")]),e._v(" Name of the slot to load the set of modes")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("MoveMouseX [integer]:")]),e._v(" Number of pixels to move the mouse in X direction (right)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("MoveMouseY [integer]:")]),e._v(" Number of pixels to move the mouse in Y direction (down)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("Text [string]:")]),e._v(" Text for the KeyWrite command")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("key [string]:")]),e._v(" Text for the KeyPress command"),t("br"),e._v("\n(e.g. AT KP KEY_UP presses the “Cursor-Up” key, AT KP KEY_CTRL KEY_ALT KEY_DELETE presses all three keys)"),t("br"),e._v("\nsupported key identifiers for key press command (AT KP):")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[e._v("\t\t\t\tKEY\\_A KEY\\_B KEY\\_C KEY\\_D KEY\\_E KEY\\_F KEY\\_G KEY\\_H KEY\\_I KEY\\_J KEY\\_K KEY\\_L\n\t\t\t\tKEY\\_M KEY\\_N KEY\\_O KEY\\_P KEY\\_Q KEY\\_R KEY\\_S KEY\\_T KEY\\_U KEY\\_V KEY\\_W KEY\\_X\n\t\t\t\tKEY\\_Y KEY\\_Z KEY\\_1 KEY\\_2 KEY\\_3 KEY\\_4 KEY\\_5 KEY\\_6 KEY\\_7 KEY\\_8 KEY\\_9 KEY\\_0\n\t\t\t\tKEY\\_F1 KEY\\_F2 KEY\\_F3 KEY\\_F4 KEY\\_F5 KEY\\_F6 KEY\\_F7 KEY\\_F8 KEY\\_F9 KEY\\_F10 KEY\\_F11 KEY\\_F12\n\n\t\t\t\tKEY\\_RIGHT KEY\\_LEFT KEY\\_DOWN KEY\\_UP KEY\\_ENTER KEY\\_ESC KEY\\_BACKSPACE KEY\\_TAB\n\t\t\t\tKEY\\_HOME KEY\\_PAGE\\_UP KEY\\_PAGE\\_DOWN KEY\\_DELETE KEY\\_INSERT KEY\\_END\t KEY\\_NUM\\_LOCK KEY\\_SCROLL\\_LOCK\n\t\t\t\tKEY\\_SPACE KEY\\_CAPS\\_LOCK KEY\\_PAUSE KEY\\_SHIFT KEY\\_CTRL KEY\\_ALT KEY\\_RIGHT\\_ALT KEY\\_GUI\n\t\t\t\tKEY\\_RIGHT\\_GUI\n")])])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("List [string]:")]),e._v(" Lists the slots stored in the EEPROM of the FABI controller")]),e._v(" "),t("li",[t("strong",[e._v("ID [string]:")]),e._v(" Shows the ID of the FABI version")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("ID :")]),e._v(" identification string will be returned (e.g. “FABI Version 2.0”)"),t("br"),e._v("\nCorresponding FABI command is : “AT ID”")]),e._v(" "),t("li",[t("strong",[e._v("ButtonMode :")]),e._v(" button mode setting for a button (e.g. AT BM 2 -> next command defines the new function for button 2)"),t("br"),e._v("\nCorresponding FABI command is : “AT BM num”")]),e._v(" "),t("li",[t("strong",[e._v("ClickLeft :")]),e._v(" click left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CL”")]),e._v(" "),t("li",[t("strong",[e._v("ClickRight :")]),e._v(" click right mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CR”")]),e._v(" "),t("li",[t("strong",[e._v("ClickDoubleLeft :")]),e._v(" click double with left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CD”")]),e._v(" "),t("li",[t("strong",[e._v("ClickMiddle :")]),e._v(" click middle mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT CM”")]),e._v(" "),t("li",[t("strong",[e._v("PressLeft :")]),e._v(" press/hold the left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT PL”")]),e._v(" "),t("li",[t("strong",[e._v("PressRight :")]),e._v(" press/hold the right mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT PR”")]),e._v(" "),t("li",[t("strong",[e._v("PressMiddle :")]),e._v(" press/hold the middle mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT PM”")]),e._v(" "),t("li",[t("strong",[e._v("ReleaseLeft :")]),e._v(" release the left mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT RL”")]),e._v(" "),t("li",[t("strong",[e._v("ReleaseRight :")]),e._v(" release the right mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT RR”")]),e._v(" "),t("li",[t("strong",[e._v("ReleaseMiddle :")]),e._v(" release the middle mouse button"),t("br"),e._v("\nCorresponding FABI command is : “AT RM”")]),e._v(" "),t("li",[t("strong",[e._v("WheelUp :")]),e._v(" move mouse wheel up"),t("br"),e._v("\nCorresponding FABI command is : “AT WU”")]),e._v(" "),t("li",[t("strong",[e._v("WheelDown :")]),e._v(" move mouse wheel down"),t("br"),e._v("\nCorresponding FABI command is : “AT WD”")]),e._v(" "),t("li",[t("strong",[e._v("MoveMouseX :")]),e._v(" move mouse in x direction (e.g. AT X 4 moves 4 pixels to the right)"),t("br"),e._v("\nCorresponding FABI command is : “AT MX num”")]),e._v(" "),t("li",[t("strong",[e._v("MoveMouseY :")]),e._v(" move mouse in y direction (e.g. AT Y -10 moves 10 pixels up)"),t("br"),e._v("\nCorresponding FABI command is : “AT MY num”")]),e._v(" "),t("li",[t("strong",[e._v("KeyWrite :")]),e._v(" keyboard write text (e.g. AT KW Hello! writes “Hello!”)"),t("br"),e._v("\nCorresponding FABI command is : “AT KW text”")]),e._v(" "),t("li",[t("strong",[e._v("KeyPress :")]),e._v(" key press: press/hold all keys identified in text (e.g. AT KP KEY_UP presses the “Cursor-Up” key, AT KP KEY_CTRL KEY_ALT KEY_DELETE presses all three keys) The possible KeyPress commands are described in detail at the input port “key”!"),t("br"),e._v("\nCorresponding FABI command is : “AT KP text”")]),e._v(" "),t("li",[t("strong",[e._v("KeyRelease :")]),e._v(" key release: releases all keys identified in text"),t("br"),e._v("\nCorresponding FABI command is : “AT KR text”")]),e._v(" "),t("li",[t("strong",[e._v("KeyReleaseAll :")]),e._v(" release all: releases all currently pressed keys and buttons"),t("br"),e._v("\nCorresponding FABI command is : “AT RA”")]),e._v(" "),t("li",[t("strong",[e._v("Save :")]),e._v(" save settings and current button modes to next free eeprom slot under given name (e.g. AT SAVE mouse1)"),t("br"),e._v("\nCorresponding FABI command is : “AT SAVE text”")]),e._v(" "),t("li",[t("strong",[e._v("Load :")]),e._v(" load button modes from eeprom slot (e.g. AT LOAD mouse1 -> loads profile named “mouse1”)"),t("br"),e._v("\nCorresponding FABI command is : “AT LOAD text”")]),e._v(" "),t("li",[t("strong",[e._v("List :")]),e._v(" list all saved mode names"),t("br"),e._v("\nCorresponding FABI command is : “AT LIST”")]),e._v(" "),t("li",[t("strong",[e._v("Next :")]),e._v(" next mode will be loaded (wrap around after last slot)"),t("br"),e._v("\nCorresponding FABI command is : “AT NEXT”")]),e._v(" "),t("li",[t("strong",[e._v("Clear :")]),e._v(" clear EEPROM content (delete all stored slots)"),t("br"),e._v("\nCorresponding FABI command is : “AT CLEAR”")]),e._v(" "),t("li",[t("strong",[e._v("Idle :")]),e._v(" idle command (no operation)"),t("br"),e._v("\nCorresponding FABI command is : “AT IDLE”")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Stepsize [integer]:")]),e._v(" set mouse wheel stepsize (e.g. AT WS 3 sets the wheel stepsize to 3 rows)"),t("br"),e._v("\nThe stepsize is set when the plugin is started")]),e._v(" "),t("li",[t("strong",[e._v("COMPort [integer]:")]),e._v(" COM Port of FABI.")])])])}),[],!1,null,null,null);t.default=r.exports},727:function(e,t,o){e.exports=o.p+"assets/img/fabi.d2820cd0.png"}}]); \ No newline at end of file diff --git a/assets/js/206.1d09c36d.js b/assets/js/206.1b860eed.js similarity index 95% rename from assets/js/206.1d09c36d.js rename to assets/js/206.1b860eed.js index 58ac92785b..928fc45b76 100644 --- a/assets/js/206.1d09c36d.js +++ b/assets/js/206.1b860eed.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[206],{1189:function(t,e,v){"use strict";v.r(e);var _=v(2),r=Object(_.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"fs20commandinterpreter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fs20commandinterpreter"}},[t._v("#")]),t._v(" FS20CommandInterpreter")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Home Control)")]),t._v(" "),e("p",[t._v("The FS20CommandInterpreter receives strings containing commands of the home automation system FS20 for ELV Electronics. Depending on the received commands, events will be fired.")]),t._v(" "),e("p",[e("img",{attrs:{src:v(753),alt:"FS20 Command Interpreter Plugin",title:"FS20 Command Interpreter Plugin"}})]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("command [string]:")]),t._v(" The command string containing the FS20 Command. The data must have the following format: housecode_sendaddress_command, e.g. 11111111_3343_17")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("p",[t._v("Each received command triggers an event, being mapped to this command. The following table will describe this events:")]),t._v(" "),e("p",[t._v("Command Mapping")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Event")]),t._v(" "),e("th",[t._v("Command")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Off")]),t._v(" "),e("td",[t._v("0")])]),t._v(" "),e("tr",[e("td",[t._v("Level1")]),t._v(" "),e("td",[t._v("1")])]),t._v(" "),e("tr",[e("td",[t._v("Level2")]),t._v(" "),e("td",[t._v("2")])]),t._v(" "),e("tr",[e("td",[t._v("Level3")]),t._v(" "),e("td",[t._v("3")])]),t._v(" "),e("tr",[e("td",[t._v("Level4")]),t._v(" "),e("td",[t._v("4")])]),t._v(" "),e("tr",[e("td",[t._v("Level5")]),t._v(" "),e("td",[t._v("5")])]),t._v(" "),e("tr",[e("td",[t._v("Level6")]),t._v(" "),e("td",[t._v("6")])]),t._v(" "),e("tr",[e("td",[t._v("Level7")]),t._v(" "),e("td",[t._v("7")])]),t._v(" "),e("tr",[e("td",[t._v("Level8")]),t._v(" "),e("td",[t._v("8")])]),t._v(" "),e("tr",[e("td",[t._v("Level9")]),t._v(" "),e("td",[t._v("9")])]),t._v(" "),e("tr",[e("td",[t._v("Level10")]),t._v(" "),e("td",[t._v("10")])]),t._v(" "),e("tr",[e("td",[t._v("Level11")]),t._v(" "),e("td",[t._v("11")])]),t._v(" "),e("tr",[e("td",[t._v("Level12")]),t._v(" "),e("td",[t._v("12")])]),t._v(" "),e("tr",[e("td",[t._v("Level13")]),t._v(" "),e("td",[t._v("13")])]),t._v(" "),e("tr",[e("td",[t._v("Level14")]),t._v(" "),e("td",[t._v("14")])]),t._v(" "),e("tr",[e("td",[t._v("Level15")]),t._v(" "),e("td",[t._v("15")])]),t._v(" "),e("tr",[e("td",[t._v("Level16")]),t._v(" "),e("td",[t._v("16")])]),t._v(" "),e("tr",[e("td",[t._v("OnOldLevel")]),t._v(" "),e("td",[t._v("17")])]),t._v(" "),e("tr",[e("td",[t._v("Toggle")]),t._v(" "),e("td",[t._v("18")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up")]),t._v(" "),e("td",[t._v("19")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Down")]),t._v(" "),e("td",[t._v("20")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up and Down")]),t._v(" "),e("td",[t._v("21")])]),t._v(" "),e("tr",[e("td",[t._v("Program internal timer")]),t._v(" "),e("td",[t._v("22")])]),t._v(" "),e("tr",[e("td",[t._v("Off for timer then old brightness level")]),t._v(" "),e("td",[t._v("24")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then off")]),t._v(" "),e("td",[t._v("25")])]),t._v(" "),e("tr",[e("td",[t._v("On old brightness level for timer then off")]),t._v(" "),e("td",[t._v("26")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then old brightness level")]),t._v(" "),e("td",[t._v("30")])]),t._v(" "),e("tr",[e("td",[t._v("On for old level then previous state")]),t._v(" "),e("td",[t._v("31")])])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("housecode [integer]")]),t._v(" The housecode, the plugin should react on. The housecode has 8 digits, each from 1 to 4.")]),t._v(" "),e("li",[e("strong",[t._v("sendaddress [integer]")]),t._v(" The sendaddress, the plugin should react on. The sendaddress has 4 digits, each from 1 to 4.")])])])}),[],!1,null,null,null);e.default=r.exports},753:function(t,e,v){t.exports=v.p+"assets/img/fs20command.da8b3973.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[206],{1162:function(t,e,v){"use strict";v.r(e);var _=v(2),r=Object(_.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"fs20commandinterpreter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fs20commandinterpreter"}},[t._v("#")]),t._v(" FS20CommandInterpreter")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Home Control)")]),t._v(" "),e("p",[t._v("The FS20CommandInterpreter receives strings containing commands of the home automation system FS20 for ELV Electronics. Depending on the received commands, events will be fired.")]),t._v(" "),e("p",[e("img",{attrs:{src:v(725),alt:"FS20 Command Interpreter Plugin",title:"FS20 Command Interpreter Plugin"}})]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("command [string]:")]),t._v(" The command string containing the FS20 Command. The data must have the following format: housecode_sendaddress_command, e.g. 11111111_3343_17")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("p",[t._v("Each received command triggers an event, being mapped to this command. The following table will describe this events:")]),t._v(" "),e("p",[t._v("Command Mapping")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Event")]),t._v(" "),e("th",[t._v("Command")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("Off")]),t._v(" "),e("td",[t._v("0")])]),t._v(" "),e("tr",[e("td",[t._v("Level1")]),t._v(" "),e("td",[t._v("1")])]),t._v(" "),e("tr",[e("td",[t._v("Level2")]),t._v(" "),e("td",[t._v("2")])]),t._v(" "),e("tr",[e("td",[t._v("Level3")]),t._v(" "),e("td",[t._v("3")])]),t._v(" "),e("tr",[e("td",[t._v("Level4")]),t._v(" "),e("td",[t._v("4")])]),t._v(" "),e("tr",[e("td",[t._v("Level5")]),t._v(" "),e("td",[t._v("5")])]),t._v(" "),e("tr",[e("td",[t._v("Level6")]),t._v(" "),e("td",[t._v("6")])]),t._v(" "),e("tr",[e("td",[t._v("Level7")]),t._v(" "),e("td",[t._v("7")])]),t._v(" "),e("tr",[e("td",[t._v("Level8")]),t._v(" "),e("td",[t._v("8")])]),t._v(" "),e("tr",[e("td",[t._v("Level9")]),t._v(" "),e("td",[t._v("9")])]),t._v(" "),e("tr",[e("td",[t._v("Level10")]),t._v(" "),e("td",[t._v("10")])]),t._v(" "),e("tr",[e("td",[t._v("Level11")]),t._v(" "),e("td",[t._v("11")])]),t._v(" "),e("tr",[e("td",[t._v("Level12")]),t._v(" "),e("td",[t._v("12")])]),t._v(" "),e("tr",[e("td",[t._v("Level13")]),t._v(" "),e("td",[t._v("13")])]),t._v(" "),e("tr",[e("td",[t._v("Level14")]),t._v(" "),e("td",[t._v("14")])]),t._v(" "),e("tr",[e("td",[t._v("Level15")]),t._v(" "),e("td",[t._v("15")])]),t._v(" "),e("tr",[e("td",[t._v("Level16")]),t._v(" "),e("td",[t._v("16")])]),t._v(" "),e("tr",[e("td",[t._v("OnOldLevel")]),t._v(" "),e("td",[t._v("17")])]),t._v(" "),e("tr",[e("td",[t._v("Toggle")]),t._v(" "),e("td",[t._v("18")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up")]),t._v(" "),e("td",[t._v("19")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Down")]),t._v(" "),e("td",[t._v("20")])]),t._v(" "),e("tr",[e("td",[t._v("Dim Up and Down")]),t._v(" "),e("td",[t._v("21")])]),t._v(" "),e("tr",[e("td",[t._v("Program internal timer")]),t._v(" "),e("td",[t._v("22")])]),t._v(" "),e("tr",[e("td",[t._v("Off for timer then old brightness level")]),t._v(" "),e("td",[t._v("24")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then off")]),t._v(" "),e("td",[t._v("25")])]),t._v(" "),e("tr",[e("td",[t._v("On old brightness level for timer then off")]),t._v(" "),e("td",[t._v("26")])]),t._v(" "),e("tr",[e("td",[t._v("On for timer then old brightness level")]),t._v(" "),e("td",[t._v("30")])]),t._v(" "),e("tr",[e("td",[t._v("On for old level then previous state")]),t._v(" "),e("td",[t._v("31")])])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("housecode [integer]")]),t._v(" The housecode, the plugin should react on. The housecode has 8 digits, each from 1 to 4.")]),t._v(" "),e("li",[e("strong",[t._v("sendaddress [integer]")]),t._v(" The sendaddress, the plugin should react on. The sendaddress has 4 digits, each from 1 to 4.")])])])}),[],!1,null,null,null);e.default=r.exports},725:function(t,e,v){t.exports=v.p+"assets/img/fs20command.da8b3973.jpg"}}]); \ No newline at end of file diff --git a/assets/js/207.4a71e790.js b/assets/js/207.31dcba08.js similarity index 93% rename from assets/js/207.4a71e790.js rename to assets/js/207.31dcba08.js index 8a5b06036a..d96d5bf5a2 100644 --- a/assets/js/207.4a71e790.js +++ b/assets/js/207.31dcba08.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[207],{1159:function(t,e,r){"use strict";r.r(e);var o=r(2),i=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"filter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#filter"}},[t._v("#")]),t._v(" Filter")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This plugin implements a FIR Filter")]),t._v(" "),e("p",[e("img",{attrs:{src:r(722),alt:"Screenshot: Filter plugin",title:"Screenshot: Filter plugin"}})]),t._v(" "),e("p",[t._v("Filter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Input [double]:")]),t._v(" The signal to be filtered.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Output [double]:")]),t._v(" The filtered signal.")]),t._v(" "),e("li",[e("strong",[t._v("SignalPower [double]:")]),t._v(" Signal Power on the band pass.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("Order [integer]:")]),t._v(" Order of the filter. It is recommended to use orders around the sampling rate.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("CutoffFreq1 [double]:")]),t._v(" Cutoff frequecy for low and high pass filter types. In case of band pass filters it is the low cutoff frequency of the band.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("CutoffFreq2 [double]:")]),t._v(" In case of band pass filters it is the high cutoff frequency of the band.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("SamplingRate [integer]:")]),t._v(" Sampling rate of the input signal.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("Type [integer]:")]),t._v(" Type of filter (low, high or band pass filter).")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("SignalPowerUpdateRate [integer]:")]),t._v(" Update ratio for the SignalPower output port. The SignalPower output port provides a new value every time the Output port has provided N values, where N is the value of this property.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("SignalPowerBufferSize [integer]:")]),t._v(" Length of the buffer that keeps the filtered signal that is used to compute the power of the signal.")])])])])}),[],!1,null,null,null);e.default=i.exports},722:function(t,e,r){t.exports=r.p+"assets/img/filter.9099ebe7.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[207],{1174:function(t,e,r){"use strict";r.r(e);var o=r(2),i=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"filter"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#filter"}},[t._v("#")]),t._v(" Filter")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This plugin implements a FIR Filter")]),t._v(" "),e("p",[e("img",{attrs:{src:r(737),alt:"Screenshot: Filter plugin",title:"Screenshot: Filter plugin"}})]),t._v(" "),e("p",[t._v("Filter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Input [double]:")]),t._v(" The signal to be filtered.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Output [double]:")]),t._v(" The filtered signal.")]),t._v(" "),e("li",[e("strong",[t._v("SignalPower [double]:")]),t._v(" Signal Power on the band pass.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("Order [integer]:")]),t._v(" Order of the filter. It is recommended to use orders around the sampling rate.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("CutoffFreq1 [double]:")]),t._v(" Cutoff frequecy for low and high pass filter types. In case of band pass filters it is the low cutoff frequency of the band.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("CutoffFreq2 [double]:")]),t._v(" In case of band pass filters it is the high cutoff frequency of the band.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("SamplingRate [integer]:")]),t._v(" Sampling rate of the input signal.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("Type [integer]:")]),t._v(" Type of filter (low, high or band pass filter).")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("SignalPowerUpdateRate [integer]:")]),t._v(" Update ratio for the SignalPower output port. The SignalPower output port provides a new value every time the Output port has provided N values, where N is the value of this property.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("SignalPowerBufferSize [integer]:")]),t._v(" Length of the buffer that keeps the filtered signal that is used to compute the power of the signal.")])])])])}),[],!1,null,null,null);e.default=i.exports},737:function(t,e,r){t.exports=r.p+"assets/img/filter.9099ebe7.jpg"}}]); \ No newline at end of file diff --git a/assets/js/208.b52ae166.js b/assets/js/208.81817169.js similarity index 94% rename from assets/js/208.b52ae166.js rename to assets/js/208.81817169.js index c9d5247c01..56b4a7315e 100644 --- a/assets/js/208.b52ae166.js +++ b/assets/js/208.81817169.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[208],{1163:function(e,t,s){"use strict";s.r(t);var r=s(2),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"hrvanalysis"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hrvanalysis"}},[e._v("#")]),e._v(" HRVAnalysis")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This component calculates various Heart Rate Variability (HRV) parameters from an incoming signal of raw ECG-data. For a detailed description of the HRV parameters and a guide how to use optical and electrical heart rate sensors see the work of Andreas Schreiber (in /documentation/DIYGuides/HRVAnalysis_Schreiber.pdf and /documentation/OpticalPulseSensor_Schreiber.pdf)")]),e._v(" "),t("p",[t("img",{attrs:{src:s(726),alt:"Screenshot: HRVAnalysis plugin",title:"Screenshot: HRVAnalysis plugin"}})]),e._v(" "),t("p",[e._v("HRVAnalysis plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("HRVInput [double]:")]),e._v(" Input port for the raw signal")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("runtime [double]:")]),e._v(" the current time, since the first sample, in seconds")]),e._v(" "),t("li",[t("strong",[e._v("pulserate [double]:")]),e._v(" the current calculated pulserate")]),e._v(" "),t("li",[t("strong",[e._v("SDNN [double]:")]),e._v(" the standard deviation of all RR-intervals")]),e._v(" "),t("li",[t("strong",[e._v("rMSSD [double]:")]),e._v(" the square-root of the average sum of the quadratic differences between neighboring RR-intervals")]),e._v(" "),t("li",[t("strong",[e._v("SDSD [double]:")]),e._v(" the current standard deviation of successive differences between neighbouring RR-intervals")]),e._v(" "),t("li",[t("strong",[e._v("pNN50 [double]:")]),e._v(" the numer of successive RR-intervales that differ by more than 50ms (expressed as percentage of all RR-intervals)")]),e._v(" "),t("li",[t("strong",[e._v("pNN20 [double]:")]),e._v(" the numer of successive RR-intervales that differ by more than 20ms (expressed as percentage of all RR-intervals)")]),e._v(" "),t("li",[t("strong",[e._v("DD [double]:")]),e._v(" the deviation of 2 succesive RR-intervals")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" An incoming event starts the HRV analysis")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("samplerate [double]:")]),e._v(" specifies the sample rate of the incoming signal.")]),e._v(" "),t("li",[t("strong",[e._v("outlierRange [double]:")]),e._v(" Defines factor of the mean R-amplitudes which is used as a threshold to detect spikes / signal artefacts.")])])])}),[],!1,null,null,null);t.default=a.exports},726:function(e,t,s){e.exports=s.p+"assets/img/hrvanalysis.4919a786.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[208],{1161:function(e,t,s){"use strict";s.r(t);var r=s(2),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"hrvanalysis"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hrvanalysis"}},[e._v("#")]),e._v(" HRVAnalysis")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This component calculates various Heart Rate Variability (HRV) parameters from an incoming signal of raw ECG-data. For a detailed description of the HRV parameters and a guide how to use optical and electrical heart rate sensors see the work of Andreas Schreiber (in /documentation/DIYGuides/HRVAnalysis_Schreiber.pdf and /documentation/OpticalPulseSensor_Schreiber.pdf)")]),e._v(" "),t("p",[t("img",{attrs:{src:s(724),alt:"Screenshot: HRVAnalysis plugin",title:"Screenshot: HRVAnalysis plugin"}})]),e._v(" "),t("p",[e._v("HRVAnalysis plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("HRVInput [double]:")]),e._v(" Input port for the raw signal")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("runtime [double]:")]),e._v(" the current time, since the first sample, in seconds")]),e._v(" "),t("li",[t("strong",[e._v("pulserate [double]:")]),e._v(" the current calculated pulserate")]),e._v(" "),t("li",[t("strong",[e._v("SDNN [double]:")]),e._v(" the standard deviation of all RR-intervals")]),e._v(" "),t("li",[t("strong",[e._v("rMSSD [double]:")]),e._v(" the square-root of the average sum of the quadratic differences between neighboring RR-intervals")]),e._v(" "),t("li",[t("strong",[e._v("SDSD [double]:")]),e._v(" the current standard deviation of successive differences between neighbouring RR-intervals")]),e._v(" "),t("li",[t("strong",[e._v("pNN50 [double]:")]),e._v(" the numer of successive RR-intervales that differ by more than 50ms (expressed as percentage of all RR-intervals)")]),e._v(" "),t("li",[t("strong",[e._v("pNN20 [double]:")]),e._v(" the numer of successive RR-intervales that differ by more than 20ms (expressed as percentage of all RR-intervals)")]),e._v(" "),t("li",[t("strong",[e._v("DD [double]:")]),e._v(" the deviation of 2 succesive RR-intervals")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" An incoming event starts the HRV analysis")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("samplerate [double]:")]),e._v(" specifies the sample rate of the incoming signal.")]),e._v(" "),t("li",[t("strong",[e._v("outlierRange [double]:")]),e._v(" Defines factor of the mean R-amplitudes which is used as a threshold to detect spikes / signal artefacts.")])])])}),[],!1,null,null,null);t.default=a.exports},724:function(e,t,s){e.exports=s.p+"assets/img/hrvanalysis.4919a786.jpg"}}]); \ No newline at end of file diff --git a/assets/js/209.64b3a0a3.js b/assets/js/209.62118cc6.js similarity index 93% rename from assets/js/209.64b3a0a3.js rename to assets/js/209.62118cc6.js index bd1a930527..898e6b41af 100644 --- a/assets/js/209.64b3a0a3.js +++ b/assets/js/209.62118cc6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[209],{1164:function(e,t,r){"use strict";r.r(t);var s=r(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"iirfilter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#iirfilter"}},[e._v("#")]),e._v(" IIRFilter")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This plugin provides adjustable Infinite Impulse Response Filters, based on the Java DSP Library: "),t("a",{attrs:{href:"http://www.source-code.biz/dsp/java/",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://www.source-code.biz/dsp/java"),t("OutboundLink")],1)]),e._v(" "),t("p",[t("img",{attrs:{src:r(727),alt:"Screenshot: IIRFilter plugin",title:"Screenshot: IIRFilter plugin"}})]),e._v(" "),t("p",[e._v("IIRFilter plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in [double]:")]),e._v(" The signal to be filtered")])]),e._v(" "),t("h2",{attrs:{id:"input-port-description-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description-2"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("out [double]:")]),e._v(" The filtered signal")]),e._v(" "),t("li",[t("strong",[e._v("magnitude [double]:")]),e._v(" the magnitude of the filtered signal in the selected passband (only calculated if the passType = bandpass !)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("passType [integer] (combobox selection):")]),e._v(" can be lowpass, highpass, bandpass or bandstop")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("characteristicType [integer] (combobox selection):")]),e._v(" can be butterworth, bessel or chebyshev")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("order [integer]:")]),e._v(" the filter order (values from 1 to 12 recommended)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("samplingFrequency [integer]:")]),e._v(" the sampling rate of the input signal")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("fc1 [double]:")]),e._v(" corner frequency (lower corner frequency for bandpass filter)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("fc2 [double]:")]),e._v(" higher corner frequency (ignored in case of highpass or lowpass types)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("ripple [double]:")]),e._v(" the passband ripple supression, must be a negative value (only for chebyshev types, ignored for other types)")])])])])}),[],!1,null,null,null);t.default=i.exports},727:function(e,t,r){e.exports=r.p+"assets/img/iirfilter.4bf8743f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[209],{1169:function(e,t,r){"use strict";r.r(t);var s=r(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"iirfilter"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#iirfilter"}},[e._v("#")]),e._v(" IIRFilter")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("This plugin provides adjustable Infinite Impulse Response Filters, based on the Java DSP Library: "),t("a",{attrs:{href:"http://www.source-code.biz/dsp/java/",target:"_blank",rel:"noopener noreferrer"}},[e._v("http://www.source-code.biz/dsp/java"),t("OutboundLink")],1)]),e._v(" "),t("p",[t("img",{attrs:{src:r(731),alt:"Screenshot: IIRFilter plugin",title:"Screenshot: IIRFilter plugin"}})]),e._v(" "),t("p",[e._v("IIRFilter plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in [double]:")]),e._v(" The signal to be filtered")])]),e._v(" "),t("h2",{attrs:{id:"input-port-description-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description-2"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("out [double]:")]),e._v(" The filtered signal")]),e._v(" "),t("li",[t("strong",[e._v("magnitude [double]:")]),e._v(" the magnitude of the filtered signal in the selected passband (only calculated if the passType = bandpass !)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("passType [integer] (combobox selection):")]),e._v(" can be lowpass, highpass, bandpass or bandstop")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("characteristicType [integer] (combobox selection):")]),e._v(" can be butterworth, bessel or chebyshev")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("order [integer]:")]),e._v(" the filter order (values from 1 to 12 recommended)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("samplingFrequency [integer]:")]),e._v(" the sampling rate of the input signal")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("fc1 [double]:")]),e._v(" corner frequency (lower corner frequency for bandpass filter)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("fc2 [double]:")]),e._v(" higher corner frequency (ignored in case of highpass or lowpass types)")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("ripple [double]:")]),e._v(" the passband ripple supression, must be a negative value (only for chebyshev types, ignored for other types)")])])])])}),[],!1,null,null,null);t.default=i.exports},731:function(e,t,r){e.exports=r.p+"assets/img/iirfilter.4bf8743f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/21.c9029408.js b/assets/js/21.5b240941.js similarity index 99% rename from assets/js/21.c9029408.js rename to assets/js/21.5b240941.js index 4539fc1e76..704043bedc 100644 --- a/assets/js/21.c9029408.js +++ b/assets/js/21.5b240941.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{1053:function(e,s,n){"use strict";n.r(s);var t=n(2),r=Object(t.a)({},(function(){var e=this,s=e._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"users"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#users"}},[e._v("#")]),e._v(" Users")]),e._v(" "),s("p",[s("strong",[e._v("Video on YouTube:")]),e._v(" "),s("a",{attrs:{href:"https://www.youtube.com/watch?v=CoRUQJJnYaY&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=16&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Offline and online users"),s("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),s("p",[e._v("This chapter is about offline and online users, their differences and how to add or register them.")]),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),s("p",[e._v("In AsTeRICS Grid a user in general holds a set of grids which realize a specific solution for this user. A user doesn’t necessarily have to be a real person, it’s also possible to create a “user” for a specific usecase, for instance a specific smart home control interface.")]),e._v(" "),s("h3",{attrs:{id:"internet-connection-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#internet-connection-requirements"}},[e._v("#")]),e._v(" Internet connection requirements")]),e._v(" "),s("p",[e._v("Despite being a web-application that runs in an internet browser, AsTeRICS Grid is designed to be usable also without internet connection.")]),e._v(" "),s("p",[s("strong",[e._v("Internet connection is required for:")])]),e._v(" "),s("ol",[s("li",[e._v("First usage of AsTeRICS Grid. Initially opening "),s("a",{attrs:{href:"https://grid.asterics.eu/",target:"_blank"}},[e._v("https://grid.asterics.eu/")]),e._v(" automatically downloads the whole application to browser cache and therefore AsTeRICS Grid is usable offline afterwards.")]),e._v(" "),s("li",[e._v("Synchronizing configuration of online users")])]),e._v(" "),s("p",[s("strong",[e._v("Without internet access it is possible to:")])]),e._v(" "),s("ol",[s("li",[e._v("Use AsTeRICS Grid by just re-opening "),s("a",{attrs:{href:"https://grid.asterics.eu/",target:"_blank"}},[e._v("https://grid.asterics.eu/")]),e._v(" in the browser (only initial access needs internet access).")]),e._v(" "),s("li",[e._v("switch between all saved users, which can be both offline and online users")])]),e._v(" "),s("h2",{attrs:{id:"online-users"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#online-users"}},[e._v("#")]),e._v(" Online users")]),e._v(" "),s("p",[e._v("Online users are users whose configuration is automatically synchronized with a cloud storage. Therefore it’s possible to this user to log in on different devices while the configuration is always up-to-date on each device.")]),e._v(" "),s("p",[e._v("In view “add online user” it’s possible to register a new online user, Figure 6:")]),e._v(" "),s("p",[s("img",{attrs:{src:n(546),alt:"add online user view"}}),e._v(" "),s("em",[e._v("Fig. 6: Add online user view - register")])]),e._v(" "),s("p",[e._v("The following information is important for registering an online user:")]),e._v(" "),s("ul",[s("li",[e._v("The only data that is needed are a "),s("strong",[e._v("username")]),e._v(" and a "),s("strong",[e._v("password")]),e._v(". The username is needed for uniquely identifying a user and the password for securing his account and encrypting the data.")]),e._v(" "),s("li",[e._v("If you want to "),s("strong",[e._v("use AsTeRICS Grid completely anonymously")]),e._v(" just use a username without any relation to your person.")]),e._v(" "),s("li",[e._v("Since all data is "),s("strong",[e._v("end-to-end encrypted")]),e._v(" only the user itself can ever see his data and configuration, no server admin or anyone else.")]),e._v(" "),s("li",[e._v("End-to-end encryption is great for privacy, however it has the drawback that the "),s("strong",[e._v("data is lost")]),e._v(", if you logout your online account on all devices and forget your password. In this case there is "),s("strong",[e._v("no possibility of password recovery")]),e._v(", so "),s("strong",[e._v("remember your password carefully")]),e._v(". It’s also recommended to "),s("strong",[e._v("do backups")]),e._v(" of your grids (see "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("Manage grids view")]),e._v(").")],1),e._v(" "),s("li",[e._v('Usernames must start lowercase, valid characters are [a-z], [0-9] and ["-", “_”], valid length is 3-50 characters.')])]),e._v(" "),s("h3",{attrs:{id:"synchronization-states"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#synchronization-states"}},[e._v("#")]),e._v(" Synchronization states")]),e._v(" "),s("p",[e._v("Online users can have the following synchronization states which are shown at the bottom of the navigation bar:")]),e._v(" "),s("p",[s("img",{attrs:{src:n(547),alt:"online user - synchronizing symbol"}}),e._v(" "),s("strong",[e._v("Synchronizing")]),e._v(": configuration is currently synchronizing with the cloud")]),e._v(" "),s("p",[s("img",{attrs:{src:n(548),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Synchronized")]),e._v(": configuration is up-to-date with the cloud storage")]),e._v(" "),s("p",[s("img",{attrs:{src:n(549),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Synchronization failed")]),e._v(": synchronization not possible, no internet connection")]),e._v(" "),s("p",[s("img",{attrs:{src:n(550),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Synchronization paused")]),e._v(": synchronization paused for a short time and will be resumed shortly")]),e._v(" "),s("p",[s("img",{attrs:{src:n(551),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Online only")]),e._v(": user is logged in online-only, meaning that configuration is not saved on the current device. Changes still will be saved in the cloud and therefore also be synchronized to other devices where this user is logged in. Users will be logged in online-only if the “remember checkbox” is unchecked when logging in (see "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#change-user---view"}},[e._v("change user view")]),e._v(").")],1),e._v(" "),s("h2",{attrs:{id:"offline-users"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#offline-users"}},[e._v("#")]),e._v(" Offline users")]),e._v(" "),s("p",[e._v("Offline users are users whose configuration is only saved offline in the storage of the currently used browser. This type of users are perfectly suited for use cases where AsTeRICS Grid is only used on a single device.")]),e._v(" "),s("p",[e._v("In view “add offline user” it’s possible to add a new offline user (see "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#user"}},[e._v("Terms")]),e._v("), Figure 7:")],1),e._v(" "),s("p",[s("img",{attrs:{src:n(552),alt:"add offline user view"}}),e._v(" "),s("em",[e._v("Fig. 7: Add offline user view")])]),e._v(" "),s("p",[e._v("The following information is important regarding offline users:")]),e._v(" "),s("ul",[s("li",[e._v("All "),s("strong",[e._v("data of an offline user never leaves the device")]),e._v(", it’s stored in a browser-internal database.")]),e._v(" "),s("li",[e._v('Usernames must start lowercase, valid characters are [a-z], [0-9] and ["-", “_”], valid length is 3-50 characters.')])]),e._v(" "),s("h2",{attrs:{id:"backup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#backup"}},[e._v("#")]),e._v(" Backup")]),e._v(" "),s("p",[e._v("Regardless which type of users are used, we "),s("strong",[e._v("highly recommend to do backups")]),e._v(" if you are using AsTeRICS Grid on a regular basis and have put some effort into customizing own grids for your use-case. See "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("manage grids view")]),e._v(" for instructions how to create and restore backups.")],1),e._v(" "),s("p",[e._v("This is why backups are important:")]),e._v(" "),s("ol",[s("li",[s("strong",[e._v("Offline users")]),e._v(": since all data is only stored in an browser-internal storage, any browser crash or failure of your device could cause data loss.")]),e._v(" "),s("li",[s("strong",[e._v("Online users")]),e._v(": Although online users are not susceptible to device or browser errors, data loss is still possible because of the encryption of the user data. If the user forgets his password or decryption fails because of any kind of programming error the data cannot be recovered. Backups as described in "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("manage grids view")]),e._v(" are saved to an unencrypted file and therefore can recover the user data in such a case.")],1)]),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html"}},[e._v("← Previous Chapter")]),e._v(" "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/07_dictionaries.html"}},[e._v("Next Chapter →")])],1),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);s.default=r.exports},546:function(e,s,n){e.exports=n.p+"assets/img/register_online_en.1f0b88fe.jpg"},547:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAeAC8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U65Xxr4yPh1Ut7ZVe8kXdluQi+uO5re1bVINFsZbu5bbGg6Dqx7Ae9eKeKfECatqFzqU4W1hC5O5+EVR1J/DNdeHpe0ldrRHnY3EexhaL95mgvjrXFm837exP90ou38sYrsNM+J9k9gGv0eO6BwUhXIb/aGTx9M18heINK+IvxV16afw34507w34OVB9kvNIVbua6Jzksx4XHtXK6F8cda+Cnj7/AIQz4qa9Y6vaXURl0/XrUYcsDjypYlXIYkj2HHau2cKUtHGy7nkUauIjdxnzPtqz9ENJ1qz1y18+zl8xAcMMYKn0Iq9XkHw38TWemXTyTzOltdRrsbadvqCw6jg+nevXlYOoZSGUjII6GvPrUvZSstj28LiPrFO736nF/FSOVtFtmXPlLN8+PocH/PrXh3j/AMJt468H6noI1GfShfReS11bAF1U9cZ9Rx+NfUF5aQ39tJb3EYlhkGGVu9cRc/CeB5maDUJIoz0R4g5H45FdGHrQjFwmcWMwtWpUVWlqfnb8ILrTP2OdZ8Q6D4t0vVUt7mbzbTXrOOae3u4e25AMK6jqQPb69/4b0HwT+0Z48bxTN4Dv7JNLljltNevE8j7cw/hKdWA9xivsuT4PxTLtk1EOvXDWwI/9Cpy/CJI1Crqe1R0At8D/ANCrWNSkvd5tPQ55UMTJufJ7z63R54OOB0r2bwG8snhWxMpJOGC5/uhiB+lYln8KbaKdWub57iIcmNY9mfxya7iGFLeFIo1CRoAqqvQAdBWeJrQqRUYm+BwlWjNzqaH/2Q=="},548:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAhAC8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6yfEHiS08OWoluCWd+I4k+8x/oPetOWVII2kkZUjUZZmOAB6143421qPW9dklgkMtuihIzggcdevvmuihS9rOz2OLF4j6vT5lv0OhX4sSedltOXyf7olO788f0rsdM8TadqlgLtLhIo87WEzBSreh5rw6vO7b49eE7/AOLh+HNncXF9r8cDzTPbQmS3gZeTHI4PyvjnkYHQkMQK9CeGpNqK0bPFo47EK8pe8l+B9kK6yKGUhlIyGByDTq84+FuqOtxdWMkw8oqHjRm53Z52j6fyr0evNq0/ZS5T3sPWWIpqaVjjPijdyw6JBEhISaXDkdwBkD8/5V5Hqlm+o6Zd2kd1NYyTwvEt1b48yEspAdcgjcM5GQRkV79r2iw+INNktJjtz8yOBkqw6GvMrn4c63DMyRwR3CDpIkqgH8CQa7MNOHI4SdjycfRqyqqpBXR+fN5r3x/+HF5P8HLRZPEN9qrsdG8YTM5eO0z+9ZnOcFdwyWO5M4G7KGvo74C/APRfgX4ZNran+0NdvMSalrEo/e3MnUgE8hAScL+JySTXuf8Awr7Xv+fEf9/k/wDiqP8AhX2vf8+I/wC/yf8AxVdVN04auV3tfy7f59zjqqvUXKqbS3dk9X3/AOB0OdVijBlJVgcgjqK9r8H6lLq3h20uJzumIKs397BIz+leeWfw31m4nVJoktY+8jSK2PwBNepaXpsWkafBZw58uJcAnqe5P4mubFVISikndnZl9GrTm5SVkW6KKK8w98KKKKACiiigD//Z"},549:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAfAC4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U65Xxd44j8OuLaCNZ7wjcQx+VB2z6n2rd1bVrbRbJ7q6fZGvAA5LH0A9a8U1rUP7W1a6uwGCzSFlDdQOw/KuvD0faSvLZHm47EuhC0H7zOjtvihqsc26aK3miJ5TaVOPY5/nmu0tfHejXFpDNJdrbtJ1ifJZT6HH86+LdP8A2t/BcV34xsvEZuPCWpeGpXWWx1QBZrmIHCSQqPvFsjCjJ+ZTyDmu7+EPxIHxY8CWHidNGvdDhvC5itr4De0YYhZBjqrDBB/mME9vsaNZJw7X07P+vU8pYrFYe/tNemvf+vkfWkM8dzEssUiyxsMq6HIP0NSV598L9Yhjt57Ca5VZGk3QxMcE5HOP04r0GvMq0/ZzcT3sPWVempnnPxYeXzdOT/ljtcj/AHuP6V5/XufiDQbfxFYm2uMqQdySL1RvWuCk+FWorIwju7Vk7MxZSfwwf5134etCMOWTsePjsLVnV9pBXTPz9+JX7NfxC/aM8beJfE+vR6f4RfSgbPw9YvHHP9sWN9yvO4zlG56g43fdwDu+mPg7qnivVvh9pkvjTRItA8QxqYZ7WF1ZDsO0SAKSFDAZ2gnFez/8Kr1X/n5s/wDvt/8A4mj/AIVXqv8Az82f/fb/APxNa0p0aStGW/59/V/d5HPWp4mskpQ228l29PxONVijBlJVgcgjqK930O5kvNGsZ5v9bJCjMfUkDmuH0v4VzLdK2oXURgU5KQZJb2yQMV6JGixoqIoVFGAo6Aelc2Kqwmko6nfl+Hq0nKU1ZM//2Q=="},550:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAeACoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6878eeNLm3vX06wlMAj4lmT7xb0B7YrqPFniZPDNgsmwS3Eh2xRnp7k+wr5w+NGuXtv8N/HGr287W2ox6Te3Mc8J2tHIIXZWX0IIBH0rrowsnVkrpJnmYus7xoU3aUmvlc7W21/UrSbzor64WTOSfMJB+oPX8a7S1+KypaQi4smluekjIwVT7j/AAr8k/2ffiz421LwR8YJbzxdrl7LZ+GnuLaS61CWVoJA4AeMsxKNgnkYP5V61/wTx8eeJfGNx44i1/xBqmuJbpaNCNSvJLjyyxlDbd5OM4GcegruXs68lFx6c34tfoeby18LCc4z+FpffZ/qfqLoutW2vWK3VqxKE7SrDDKfQ1frynwD4qttBeW2ulZY7hwfOB4Q9OR6e9eqghgCORXnVqfspWWx7GFxCxFNNvXqee/Fezlb7DdAEwqGjPoCcEfnz+VeM/ErQbrxR8O/FGjWIQ3uoaXdWkAkbapkkiZVyewyRX1HdWkN9bvBcRrLC4wyMMg1y0nwv0eSRmV7qMH+FZBgfmpNbU60PZOlP+rnJiMLUlXVelvpv5H5ZfA79lH4leF/B/xRs9Y0WHTrrWdCbT7CJ76GQzSlt3VHYKOMZYjqPfHpf7DfwJ8afBxvF1x4v0tNJOoC2S3iF1FMzbPMLE+WzAD5x1OevFfoB/wq3Sf+e95/32v/AMTR/wAKt0n/AJ73n/fa/wDxNbU61GnJSTeit8rt/qY1KGKqxlBpWk7v5WX6I8qr23R7W9j0ixR32usCAq3UHaOKp6X8P9J0u6WcLLcSKcr57AhT64AH610tZV8Qp2UUaYXAyp3dR29Gf//Z"},551:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAgACsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U64vxZ8Qho909nYxJNcJxJJJnap9MDqa6DXvENp4dtRNcsSW4SNOWY+1fO/jvxU/hnw/qutiym1S4hRpI7OAgSXEhPyoCeBknqenJrroU1K857I8zGYiVO1Ok/eZ6Vp/xR1CGYfa4YbiEnnYNrD6Hp+ldvF400WQQ/6fGhlAIVuNuezdgfrX54SfGX4xzfELwnZ/8I5b22i3lpH/AGmUiVlt55wSnJfcRCGj3Y+8RJ6rt9u+EPjnVfHnhGO817RH8Pa7C5gvLEuHQOP44yCco3UZ5HI5xk9vsKdXZWt+mh5qxWIw6vJqSdvxPrtWDqGUhlIyCOhpa474b6xDcaKlk9yrXUTNtiJ+bZ1GPXv0rsa8upB05OLPfo1VWpqa6nlPxQeVvEKK/wDq1hXZ+Zz+teCftF/DmP4ofCjVdHezvNQeMpdx2en3SW807RnIRXdHUEjOAV5OBkda+tvFHhW38TWyq7GG4j/1cwGcexHcVxDfCvU9xxdWhHbLMP8A2Wu6FSnOj7ObseNiMPXjiPbU1f8ArY/LK60vwdqPxs8C3U/h7xRbXt1bWF2ssmqQRxWy2kaxyiVDa7sxG2kDjcMlD93IA+ov2S/h/b+GfDeu+I4tH1fQZPE159s+xaxdJNKEBYq+1Yo9gbe2FbJxg55r6kf4PXklwlw7ae08YKpK24soOMgHbkZwPyFTf8Kr1X/n5s/++3/+JranOlBuTld6/i0/0RjWhiKsVBQaWn4X/wAzkrO6lsrqKeFiksbBlYeor36Ni0akjBIyRXB+H/hmbO8S41GeOYRtuWGLJVj7kgce2K76uXFVI1GlHod2X0KlFSc9Ln//2Q=="},552:function(e,s,n){e.exports=n.p+"assets/img/add_offline_en.3ac438a3.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{1054:function(e,s,n){"use strict";n.r(s);var t=n(2),r=Object(t.a)({},(function(){var e=this,s=e._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"users"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#users"}},[e._v("#")]),e._v(" Users")]),e._v(" "),s("p",[s("strong",[e._v("Video on YouTube:")]),e._v(" "),s("a",{attrs:{href:"https://www.youtube.com/watch?v=CoRUQJJnYaY&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=16&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Offline and online users"),s("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),s("p",[e._v("This chapter is about offline and online users, their differences and how to add or register them.")]),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),s("p",[e._v("In AsTeRICS Grid a user in general holds a set of grids which realize a specific solution for this user. A user doesn’t necessarily have to be a real person, it’s also possible to create a “user” for a specific usecase, for instance a specific smart home control interface.")]),e._v(" "),s("h3",{attrs:{id:"internet-connection-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#internet-connection-requirements"}},[e._v("#")]),e._v(" Internet connection requirements")]),e._v(" "),s("p",[e._v("Despite being a web-application that runs in an internet browser, AsTeRICS Grid is designed to be usable also without internet connection.")]),e._v(" "),s("p",[s("strong",[e._v("Internet connection is required for:")])]),e._v(" "),s("ol",[s("li",[e._v("First usage of AsTeRICS Grid. Initially opening "),s("a",{attrs:{href:"https://grid.asterics.eu/",target:"_blank"}},[e._v("https://grid.asterics.eu/")]),e._v(" automatically downloads the whole application to browser cache and therefore AsTeRICS Grid is usable offline afterwards.")]),e._v(" "),s("li",[e._v("Synchronizing configuration of online users")])]),e._v(" "),s("p",[s("strong",[e._v("Without internet access it is possible to:")])]),e._v(" "),s("ol",[s("li",[e._v("Use AsTeRICS Grid by just re-opening "),s("a",{attrs:{href:"https://grid.asterics.eu/",target:"_blank"}},[e._v("https://grid.asterics.eu/")]),e._v(" in the browser (only initial access needs internet access).")]),e._v(" "),s("li",[e._v("switch between all saved users, which can be both offline and online users")])]),e._v(" "),s("h2",{attrs:{id:"online-users"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#online-users"}},[e._v("#")]),e._v(" Online users")]),e._v(" "),s("p",[e._v("Online users are users whose configuration is automatically synchronized with a cloud storage. Therefore it’s possible to this user to log in on different devices while the configuration is always up-to-date on each device.")]),e._v(" "),s("p",[e._v("In view “add online user” it’s possible to register a new online user, Figure 6:")]),e._v(" "),s("p",[s("img",{attrs:{src:n(546),alt:"add online user view"}}),e._v(" "),s("em",[e._v("Fig. 6: Add online user view - register")])]),e._v(" "),s("p",[e._v("The following information is important for registering an online user:")]),e._v(" "),s("ul",[s("li",[e._v("The only data that is needed are a "),s("strong",[e._v("username")]),e._v(" and a "),s("strong",[e._v("password")]),e._v(". The username is needed for uniquely identifying a user and the password for securing his account and encrypting the data.")]),e._v(" "),s("li",[e._v("If you want to "),s("strong",[e._v("use AsTeRICS Grid completely anonymously")]),e._v(" just use a username without any relation to your person.")]),e._v(" "),s("li",[e._v("Since all data is "),s("strong",[e._v("end-to-end encrypted")]),e._v(" only the user itself can ever see his data and configuration, no server admin or anyone else.")]),e._v(" "),s("li",[e._v("End-to-end encryption is great for privacy, however it has the drawback that the "),s("strong",[e._v("data is lost")]),e._v(", if you logout your online account on all devices and forget your password. In this case there is "),s("strong",[e._v("no possibility of password recovery")]),e._v(", so "),s("strong",[e._v("remember your password carefully")]),e._v(". It’s also recommended to "),s("strong",[e._v("do backups")]),e._v(" of your grids (see "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("Manage grids view")]),e._v(").")],1),e._v(" "),s("li",[e._v('Usernames must start lowercase, valid characters are [a-z], [0-9] and ["-", “_”], valid length is 3-50 characters.')])]),e._v(" "),s("h3",{attrs:{id:"synchronization-states"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#synchronization-states"}},[e._v("#")]),e._v(" Synchronization states")]),e._v(" "),s("p",[e._v("Online users can have the following synchronization states which are shown at the bottom of the navigation bar:")]),e._v(" "),s("p",[s("img",{attrs:{src:n(547),alt:"online user - synchronizing symbol"}}),e._v(" "),s("strong",[e._v("Synchronizing")]),e._v(": configuration is currently synchronizing with the cloud")]),e._v(" "),s("p",[s("img",{attrs:{src:n(548),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Synchronized")]),e._v(": configuration is up-to-date with the cloud storage")]),e._v(" "),s("p",[s("img",{attrs:{src:n(549),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Synchronization failed")]),e._v(": synchronization not possible, no internet connection")]),e._v(" "),s("p",[s("img",{attrs:{src:n(550),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Synchronization paused")]),e._v(": synchronization paused for a short time and will be resumed shortly")]),e._v(" "),s("p",[s("img",{attrs:{src:n(551),alt:"online user - synchronized symbol"}}),e._v(" "),s("strong",[e._v("Online only")]),e._v(": user is logged in online-only, meaning that configuration is not saved on the current device. Changes still will be saved in the cloud and therefore also be synchronized to other devices where this user is logged in. Users will be logged in online-only if the “remember checkbox” is unchecked when logging in (see "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#change-user---view"}},[e._v("change user view")]),e._v(").")],1),e._v(" "),s("h2",{attrs:{id:"offline-users"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#offline-users"}},[e._v("#")]),e._v(" Offline users")]),e._v(" "),s("p",[e._v("Offline users are users whose configuration is only saved offline in the storage of the currently used browser. This type of users are perfectly suited for use cases where AsTeRICS Grid is only used on a single device.")]),e._v(" "),s("p",[e._v("In view “add offline user” it’s possible to add a new offline user (see "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#user"}},[e._v("Terms")]),e._v("), Figure 7:")],1),e._v(" "),s("p",[s("img",{attrs:{src:n(552),alt:"add offline user view"}}),e._v(" "),s("em",[e._v("Fig. 7: Add offline user view")])]),e._v(" "),s("p",[e._v("The following information is important regarding offline users:")]),e._v(" "),s("ul",[s("li",[e._v("All "),s("strong",[e._v("data of an offline user never leaves the device")]),e._v(", it’s stored in a browser-internal database.")]),e._v(" "),s("li",[e._v('Usernames must start lowercase, valid characters are [a-z], [0-9] and ["-", “_”], valid length is 3-50 characters.')])]),e._v(" "),s("h2",{attrs:{id:"backup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#backup"}},[e._v("#")]),e._v(" Backup")]),e._v(" "),s("p",[e._v("Regardless which type of users are used, we "),s("strong",[e._v("highly recommend to do backups")]),e._v(" if you are using AsTeRICS Grid on a regular basis and have put some effort into customizing own grids for your use-case. See "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("manage grids view")]),e._v(" for instructions how to create and restore backups.")],1),e._v(" "),s("p",[e._v("This is why backups are important:")]),e._v(" "),s("ol",[s("li",[s("strong",[e._v("Offline users")]),e._v(": since all data is only stored in an browser-internal storage, any browser crash or failure of your device could cause data loss.")]),e._v(" "),s("li",[s("strong",[e._v("Online users")]),e._v(": Although online users are not susceptible to device or browser errors, data loss is still possible because of the encryption of the user data. If the user forgets his password or decryption fails because of any kind of programming error the data cannot be recovered. Backups as described in "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#manage-grids---view"}},[e._v("manage grids view")]),e._v(" are saved to an unencrypted file and therefore can recover the user data in such a case.")],1)]),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/manuals/asterics-grid/05_actions.html"}},[e._v("← Previous Chapter")]),e._v(" "),s("RouterLink",{attrs:{to:"/manuals/asterics-grid/07_dictionaries.html"}},[e._v("Next Chapter →")])],1),e._v(" "),s("p",[s("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);s.default=r.exports},546:function(e,s,n){e.exports=n.p+"assets/img/register_online_en.1f0b88fe.jpg"},547:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAeAC8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U65Xxr4yPh1Ut7ZVe8kXdluQi+uO5re1bVINFsZbu5bbGg6Dqx7Ae9eKeKfECatqFzqU4W1hC5O5+EVR1J/DNdeHpe0ldrRHnY3EexhaL95mgvjrXFm837exP90ou38sYrsNM+J9k9gGv0eO6BwUhXIb/aGTx9M18heINK+IvxV16afw34507w34OVB9kvNIVbua6Jzksx4XHtXK6F8cda+Cnj7/AIQz4qa9Y6vaXURl0/XrUYcsDjypYlXIYkj2HHau2cKUtHGy7nkUauIjdxnzPtqz9ENJ1qz1y18+zl8xAcMMYKn0Iq9XkHw38TWemXTyTzOltdRrsbadvqCw6jg+nevXlYOoZSGUjII6GvPrUvZSstj28LiPrFO736nF/FSOVtFtmXPlLN8+PocH/PrXh3j/AMJt468H6noI1GfShfReS11bAF1U9cZ9Rx+NfUF5aQ39tJb3EYlhkGGVu9cRc/CeB5maDUJIoz0R4g5H45FdGHrQjFwmcWMwtWpUVWlqfnb8ILrTP2OdZ8Q6D4t0vVUt7mbzbTXrOOae3u4e25AMK6jqQPb69/4b0HwT+0Z48bxTN4Dv7JNLljltNevE8j7cw/hKdWA9xivsuT4PxTLtk1EOvXDWwI/9Cpy/CJI1Crqe1R0At8D/ANCrWNSkvd5tPQ55UMTJufJ7z63R54OOB0r2bwG8snhWxMpJOGC5/uhiB+lYln8KbaKdWub57iIcmNY9mfxya7iGFLeFIo1CRoAqqvQAdBWeJrQqRUYm+BwlWjNzqaH/2Q=="},548:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAhAC8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6yfEHiS08OWoluCWd+I4k+8x/oPetOWVII2kkZUjUZZmOAB6143421qPW9dklgkMtuihIzggcdevvmuihS9rOz2OLF4j6vT5lv0OhX4sSedltOXyf7olO788f0rsdM8TadqlgLtLhIo87WEzBSreh5rw6vO7b49eE7/AOLh+HNncXF9r8cDzTPbQmS3gZeTHI4PyvjnkYHQkMQK9CeGpNqK0bPFo47EK8pe8l+B9kK6yKGUhlIyGByDTq84+FuqOtxdWMkw8oqHjRm53Z52j6fyr0evNq0/ZS5T3sPWWIpqaVjjPijdyw6JBEhISaXDkdwBkD8/5V5Hqlm+o6Zd2kd1NYyTwvEt1b48yEspAdcgjcM5GQRkV79r2iw+INNktJjtz8yOBkqw6GvMrn4c63DMyRwR3CDpIkqgH8CQa7MNOHI4SdjycfRqyqqpBXR+fN5r3x/+HF5P8HLRZPEN9qrsdG8YTM5eO0z+9ZnOcFdwyWO5M4G7KGvo74C/APRfgX4ZNran+0NdvMSalrEo/e3MnUgE8hAScL+JySTXuf8Awr7Xv+fEf9/k/wDiqP8AhX2vf8+I/wC/yf8AxVdVN04auV3tfy7f59zjqqvUXKqbS3dk9X3/AOB0OdVijBlJVgcgjqK9r8H6lLq3h20uJzumIKs397BIz+leeWfw31m4nVJoktY+8jSK2PwBNepaXpsWkafBZw58uJcAnqe5P4mubFVISikndnZl9GrTm5SVkW6KKK8w98KKKKACiiigD//Z"},549:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAfAC4DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U65Xxd44j8OuLaCNZ7wjcQx+VB2z6n2rd1bVrbRbJ7q6fZGvAA5LH0A9a8U1rUP7W1a6uwGCzSFlDdQOw/KuvD0faSvLZHm47EuhC0H7zOjtvihqsc26aK3miJ5TaVOPY5/nmu0tfHejXFpDNJdrbtJ1ifJZT6HH86+LdP8A2t/BcV34xsvEZuPCWpeGpXWWx1QBZrmIHCSQqPvFsjCjJ+ZTyDmu7+EPxIHxY8CWHidNGvdDhvC5itr4De0YYhZBjqrDBB/mME9vsaNZJw7X07P+vU8pYrFYe/tNemvf+vkfWkM8dzEssUiyxsMq6HIP0NSV598L9Yhjt57Ca5VZGk3QxMcE5HOP04r0GvMq0/ZzcT3sPWVempnnPxYeXzdOT/ljtcj/AHuP6V5/XufiDQbfxFYm2uMqQdySL1RvWuCk+FWorIwju7Vk7MxZSfwwf5134etCMOWTsePjsLVnV9pBXTPz9+JX7NfxC/aM8beJfE+vR6f4RfSgbPw9YvHHP9sWN9yvO4zlG56g43fdwDu+mPg7qnivVvh9pkvjTRItA8QxqYZ7WF1ZDsO0SAKSFDAZ2gnFez/8Kr1X/n5s/wDvt/8A4mj/AIVXqv8Az82f/fb/APxNa0p0aStGW/59/V/d5HPWp4mskpQ228l29PxONVijBlJVgcgjqK930O5kvNGsZ5v9bJCjMfUkDmuH0v4VzLdK2oXURgU5KQZJb2yQMV6JGixoqIoVFGAo6Aelc2Kqwmko6nfl+Hq0nKU1ZM//2Q=="},550:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAeACoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6878eeNLm3vX06wlMAj4lmT7xb0B7YrqPFniZPDNgsmwS3Eh2xRnp7k+wr5w+NGuXtv8N/HGr287W2ox6Te3Mc8J2tHIIXZWX0IIBH0rrowsnVkrpJnmYus7xoU3aUmvlc7W21/UrSbzor64WTOSfMJB+oPX8a7S1+KypaQi4smluekjIwVT7j/AAr8k/2ffiz421LwR8YJbzxdrl7LZ+GnuLaS61CWVoJA4AeMsxKNgnkYP5V61/wTx8eeJfGNx44i1/xBqmuJbpaNCNSvJLjyyxlDbd5OM4GcegruXs68lFx6c34tfoeby18LCc4z+FpffZ/qfqLoutW2vWK3VqxKE7SrDDKfQ1frynwD4qttBeW2ulZY7hwfOB4Q9OR6e9eqghgCORXnVqfspWWx7GFxCxFNNvXqee/Fezlb7DdAEwqGjPoCcEfnz+VeM/ErQbrxR8O/FGjWIQ3uoaXdWkAkbapkkiZVyewyRX1HdWkN9bvBcRrLC4wyMMg1y0nwv0eSRmV7qMH+FZBgfmpNbU60PZOlP+rnJiMLUlXVelvpv5H5ZfA79lH4leF/B/xRs9Y0WHTrrWdCbT7CJ76GQzSlt3VHYKOMZYjqPfHpf7DfwJ8afBxvF1x4v0tNJOoC2S3iF1FMzbPMLE+WzAD5x1OevFfoB/wq3Sf+e95/32v/AMTR/wAKt0n/AJ73n/fa/wDxNbU61GnJSTeit8rt/qY1KGKqxlBpWk7v5WX6I8qr23R7W9j0ixR32usCAq3UHaOKp6X8P9J0u6WcLLcSKcr57AhT64AH610tZV8Qp2UUaYXAyp3dR29Gf//Z"},551:function(e,s){e.exports="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAgACsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U64vxZ8Qho909nYxJNcJxJJJnap9MDqa6DXvENp4dtRNcsSW4SNOWY+1fO/jvxU/hnw/qutiym1S4hRpI7OAgSXEhPyoCeBknqenJrroU1K857I8zGYiVO1Ok/eZ6Vp/xR1CGYfa4YbiEnnYNrD6Hp+ldvF400WQQ/6fGhlAIVuNuezdgfrX54SfGX4xzfELwnZ/8I5b22i3lpH/AGmUiVlt55wSnJfcRCGj3Y+8RJ6rt9u+EPjnVfHnhGO817RH8Pa7C5gvLEuHQOP44yCco3UZ5HI5xk9vsKdXZWt+mh5qxWIw6vJqSdvxPrtWDqGUhlIyCOhpa474b6xDcaKlk9yrXUTNtiJ+bZ1GPXv0rsa8upB05OLPfo1VWpqa6nlPxQeVvEKK/wDq1hXZ+Zz+teCftF/DmP4ofCjVdHezvNQeMpdx2en3SW807RnIRXdHUEjOAV5OBkda+tvFHhW38TWyq7GG4j/1cwGcexHcVxDfCvU9xxdWhHbLMP8A2Wu6FSnOj7ObseNiMPXjiPbU1f8ArY/LK60vwdqPxs8C3U/h7xRbXt1bWF2ssmqQRxWy2kaxyiVDa7sxG2kDjcMlD93IA+ov2S/h/b+GfDeu+I4tH1fQZPE159s+xaxdJNKEBYq+1Yo9gbe2FbJxg55r6kf4PXklwlw7ae08YKpK24soOMgHbkZwPyFTf8Kr1X/n5s/++3/+JranOlBuTld6/i0/0RjWhiKsVBQaWn4X/wAzkrO6lsrqKeFiksbBlYeor36Ni0akjBIyRXB+H/hmbO8S41GeOYRtuWGLJVj7kgce2K76uXFVI1GlHod2X0KlFSc9Ln//2Q=="},552:function(e,s,n){e.exports=n.p+"assets/img/add_offline_en.3ac438a3.jpg"}}]); \ No newline at end of file diff --git a/assets/js/211.99a2d336.js b/assets/js/211.2c4ec3ea.js similarity index 93% rename from assets/js/211.99a2d336.js rename to assets/js/211.2c4ec3ea.js index 1fa7e7896b..2ad1e41c88 100644 --- a/assets/js/211.99a2d336.js +++ b/assets/js/211.2c4ec3ea.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[211],{1168:function(t,e,i){"use strict";i.r(e);var r=i(2),o=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"integrate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#integrate"}},[t._v("#")]),t._v(" Integrate")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The integrate component performs successive addition of incoming signal values. This is useful for transforming relative movement information coming from a sensor into absolute position values.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(730),alt:"Screenshot: Integrate plugin",title:"Screenshot: Integrate plugin"}})]),t._v(" "),e("p",[t._v("Integrate plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" The input port for signal values.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" Output of the integrated values.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("reset:")]),t._v(" An incoming event at this port sets the current accumulator value to the rest value (specified in the rest property field).")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("resetValue [double]:")]),t._v(" The initial value of the accumulator, which is set when starting the model or when an event comes in at the elp_rest event listener port.")]),t._v(" "),e("li",[e("strong",[t._v("upperLimit [double]:")]),t._v(" The maximum accumulator value (the integration sum will stay at this value and not get higher even if positive values come in at the input port).")]),t._v(" "),e("li",[e("strong",[t._v("lowerLimit [double]:")]),t._v(" The minimum accumulator value (the integration sum will stay at this value and not get lower even if negative values come in at the input port) Upper and lower limit are useful e.g. to set bounds for mouse movement etc.")]),t._v(" "),e("li",[e("strong",[t._v("wrapAround [boolean]:")]),t._v(" If this property is set to true, the accumulator value is set to the lower_limit if it gets greater than the upper_limit (overflow), and to the upper_limit if it would get lower than the lower_limit (underflow).")])])])}),[],!1,null,null,null);e.default=o.exports},730:function(t,e,i){t.exports=i.p+"assets/img/integrate.dfb8529f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[211],{1163:function(t,e,i){"use strict";i.r(e);var r=i(2),o=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"integrate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#integrate"}},[t._v("#")]),t._v(" Integrate")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The integrate component performs successive addition of incoming signal values. This is useful for transforming relative movement information coming from a sensor into absolute position values.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(726),alt:"Screenshot: Integrate plugin",title:"Screenshot: Integrate plugin"}})]),t._v(" "),e("p",[t._v("Integrate plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" The input port for signal values.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" Output of the integrated values.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("reset:")]),t._v(" An incoming event at this port sets the current accumulator value to the rest value (specified in the rest property field).")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("resetValue [double]:")]),t._v(" The initial value of the accumulator, which is set when starting the model or when an event comes in at the elp_rest event listener port.")]),t._v(" "),e("li",[e("strong",[t._v("upperLimit [double]:")]),t._v(" The maximum accumulator value (the integration sum will stay at this value and not get higher even if positive values come in at the input port).")]),t._v(" "),e("li",[e("strong",[t._v("lowerLimit [double]:")]),t._v(" The minimum accumulator value (the integration sum will stay at this value and not get lower even if negative values come in at the input port) Upper and lower limit are useful e.g. to set bounds for mouse movement etc.")]),t._v(" "),e("li",[e("strong",[t._v("wrapAround [boolean]:")]),t._v(" If this property is set to true, the accumulator value is set to the lower_limit if it gets greater than the upper_limit (overflow), and to the upper_limit if it would get lower than the lower_limit (underflow).")])])])}),[],!1,null,null,null);e.default=o.exports},726:function(t,e,i){t.exports=i.p+"assets/img/integrate.dfb8529f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/213.a02ae857.js b/assets/js/213.042b5734.js similarity index 92% rename from assets/js/213.a02ae857.js rename to assets/js/213.042b5734.js index 8e7680e59a..69d89254bc 100644 --- a/assets/js/213.a02ae857.js +++ b/assets/js/213.042b5734.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[213],{1169:function(t,e,r){"use strict";r.r(e);var s=r(2),a=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The math evaluator is a component with four inputs. These inputs can be combined in a mathematical expression which is entered via a property of the component. The expression parser used is "),e("a",{attrs:{href:"http://sourceforge.net/projects/jeplite/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JEPlite2"),e("OutboundLink")],1),t._v(" which supports arithmetic as well as numerous mathematical expressions.")]),t._v(" "),e("p",[t._v("The list of supported mathematical functions is sin(), cos(), tan(), asin(), ,acos(), atan(), sqrt(), log(), ln(), angle(), abs(), mod(), sum(), rand(), umin(), add().")]),t._v(" "),e("p",[e("img",{attrs:{src:r(731),alt:"Screenshot: MathEvaluator plugin",title:"Screenshot: MathEvaluator plugin"}})]),t._v(" "),e("p",[t._v("MathEvaluator plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The component depends on the JEPlite library which is included in the component’s JAR file.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inA to inD [double]:")]),t._v(" The inputs which can be accessed in the mathematical expression via a to d. "),e("strong",[t._v("These 4 input ports support synchronization")])])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" the result of the expression.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("expression [string]:")]),t._v(" Mathematical expression to be evaluated.")])])])}),[],!1,null,null,null);e.default=a.exports},731:function(t,e,r){t.exports=r.p+"assets/img/mathevaluator.adcd03a1.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[213],{1167:function(t,e,r){"use strict";r.r(e);var s=r(2),a=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("The math evaluator is a component with four inputs. These inputs can be combined in a mathematical expression which is entered via a property of the component. The expression parser used is "),e("a",{attrs:{href:"http://sourceforge.net/projects/jeplite/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JEPlite2"),e("OutboundLink")],1),t._v(" which supports arithmetic as well as numerous mathematical expressions.")]),t._v(" "),e("p",[t._v("The list of supported mathematical functions is sin(), cos(), tan(), asin(), ,acos(), atan(), sqrt(), log(), ln(), angle(), abs(), mod(), sum(), rand(), umin(), add().")]),t._v(" "),e("p",[e("img",{attrs:{src:r(730),alt:"Screenshot: MathEvaluator plugin",title:"Screenshot: MathEvaluator plugin"}})]),t._v(" "),e("p",[t._v("MathEvaluator plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The component depends on the JEPlite library which is included in the component’s JAR file.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inA to inD [double]:")]),t._v(" The inputs which can be accessed in the mathematical expression via a to d. "),e("strong",[t._v("These 4 input ports support synchronization")])])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [double]:")]),t._v(" the result of the expression.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("expression [string]:")]),t._v(" Mathematical expression to be evaluated.")])])])}),[],!1,null,null,null);e.default=a.exports},730:function(t,e,r){t.exports=r.p+"assets/img/mathevaluator.adcd03a1.jpg"}}]); \ No newline at end of file diff --git a/assets/js/214.69ed2088.js b/assets/js/214.c90e5ec0.js similarity index 92% rename from assets/js/214.69ed2088.js rename to assets/js/214.c90e5ec0.js index cb5abd8671..c3ae84725b 100644 --- a/assets/js/214.69ed2088.js +++ b/assets/js/214.c90e5ec0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[214],{1170:function(t,e,i){"use strict";i.r(e);var n=i(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"minmax"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#minmax"}},[t._v("#")]),t._v(" MinMax")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component stores maximum and minimum of an incoming signal and provides these values at the output ports. Together with the signaltranslation component, the minmax component can be used to auto-scale input values to a desired signal range.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(732),alt:"Screenshot: MinMax plugin",title:"Screenshot: MinMax plugin"}})]),t._v(" "),e("p",[t._v("MinMax plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" Input signal for min/max calculation.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outMax [double]:")]),t._v(" The current maximum value found in the signal.")]),t._v(" "),e("li",[e("strong",[t._v("outMin [double]:")]),t._v(" The current minimum value found in the signal.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("reset:")]),t._v(" An incoming event sets the current minimum and maximum to the values defined in the associated property fields defaultMin and defaultMax.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("defaultMin [double]:")]),t._v(" This is the default minimum value which is set when the model is started or if an event comes in at the rest event listener port.")]),t._v(" "),e("li",[e("strong",[t._v("defaultMax [double]:")]),t._v(" This is the default maximum value which is set when the model is started or if an event comes in at the reset event listener port.")])])])}),[],!1,null,null,null);e.default=s.exports},732:function(t,e,i){t.exports=i.p+"assets/img/minmax.cca23fa8.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[214],{1172:function(t,e,i){"use strict";i.r(e);var n=i(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"minmax"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#minmax"}},[t._v("#")]),t._v(" MinMax")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component stores maximum and minimum of an incoming signal and provides these values at the output ports. Together with the signaltranslation component, the minmax component can be used to auto-scale input values to a desired signal range.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(735),alt:"Screenshot: MinMax plugin",title:"Screenshot: MinMax plugin"}})]),t._v(" "),e("p",[t._v("MinMax plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" Input signal for min/max calculation.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outMax [double]:")]),t._v(" The current maximum value found in the signal.")]),t._v(" "),e("li",[e("strong",[t._v("outMin [double]:")]),t._v(" The current minimum value found in the signal.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("reset:")]),t._v(" An incoming event sets the current minimum and maximum to the values defined in the associated property fields defaultMin and defaultMax.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("defaultMin [double]:")]),t._v(" This is the default minimum value which is set when the model is started or if an event comes in at the rest event listener port.")]),t._v(" "),e("li",[e("strong",[t._v("defaultMax [double]:")]),t._v(" This is the default maximum value which is set when the model is started or if an event comes in at the reset event listener port.")])])])}),[],!1,null,null,null);e.default=s.exports},735:function(t,e,i){t.exports=i.p+"assets/img/minmax.cca23fa8.jpg"}}]); \ No newline at end of file diff --git a/assets/js/215.c021b553.js b/assets/js/215.5d38f82f.js similarity index 87% rename from assets/js/215.c021b553.js rename to assets/js/215.5d38f82f.js index 3337b4af6a..27361aff07 100644 --- a/assets/js/215.c021b553.js +++ b/assets/js/215.5d38f82f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[215],{1173:function(t,r,o){"use strict";o.r(r);var s=o(2),u=Object(s.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"multisource"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#multisource"}},[t._v("#")]),t._v(" MultiSource")]),t._v(" "),r("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),r("p",[t._v("This plugin passes signals from up to four input ports to one output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:o(736),alt:"Screenshot: MultiSource plugin",title:"Screenshot: MultiSource plugin"}})]),t._v(" "),r("p",[t._v("MultiSource plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input1…input4 [double]:")]),t._v(" Input ports 1 to 4")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [**"),r("strong",[t._v("double*")]),t._v("*]:")]),t._v(" The output port where all input signals are routed.")])])])}),[],!1,null,null,null);r.default=u.exports},736:function(t,r,o){t.exports=o.p+"assets/img/multisource.cf759460.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[215],{1170:function(t,r,o){"use strict";o.r(r);var s=o(2),u=Object(s.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"multisource"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#multisource"}},[t._v("#")]),t._v(" MultiSource")]),t._v(" "),r("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),r("p",[t._v("This plugin passes signals from up to four input ports to one output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:o(732),alt:"Screenshot: MultiSource plugin",title:"Screenshot: MultiSource plugin"}})]),t._v(" "),r("p",[t._v("MultiSource plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input1…input4 [double]:")]),t._v(" Input ports 1 to 4")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [**"),r("strong",[t._v("double*")]),t._v("*]:")]),t._v(" The output port where all input signals are routed.")])])])}),[],!1,null,null,null);r.default=u.exports},732:function(t,r,o){t.exports=o.p+"assets/img/multisource.cf759460.jpg"}}]); \ No newline at end of file diff --git a/assets/js/216.81eeb2ac.js b/assets/js/216.168fdb29.js similarity index 87% rename from assets/js/216.81eeb2ac.js rename to assets/js/216.168fdb29.js index 59d05449b0..d336d52196 100644 --- a/assets/js/216.81eeb2ac.js +++ b/assets/js/216.168fdb29.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[216],{1172:function(t,r,s){"use strict";s.r(r);var i=s(2),o=Object(i.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"multisourcestring"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#multisourcestring"}},[t._v("#")]),t._v(" MultiSourceString")]),t._v(" "),r("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),r("p",[t._v("This plugin passes string inputs from up to four input ports to one output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:s(735),alt:"Screenshot: MultiSourceString plugin",title:"Screenshot: MultiSourceString plugin"}})]),t._v(" "),r("p",[t._v("MultiSourceString plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input1…input4 [string]:")]),t._v(" Input ports 1 to 4.")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [**"),r("strong",[t._v("string*")]),t._v("*]:")]),t._v(" Output port.")])])])}),[],!1,null,null,null);r.default=o.exports},735:function(t,r,s){t.exports=s.p+"assets/img/multisourcestring.ec5057b7.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[216],{1173:function(t,r,s){"use strict";s.r(r);var i=s(2),o=Object(i.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"multisourcestring"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#multisourcestring"}},[t._v("#")]),t._v(" MultiSourceString")]),t._v(" "),r("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),r("p",[t._v("This plugin passes string inputs from up to four input ports to one output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:s(736),alt:"Screenshot: MultiSourceString plugin",title:"Screenshot: MultiSourceString plugin"}})]),t._v(" "),r("p",[t._v("MultiSourceString plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input1…input4 [string]:")]),t._v(" Input ports 1 to 4.")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [**"),r("strong",[t._v("string*")]),t._v("*]:")]),t._v(" Output port.")])])])}),[],!1,null,null,null);r.default=o.exports},736:function(t,r,s){t.exports=s.p+"assets/img/multisourcestring.ec5057b7.jpg"}}]); \ No newline at end of file diff --git a/assets/js/217.96a966e9.js b/assets/js/217.61e110e7.js similarity index 92% rename from assets/js/217.96a966e9.js rename to assets/js/217.61e110e7.js index de9471419e..283ed547fc 100644 --- a/assets/js/217.96a966e9.js +++ b/assets/js/217.61e110e7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[217],{1174:function(t,e,r){"use strict";r.r(e);var o=r(2),a=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"neural-network-loader"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#neural-network-loader"}},[t._v("#")]),t._v(" Neural Network Loader")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This plugin uses the "),e("a",{attrs:{href:"http://www.heatonresearch.com/encog",target:"_blank",rel:"noopener noreferrer"}},[t._v("Encog framework"),e("OutboundLink")],1),t._v(" (version: 3.0.1). The plugin can load a neural network configuration stored in the Encog EG file. The neural network‘s output is calculated for the input data.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(737),alt:"Screenshot: NeuralNetworkLoader plugin",title:"Screenshot: NeuralNetworkLoader plugin"}})]),t._v(" "),e("p",[t._v("NeuralNetworkLoader plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1…input32 [double]:")]),t._v(" The Neural network inputs.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output1…output32 [**"),e("strong",[t._v("double*")]),t._v("*]:")]),t._v(" The Neural network outputs.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("filePath [string]:")]),t._v(" The EG file path.")])]),t._v(" "),e("p",[e("a",{attrs:{href:"eg_example.htm"}},[t._v("How to prepare example EG file for the Neural Network Loader plugin.")])])])}),[],!1,null,null,null);e.default=a.exports},737:function(t,e,r){t.exports=r.p+"assets/img/neuralnetworkloader.ce3e707d.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[217],{1175:function(t,e,r){"use strict";r.r(e);var o=r(2),a=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"neural-network-loader"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#neural-network-loader"}},[t._v("#")]),t._v(" Neural Network Loader")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This plugin uses the "),e("a",{attrs:{href:"http://www.heatonresearch.com/encog",target:"_blank",rel:"noopener noreferrer"}},[t._v("Encog framework"),e("OutboundLink")],1),t._v(" (version: 3.0.1). The plugin can load a neural network configuration stored in the Encog EG file. The neural network‘s output is calculated for the input data.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(738),alt:"Screenshot: NeuralNetworkLoader plugin",title:"Screenshot: NeuralNetworkLoader plugin"}})]),t._v(" "),e("p",[t._v("NeuralNetworkLoader plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1…input32 [double]:")]),t._v(" The Neural network inputs.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output1…output32 [**"),e("strong",[t._v("double*")]),t._v("*]:")]),t._v(" The Neural network outputs.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("filePath [string]:")]),t._v(" The EG file path.")])]),t._v(" "),e("p",[e("a",{attrs:{href:"eg_example.htm"}},[t._v("How to prepare example EG file for the Neural Network Loader plugin.")])])])}),[],!1,null,null,null);e.default=a.exports},738:function(t,e,r){t.exports=r.p+"assets/img/neuralnetworkloader.ce3e707d.jpg"}}]); \ No newline at end of file diff --git a/assets/js/218.64d9c21d.js b/assets/js/218.410d84f0.js similarity index 97% rename from assets/js/218.64d9c21d.js rename to assets/js/218.410d84f0.js index 201b6faa66..9a65a5f825 100644 --- a/assets/js/218.64d9c21d.js +++ b/assets/js/218.410d84f0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[218],{1176:function(t,e,n){"use strict";n.r(e);var o=n(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"nexusconnector"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nexusconnector"}},[t._v("#")]),t._v(" NexusConnector")]),t._v(" "),e("p",[t._v("Component Type: Processors (Subcategory: Web)")]),t._v(" "),e("p",[t._v("The NexusConnector component provides a bidirectional connection to a GPII Nexus instance.")]),t._v(" "),e("p",[e("img",{attrs:{src:n(740),alt:"Screenshot: NexusConnector plugin",title:"Screenshot: NexusConnector plugin"}})]),t._v(" "),e("p",[t._v("NexusConnector plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The NexusConnector component requres a running GPII Nexus instance to connect to and a peer component constructed within the Nexus for the connector to bind to. The Nexus instance is run and managed separately from this component and AsTeRICS. Please see the “Properties” section below for details on specifying the address of the Nexus instance to connect to.")]),t._v(" "),e("p",[t._v("The NexusConnector component expects the peer component within the Nexus to have a model of the following structure:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("\n\t\t{\n\t\t\tconnector: {\n\t\t\t\tinputs: {\n\t\t\t\t\tin1d: ,\n\t\t\t\t\tin2d: ,\n\t\t\t\t\tin3d: ,\n\t\t\t\t\tin4d: ,\n\t\t\t\t\tin5s: ,\n\t\t\t\t\tin6s: ,\n\t\t\t\t\tin7s: ,\n\t\t\t\t\tin8s: \n\t\t\t\t},\n\t\t\t\toutputs: {\n\t\t\t\t\tout1d: ,\n\t\t\t\t\tout2d: ,\n\t\t\t\t\tout3d: ,\n\t\t\t\t\tout4d: ,\n\t\t\t\t\tout5s: ,\n\t\t\t\t\tout6s: ,\n\t\t\t\t\tout7s: ,\n\t\t\t\t\tout8s: \n\t\t\t\t}\n\t\t\t}\n\t\t}\n")])])]),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("p",[t._v("The NexusConnector component has 8 generic input ports. Four each of type double and string. When a value on one of the inputs changes, that change is relayed to the Nexus and the model of the bound component is updated.")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in1d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in2d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in3d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in4d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in5s [string]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in6s [string]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in7s [string]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in8s [string]:")]),t._v(" Sent to the Nexus")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("p",[t._v("The NexusConnector component has 8 generic output ports. Four each of type double and string. When a value, or values, change within the “outputs” section of the peer component in the Nexus, that change is relayed to the NexusConnector and the value on the NexusConnector output ports are updated accordingly.")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out2d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out3d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out4d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out5s [string]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out6s [string]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out7s [string]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out8s [string]:")]),t._v(" Received from the Nexus")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("nexusHostname [string]:")]),t._v(" The address of the machine on which the Nexus is running")]),t._v(" "),e("li",[e("strong",[t._v("nexusPort [integer]:")]),t._v(" The port number on which the Nexus is listening")]),t._v(" "),e("li",[e("strong",[t._v("nexusComponentPath [string]:")]),t._v(" The path of the peer component to bind to within the Nexus")])])])}),[],!1,null,null,null);e.default=s.exports},740:function(t,e,n){t.exports=n.p+"assets/img/nexusconnector.2616bf6b.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[218],{1176:function(t,e,n){"use strict";n.r(e);var o=n(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"nexusconnector"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nexusconnector"}},[t._v("#")]),t._v(" NexusConnector")]),t._v(" "),e("p",[t._v("Component Type: Processors (Subcategory: Web)")]),t._v(" "),e("p",[t._v("The NexusConnector component provides a bidirectional connection to a GPII Nexus instance.")]),t._v(" "),e("p",[e("img",{attrs:{src:n(739),alt:"Screenshot: NexusConnector plugin",title:"Screenshot: NexusConnector plugin"}})]),t._v(" "),e("p",[t._v("NexusConnector plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The NexusConnector component requres a running GPII Nexus instance to connect to and a peer component constructed within the Nexus for the connector to bind to. The Nexus instance is run and managed separately from this component and AsTeRICS. Please see the “Properties” section below for details on specifying the address of the Nexus instance to connect to.")]),t._v(" "),e("p",[t._v("The NexusConnector component expects the peer component within the Nexus to have a model of the following structure:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("\n\t\t{\n\t\t\tconnector: {\n\t\t\t\tinputs: {\n\t\t\t\t\tin1d: ,\n\t\t\t\t\tin2d: ,\n\t\t\t\t\tin3d: ,\n\t\t\t\t\tin4d: ,\n\t\t\t\t\tin5s: ,\n\t\t\t\t\tin6s: ,\n\t\t\t\t\tin7s: ,\n\t\t\t\t\tin8s: \n\t\t\t\t},\n\t\t\t\toutputs: {\n\t\t\t\t\tout1d: ,\n\t\t\t\t\tout2d: ,\n\t\t\t\t\tout3d: ,\n\t\t\t\t\tout4d: ,\n\t\t\t\t\tout5s: ,\n\t\t\t\t\tout6s: ,\n\t\t\t\t\tout7s: ,\n\t\t\t\t\tout8s: \n\t\t\t\t}\n\t\t\t}\n\t\t}\n")])])]),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("p",[t._v("The NexusConnector component has 8 generic input ports. Four each of type double and string. When a value on one of the inputs changes, that change is relayed to the Nexus and the model of the bound component is updated.")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in1d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in2d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in3d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in4d [double]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in5s [string]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in6s [string]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in7s [string]:")]),t._v(" Sent to the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("in8s [string]:")]),t._v(" Sent to the Nexus")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("p",[t._v("The NexusConnector component has 8 generic output ports. Four each of type double and string. When a value, or values, change within the “outputs” section of the peer component in the Nexus, that change is relayed to the NexusConnector and the value on the NexusConnector output ports are updated accordingly.")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out2d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out3d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out4d [double]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out5s [string]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out6s [string]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out7s [string]:")]),t._v(" Received from the Nexus")]),t._v(" "),e("li",[e("strong",[t._v("out8s [string]:")]),t._v(" Received from the Nexus")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("nexusHostname [string]:")]),t._v(" The address of the machine on which the Nexus is running")]),t._v(" "),e("li",[e("strong",[t._v("nexusPort [integer]:")]),t._v(" The port number on which the Nexus is listening")]),t._v(" "),e("li",[e("strong",[t._v("nexusComponentPath [string]:")]),t._v(" The path of the peer component to bind to within the Nexus")])])])}),[],!1,null,null,null);e.default=s.exports},739:function(t,e,n){t.exports=n.p+"assets/img/nexusconnector.2616bf6b.png"}}]); \ No newline at end of file diff --git a/assets/js/219.4f5fc95d.js b/assets/js/219.08dc456b.js similarity index 96% rename from assets/js/219.4f5fc95d.js rename to assets/js/219.08dc456b.js index 84c20a25f3..713e1618b2 100644 --- a/assets/js/219.4f5fc95d.js +++ b/assets/js/219.08dc456b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[219],{1177:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"one-event-many-actions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-event-many-actions"}},[e._v("#")]),e._v(" One Event Many Actions")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component allows the user to control up to 10 actions using just one or two input events. In the first step, the event actions are scanned so that the user can choose the action, in the next step the selected action event is triggered. The detailed functionality depends upon the selected mode.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(741),alt:"Screenshot: OneEventManyActions plugin",title:"Screenshot: OneEventManyActions plugin"}})]),e._v(" "),t("p",[e._v("OneEventManyActions plugin")]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("input:")]),e._v(" The control event.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("inputOff:")]),e._v(" Control event used in mode 2 for selecting the action by scanning.")])])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("action1…action10**")]),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("* The event triggers for the actions selected by user.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("actionShown11…actionShown110**")]),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("* These events are used in the scanning process to highlight the currently selected action via a GUI element (e.g. the CellBoard).")])])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("actionsNumber [integer]:")]),e._v(" Number of action used.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("mode [integer]:")]),e._v(" The component’s working mode:")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("mode 1:")]),e._v(" The input event starts the scanning, the inputOff event selects the action.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("mode 2:")]),e._v(" The first input event starts the scanning, the second input event selects the action.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("mode 3:")]),e._v(" The first input event starts the scanning and highlights the first action, the next input events highlight the next actions. If there is no input event for the selected delay time, the currently highlighted action is selected.")])])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("delay [integer]:")]),e._v(" Delay used for the scanning process (in milliseconds).")])])])])}),[],!1,null,null,null);t.default=i.exports},741:function(e,t,n){e.exports=n.p+"assets/img/oneeventmanyactions.132f9730.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[219],{1177:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"one-event-many-actions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-event-many-actions"}},[e._v("#")]),e._v(" One Event Many Actions")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),e._v(" "),t("p",[e._v("This component allows the user to control up to 10 actions using just one or two input events. In the first step, the event actions are scanned so that the user can choose the action, in the next step the selected action event is triggered. The detailed functionality depends upon the selected mode.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(740),alt:"Screenshot: OneEventManyActions plugin",title:"Screenshot: OneEventManyActions plugin"}})]),e._v(" "),t("p",[e._v("OneEventManyActions plugin")]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("input:")]),e._v(" The control event.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("inputOff:")]),e._v(" Control event used in mode 2 for selecting the action by scanning.")])])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("action1…action10**")]),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("* The event triggers for the actions selected by user.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("actionShown11…actionShown110**")]),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("* These events are used in the scanning process to highlight the currently selected action via a GUI element (e.g. the CellBoard).")])])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("actionsNumber [integer]:")]),e._v(" Number of action used.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("mode [integer]:")]),e._v(" The component’s working mode:")]),e._v(" "),t("ul",[t("li",[t("p",[t("strong",[e._v("mode 1:")]),e._v(" The input event starts the scanning, the inputOff event selects the action.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("mode 2:")]),e._v(" The first input event starts the scanning, the second input event selects the action.")])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("mode 3:")]),e._v(" The first input event starts the scanning and highlights the first action, the next input events highlight the next actions. If there is no input event for the selected delay time, the currently highlighted action is selected.")])])])]),e._v(" "),t("li",[t("p",[t("strong",[e._v("delay [integer]:")]),e._v(" Delay used for the scanning process (in milliseconds).")])])])])}),[],!1,null,null,null);t.default=i.exports},740:function(e,t,n){e.exports=n.p+"assets/img/oneeventmanyactions.132f9730.jpg"}}]); \ No newline at end of file diff --git a/assets/js/22.6c53eda0.js b/assets/js/22.9c6170dd.js similarity index 97% rename from assets/js/22.6c53eda0.js rename to assets/js/22.9c6170dd.js index f4c13cffcd..4e23584f60 100644 --- a/assets/js/22.6c53eda0.js +++ b/assets/js/22.9c6170dd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{399:function(A,t){A.exports="data:image/png;base64,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"},400:function(A,t){A.exports="data:image/png;base64,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"},401:function(A,t,e){A.exports=e.p+"assets/img/grid-create-add-cells-02.33f7733b.png"},402:function(A,t,e){A.exports=e.p+"assets/img/grid-create-add-cells-03.848222d7.png"},403:function(A,t){A.exports="data:image/png;base64,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"},404:function(A,t){A.exports="data:image/png;base64,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"},926:function(A,t,e){"use strict";e.r(t);var i=e(2),o=Object(i.a)({},(function(){var A=this,t=A._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[t("h1",{attrs:{id:"grid-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grid-creation"}},[A._v("#")]),A._v(" Grid Creation")]),A._v(" "),t("p",[A._v("In this tutorial you will learn how to create a simple grid.")]),A._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[A._v("Note")]),A._v(" "),t("p",[A._v("In case you need more detailed information, please check the "),t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[A._v("AsTeRICS Grid user manual")])],1),A._v(".")])]),A._v(" "),t("h2",{attrs:{id:"asterics-grid-web-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-grid-web-application"}},[A._v("#")]),A._v(" AsTeRICS Grid web application")]),A._v(" "),t("p",[A._v("AsTeRICS Grid is the web application to run and manage grids for AAC.")]),A._v(" "),t("p",[A._v("If you open the link "),t("a",{attrs:{href:"https://grid.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[A._v("https://grid.asterics.eu"),t("OutboundLink")],1),A._v(", the default grid is opened in your browser and saved locally on your device in the browser cache. All modifications are also saved to your local version of the grid from now on.")]),A._v(" "),t("h2",{attrs:{id:"create-new-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-new-grid"}},[A._v("#")]),A._v(" Create New grid")]),A._v(" "),t("p",[A._v("To create a new grid do the following steps")]),A._v(" "),t("ol",[t("li",[A._v("Click on "),t("code",[A._v("Manage grids")])]),A._v(" "),t("li",[A._v("Click on "),t("code",[A._v("New Grid")])]),A._v(" "),t("li",[A._v("Enter the name of the new grid at the bottom of the page and click on the check mark button.\n"),t("img",{attrs:{src:e(399),alt:"Screenshot with textfield for new grid name"}})])]),A._v(" "),t("p",[A._v("The new grid is added to the bottom of the list of "),t("code",[A._v("Saved Grids")]),A._v(".")]),A._v(" "),t("h2",{attrs:{id:"add-cells"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-cells"}},[A._v("#")]),A._v(" Add cells")]),A._v(" "),t("p",[A._v("Now you must add cells to the newly created grid. You can do this by the following steps:")]),A._v(" "),t("ol",[t("li",[A._v("Clicking on the "),t("code",[A._v("Edit")]),A._v(" button of the new grid.")]),A._v(" "),t("li",[A._v("Click on the "),t("code",[A._v("Create new elements")]),A._v(" link.\n"),t("img",{attrs:{src:e(400),alt:"Screenshot with link to create new elements"}})]),A._v(" "),t("li",[A._v("Enter the labels of multiple cells in the textfield\n"),t("img",{attrs:{src:e(401),alt:"Screenshot with button Edit highlighted"}})]),A._v(" "),t("li",[A._v("Click on "),t("code",[A._v("Insert elements")])])]),A._v(" "),t("p",[A._v("Finally the grid should look like in the picture below.\n"),t("img",{attrs:{src:e(402),alt:"Screenshot with grid"}})]),A._v(" "),t("h2",{attrs:{id:"adapt-layout"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adapt-layout"}},[A._v("#")]),A._v(" Adapt layout")]),A._v(" "),t("p",[A._v("Now you can change the size and layout of the cells.")]),A._v(" "),t("h3",{attrs:{id:"change-size"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-size"}},[A._v("#")]),A._v(" Change size")]),A._v(" "),t("p",[A._v("To change the size of the cell, click on the right bottom corner and drag it until the target size is reached.\n"),t("img",{attrs:{src:e(403),alt:"Screenshot with grid and resizing a cell"}})]),A._v(" "),t("h3",{attrs:{id:"change-position"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-position"}},[A._v("#")]),A._v(" Change position")]),A._v(" "),t("p",[A._v("To change the position of a cell, click on it and drag it to the new target position.")]),A._v(" "),t("h3",{attrs:{id:"more-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#more-options"}},[A._v("#")]),A._v(" More options")]),A._v(" "),t("p",[A._v("There are many more options to add or delete cells or to do automatic layout. The options can be found by clicking on the "),t("code",[A._v("More")]),A._v(" button.")]),A._v(" "),t("h3",{attrs:{id:"close-edit-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#close-edit-mode"}},[A._v("#")]),A._v(" Close Edit mode")]),A._v(" "),t("p",[A._v("After you have finished all changes, you must close the edit mode for being able to use the grid. You can do this by clicking on the button "),t("code",[A._v("Back")]),A._v(" in the top menu.")]),A._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[A._v("#")]),A._v(" Conclusion")]),A._v(" "),t("p",[A._v("Now you know how to create a new grid it should look like in the picture below.")]),A._v(" "),t("p",[t("img",{attrs:{src:e(404),alt:"Screenshot with final grid having 4 cells"}})])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{400:function(A,t){A.exports="data:image/png;base64,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"},401:function(A,t){A.exports="data:image/png;base64,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"},402:function(A,t,e){A.exports=e.p+"assets/img/grid-create-add-cells-02.33f7733b.png"},403:function(A,t,e){A.exports=e.p+"assets/img/grid-create-add-cells-03.848222d7.png"},404:function(A,t){A.exports="data:image/png;base64,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"},405:function(A,t){A.exports="data:image/png;base64,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"},928:function(A,t,e){"use strict";e.r(t);var i=e(2),o=Object(i.a)({},(function(){var A=this,t=A._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[t("h1",{attrs:{id:"grid-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grid-creation"}},[A._v("#")]),A._v(" Grid Creation")]),A._v(" "),t("p",[A._v("In this tutorial you will learn how to create a simple grid.")]),A._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[A._v("Note")]),A._v(" "),t("p",[A._v("In case you need more detailed information, please check the "),t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[A._v("AsTeRICS Grid user manual")])],1),A._v(".")])]),A._v(" "),t("h2",{attrs:{id:"asterics-grid-web-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-grid-web-application"}},[A._v("#")]),A._v(" AsTeRICS Grid web application")]),A._v(" "),t("p",[A._v("AsTeRICS Grid is the web application to run and manage grids for AAC.")]),A._v(" "),t("p",[A._v("If you open the link "),t("a",{attrs:{href:"https://grid.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[A._v("https://grid.asterics.eu"),t("OutboundLink")],1),A._v(", the default grid is opened in your browser and saved locally on your device in the browser cache. All modifications are also saved to your local version of the grid from now on.")]),A._v(" "),t("h2",{attrs:{id:"create-new-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-new-grid"}},[A._v("#")]),A._v(" Create New grid")]),A._v(" "),t("p",[A._v("To create a new grid do the following steps")]),A._v(" "),t("ol",[t("li",[A._v("Click on "),t("code",[A._v("Manage grids")])]),A._v(" "),t("li",[A._v("Click on "),t("code",[A._v("New Grid")])]),A._v(" "),t("li",[A._v("Enter the name of the new grid at the bottom of the page and click on the check mark button.\n"),t("img",{attrs:{src:e(400),alt:"Screenshot with textfield for new grid name"}})])]),A._v(" "),t("p",[A._v("The new grid is added to the bottom of the list of "),t("code",[A._v("Saved Grids")]),A._v(".")]),A._v(" "),t("h2",{attrs:{id:"add-cells"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-cells"}},[A._v("#")]),A._v(" Add cells")]),A._v(" "),t("p",[A._v("Now you must add cells to the newly created grid. You can do this by the following steps:")]),A._v(" "),t("ol",[t("li",[A._v("Clicking on the "),t("code",[A._v("Edit")]),A._v(" button of the new grid.")]),A._v(" "),t("li",[A._v("Click on the "),t("code",[A._v("Create new elements")]),A._v(" link.\n"),t("img",{attrs:{src:e(401),alt:"Screenshot with link to create new elements"}})]),A._v(" "),t("li",[A._v("Enter the labels of multiple cells in the textfield\n"),t("img",{attrs:{src:e(402),alt:"Screenshot with button Edit highlighted"}})]),A._v(" "),t("li",[A._v("Click on "),t("code",[A._v("Insert elements")])])]),A._v(" "),t("p",[A._v("Finally the grid should look like in the picture below.\n"),t("img",{attrs:{src:e(403),alt:"Screenshot with grid"}})]),A._v(" "),t("h2",{attrs:{id:"adapt-layout"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adapt-layout"}},[A._v("#")]),A._v(" Adapt layout")]),A._v(" "),t("p",[A._v("Now you can change the size and layout of the cells.")]),A._v(" "),t("h3",{attrs:{id:"change-size"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-size"}},[A._v("#")]),A._v(" Change size")]),A._v(" "),t("p",[A._v("To change the size of the cell, click on the right bottom corner and drag it until the target size is reached.\n"),t("img",{attrs:{src:e(404),alt:"Screenshot with grid and resizing a cell"}})]),A._v(" "),t("h3",{attrs:{id:"change-position"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-position"}},[A._v("#")]),A._v(" Change position")]),A._v(" "),t("p",[A._v("To change the position of a cell, click on it and drag it to the new target position.")]),A._v(" "),t("h3",{attrs:{id:"more-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#more-options"}},[A._v("#")]),A._v(" More options")]),A._v(" "),t("p",[A._v("There are many more options to add or delete cells or to do automatic layout. The options can be found by clicking on the "),t("code",[A._v("More")]),A._v(" button.")]),A._v(" "),t("h3",{attrs:{id:"close-edit-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#close-edit-mode"}},[A._v("#")]),A._v(" Close Edit mode")]),A._v(" "),t("p",[A._v("After you have finished all changes, you must close the edit mode for being able to use the grid. You can do this by clicking on the button "),t("code",[A._v("Back")]),A._v(" in the top menu.")]),A._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[A._v("#")]),A._v(" Conclusion")]),A._v(" "),t("p",[A._v("Now you know how to create a new grid it should look like in the picture below.")]),A._v(" "),t("p",[t("img",{attrs:{src:e(405),alt:"Screenshot with final grid having 4 cells"}})])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/220.0fb6f473.js b/assets/js/220.8907cb8f.js similarity index 96% rename from assets/js/220.0fb6f473.js rename to assets/js/220.8907cb8f.js index f2f322a0f1..17a3667c56 100644 --- a/assets/js/220.0fb6f473.js +++ b/assets/js/220.8907cb8f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[220],{1179:function(e,t,s){"use strict";s.r(t);var r=s(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"osc-gesture-follower"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#osc-gesture-follower"}},[e._v("#")]),e._v(" Osc Gesture Follower")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("The OscGestureFollower component copules the ARE with the external gesture recognition software GestureFollower. The program is copyrighted by IRCAM. GestureFollower is stored in the ARE subfolder tools/GestureFollower. Gesture data can be stored and loaded from files in this subdirectory, these files have the extension “.mubu”. The communication between GestureFollower and the ARE is based on the OpenSoundControl (OSC) protocol. This plugin utilizes the NetUtil java library (http://www.sciss.de/netutil/) for the OSC implementation, it is ©opyrighted 2004-2011 by Hanns Holger Rutz and released under the GNU Lesser General Public License.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(743),alt:"OscGestureFollower howto",title:"OscGestureFollower howto"}})]),e._v(" "),t("p",[e._v("OscGestureFollower howto")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("The plugin requires the gfOSC_v1.exe in subfolder tools/GestureFollower, which implements the actual gesture follower algorithms.")]),e._v(" "),t("li",[e._v("Check your firewall configuration and network settings to ensure that OSC messages are not blocked.")])]),e._v(" "),t("h2",{attrs:{id:"functional-principle"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-principle"}},[e._v("#")]),e._v(" Functional Principle")]),e._v(" "),t("p",[e._v("Input data is received through CH1 to CH4 e.g. from sensors like the acceleration measurement unit. Not all inputs must be connected, but the synchronized checkboxes have to be checked correct. The events must be connected like illustrated in the picture. First the gestures must be teached in. To teach in the first gesture, send an event into the ‘learn1’ eventListener. After finishing the first gesture, send an event to ‘learn2’ to teach in the second gesture, and so on. After all gestures are teached in, send the ‘stoplearn’ event. To clear all gestures send the ‘clear’ event. To start the gesture recognition process, send the ‘follow’ event. To stop the gesture following process, send the ‘stop’ event. The ‘load’ and ‘save’ events can be used to load or store the learned gesture data into the given filename.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CH1 - CH4 [double]:")]),e._v(" The input port which receive data values. "),t("strong",[e._v("These 4 input ports support synchronization")])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("likeliest [double]:")]),e._v(" While the gesturefollower is in ‘follwing mode’ the most likeliest gesture is indicated on the likeliest output port. Before it can sample the input data and recognize a gesture, some data must be teached in.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("InPort [integer]:")]),e._v(" This value specifies the Port where OscMessages form the gesture follower are received.")]),e._v(" "),t("li",[t("strong",[e._v("OutPort [integer]:")]),e._v(" This value specifies the Port where OscMessages are send to.")]),e._v(" "),t("li",[t("strong",[e._v("filename [string]:")]),e._v(" Filename for the gesture data (load or save, .mubu file stored in the ARE subfoler tools/GestureFollower/). "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-ports"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-ports"}},[e._v("#")]),e._v(" Event Listener Ports")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("stop:")]),e._v(" this event stops the gesture following")]),e._v(" "),t("li",[t("strong",[e._v("stoplearn:")]),e._v(" this event stops the gesture learning process")]),e._v(" "),t("li",[t("strong",[e._v("learn1 - learn5:")]),e._v(" these events select gestures 1 - 5 for learning")]),e._v(" "),t("li",[t("strong",[e._v("learn1 - learn5:")]),e._v(" these events select gestures 1 - 5 for learning")]),e._v(" "),t("li",[t("strong",[e._v("clear:")]),e._v(" this event clears learned gestures")]),e._v(" "),t("li",[t("strong",[e._v("follow:")]),e._v(" this event starts the gesture recognition phase")]),e._v(" "),t("li",[t("strong",[e._v("load:")]),e._v(" this event loads gesture data from file")]),e._v(" "),t("li",[t("strong",[e._v("save:")]),e._v(" this event saves gesture data to file")])]),e._v(" "),t("h2",{attrs:{id:"referred-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#referred-plugins"}},[e._v("#")]),e._v(" Referred Plugins")]),e._v(" "),t("ul",[t("li",[e._v("OscOutClient")]),e._v(" "),t("li",[e._v("OpenVibe")]),e._v(" "),t("li",[e._v("OscServer")])])])}),[],!1,null,null,null);t.default=o.exports},743:function(e,t,s){e.exports=s.p+"assets/img/oscgesturefollower.2b835bc5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[220],{1178:function(e,t,s){"use strict";s.r(t);var r=s(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"osc-gesture-follower"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#osc-gesture-follower"}},[e._v("#")]),e._v(" Osc Gesture Follower")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),e._v(" "),t("p",[e._v("The OscGestureFollower component copules the ARE with the external gesture recognition software GestureFollower. The program is copyrighted by IRCAM. GestureFollower is stored in the ARE subfolder tools/GestureFollower. Gesture data can be stored and loaded from files in this subdirectory, these files have the extension “.mubu”. The communication between GestureFollower and the ARE is based on the OpenSoundControl (OSC) protocol. This plugin utilizes the NetUtil java library (http://www.sciss.de/netutil/) for the OSC implementation, it is ©opyrighted 2004-2011 by Hanns Holger Rutz and released under the GNU Lesser General Public License.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(741),alt:"OscGestureFollower howto",title:"OscGestureFollower howto"}})]),e._v(" "),t("p",[e._v("OscGestureFollower howto")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("The plugin requires the gfOSC_v1.exe in subfolder tools/GestureFollower, which implements the actual gesture follower algorithms.")]),e._v(" "),t("li",[e._v("Check your firewall configuration and network settings to ensure that OSC messages are not blocked.")])]),e._v(" "),t("h2",{attrs:{id:"functional-principle"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#functional-principle"}},[e._v("#")]),e._v(" Functional Principle")]),e._v(" "),t("p",[e._v("Input data is received through CH1 to CH4 e.g. from sensors like the acceleration measurement unit. Not all inputs must be connected, but the synchronized checkboxes have to be checked correct. The events must be connected like illustrated in the picture. First the gestures must be teached in. To teach in the first gesture, send an event into the ‘learn1’ eventListener. After finishing the first gesture, send an event to ‘learn2’ to teach in the second gesture, and so on. After all gestures are teached in, send the ‘stoplearn’ event. To clear all gestures send the ‘clear’ event. To start the gesture recognition process, send the ‘follow’ event. To stop the gesture following process, send the ‘stop’ event. The ‘load’ and ‘save’ events can be used to load or store the learned gesture data into the given filename.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CH1 - CH4 [double]:")]),e._v(" The input port which receive data values. "),t("strong",[e._v("These 4 input ports support synchronization")])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("likeliest [double]:")]),e._v(" While the gesturefollower is in ‘follwing mode’ the most likeliest gesture is indicated on the likeliest output port. Before it can sample the input data and recognize a gesture, some data must be teached in.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("InPort [integer]:")]),e._v(" This value specifies the Port where OscMessages form the gesture follower are received.")]),e._v(" "),t("li",[t("strong",[e._v("OutPort [integer]:")]),e._v(" This value specifies the Port where OscMessages are send to.")]),e._v(" "),t("li",[t("strong",[e._v("filename [string]:")]),e._v(" Filename for the gesture data (load or save, .mubu file stored in the ARE subfoler tools/GestureFollower/). "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-ports"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-ports"}},[e._v("#")]),e._v(" Event Listener Ports")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("stop:")]),e._v(" this event stops the gesture following")]),e._v(" "),t("li",[t("strong",[e._v("stoplearn:")]),e._v(" this event stops the gesture learning process")]),e._v(" "),t("li",[t("strong",[e._v("learn1 - learn5:")]),e._v(" these events select gestures 1 - 5 for learning")]),e._v(" "),t("li",[t("strong",[e._v("learn1 - learn5:")]),e._v(" these events select gestures 1 - 5 for learning")]),e._v(" "),t("li",[t("strong",[e._v("clear:")]),e._v(" this event clears learned gestures")]),e._v(" "),t("li",[t("strong",[e._v("follow:")]),e._v(" this event starts the gesture recognition phase")]),e._v(" "),t("li",[t("strong",[e._v("load:")]),e._v(" this event loads gesture data from file")]),e._v(" "),t("li",[t("strong",[e._v("save:")]),e._v(" this event saves gesture data to file")])]),e._v(" "),t("h2",{attrs:{id:"referred-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#referred-plugins"}},[e._v("#")]),e._v(" Referred Plugins")]),e._v(" "),t("ul",[t("li",[e._v("OscOutClient")]),e._v(" "),t("li",[e._v("OpenVibe")]),e._v(" "),t("li",[e._v("OscServer")])])])}),[],!1,null,null,null);t.default=o.exports},741:function(e,t,s){e.exports=s.p+"assets/img/oscgesturefollower.2b835bc5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/221.d0835a1c.js b/assets/js/221.405e50dc.js similarity index 99% rename from assets/js/221.d0835a1c.js rename to assets/js/221.405e50dc.js index 04bb4c1cc6..b41544821f 100644 --- a/assets/js/221.d0835a1c.js +++ b/assets/js/221.405e50dc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[221],{1178:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"oskaexternalscanning1d"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#oskaexternalscanning1d"}},[e._v("#")]),e._v(" OskaExternalScanning1D")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: OSKA)")]),e._v(" "),t("p",[e._v("This component interacts with the On Screen Keyboard Application (OSKA) and forwards key selections and command (action-) strings to other ARE plugins. The scanning function of OSKA can be controlled via this plugin, allowing 1-dimensional input values to be used for direct scanning position selection. This is done in a two-step fashion where first the columns are highlighted and then keys of a column are highlighted. Selection of columns and cells is performed upon incoming events. The event input ports allow switching from row- to column scanning, moving the cell highlighter and selecting a cell.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(742),alt:"Screenshot: OskaExternalScanning1D plugin",title:"Screenshot: OskaExternalScanning1D plugin"}})]),e._v(" "),t("p",[e._v("OskaExternalScanning1D plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v('This component requires Sensory Software’s OSKA keyboard. OSKA is automatically started by the plugin if it is located in the expected path ("…/OSKA/Start Keyboard.exe").')]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("posKey [double]:")]),e._v(" This port takes values for the selection of keys (respectively columns). Depending on the value of the property “inputRange”, the incoming values are expected to be in a range from 0 to 1 (where 0 represents the first selection and 1 the last) or they identifiy the absolute key/column position as integer values. The input moves either the highlighted column or the highlighted key in the selected column to the corresponding position. A selection of the currently highlighted item can be triggered by incoming events.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" This output sends the action strings (which have been added to a key in the OSKA editor) when this key is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("keycodes [string]:")]),e._v(" If a key is selected which contains the “@KDB: …” action string, the key codes are extracted from the action string and sent via this port, e.g. to the remoteKeyboard plugin’s corresponding input port for keyboard input emulation.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("switch:")]),e._v(" Incoming events will trigger a state change in the scanning state machine. On the first press highlighting will switch from column highlighting to cell highlighting. On the second press, the currently highlighted OSKA cell will be selected.")]),e._v(" "),t("li",[t("strong",[e._v("highlightNext:")]),e._v(" Incoming events highlight the next column (or cell in a column).")]),e._v(" "),t("li",[t("strong",[e._v("highlightPrev:")]),e._v(" Incoming events highlight the previous column (or cell in a column).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut10:")]),e._v(" These events can be triggered by selecting a cell which contains an @OSKA,event … action string, (for example @OSKA,event 3).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This property defines the TCP port that the component listens on for connections of the OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("title [string]:")]),e._v(" This property defines the caption to be displayed in OSKA?s title bar.")]),e._v(" "),t("li",[t("strong",[e._v("oskaPath [string]:")]),e._v(" The absolute path to the OSKA player as well as the program name is needed in order for the component to start OSKA by itself.")]),e._v(" "),t("li",[t("strong",[e._v("keyboardPath [string]:")]),e._v(" If this property does not hold an empty string, the component will ask OSKA to load the keyboard referred to by this property. When the ACS is synchronized with the ARE (connected and model deployed) available keyboards can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("highlightStyle [integer]:")]),e._v(" This property selects the style of highlighting used in OSKA, the value range is from 0 to 2.")]),e._v(" "),t("li",[t("strong",[e._v("settingsFile [string]:")]),e._v(" if this property is not empty OSKA will be started with this settings file as a command line parameter. When the ACS is synchronized with the ARE (connected and model deployed) available settings files can be selected from a drop-down listbox "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])]),e._v(" "),t("li",[t("strong",[e._v("windowDecorated [boolean]:")]),e._v(" if true, Oska will display a decorated window frame, otherwise only a lightweight frame.")]),e._v(" "),t("li",[t("strong",[e._v("eventScanningEnabled [boolean]:")]),e._v(" if true, incoming events can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("valueScanningEnabled [boolean]:")]),e._v(" if true, incoming values can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("inputRange [boolean] (combobox):")]),e._v(" the range of the incoming input port values: either float values between 0 and 1, or integer values or integer values from 0 to the maximum element (number of cells in a respective row or column of the grid).")]),e._v(" "),t("li",[t("strong",[e._v("resizeEnabled [boolean]:")]),e._v(" if true, the Oska will be resized to the dimensions specified in the GUI designer (slower).")])])])}),[],!1,null,null,null);t.default=o.exports},742:function(e,t,n){e.exports=n.p+"assets/img/oskaexternalscanning1d.cfe422d9.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[221],{1180:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"oskaexternalscanning1d"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#oskaexternalscanning1d"}},[e._v("#")]),e._v(" OskaExternalScanning1D")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: OSKA)")]),e._v(" "),t("p",[e._v("This component interacts with the On Screen Keyboard Application (OSKA) and forwards key selections and command (action-) strings to other ARE plugins. The scanning function of OSKA can be controlled via this plugin, allowing 1-dimensional input values to be used for direct scanning position selection. This is done in a two-step fashion where first the columns are highlighted and then keys of a column are highlighted. Selection of columns and cells is performed upon incoming events. The event input ports allow switching from row- to column scanning, moving the cell highlighter and selecting a cell.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(742),alt:"Screenshot: OskaExternalScanning1D plugin",title:"Screenshot: OskaExternalScanning1D plugin"}})]),e._v(" "),t("p",[e._v("OskaExternalScanning1D plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v('This component requires Sensory Software’s OSKA keyboard. OSKA is automatically started by the plugin if it is located in the expected path ("…/OSKA/Start Keyboard.exe").')]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("posKey [double]:")]),e._v(" This port takes values for the selection of keys (respectively columns). Depending on the value of the property “inputRange”, the incoming values are expected to be in a range from 0 to 1 (where 0 represents the first selection and 1 the last) or they identifiy the absolute key/column position as integer values. The input moves either the highlighted column or the highlighted key in the selected column to the corresponding position. A selection of the currently highlighted item can be triggered by incoming events.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" This output sends the action strings (which have been added to a key in the OSKA editor) when this key is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("keycodes [string]:")]),e._v(" If a key is selected which contains the “@KDB: …” action string, the key codes are extracted from the action string and sent via this port, e.g. to the remoteKeyboard plugin’s corresponding input port for keyboard input emulation.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("switch:")]),e._v(" Incoming events will trigger a state change in the scanning state machine. On the first press highlighting will switch from column highlighting to cell highlighting. On the second press, the currently highlighted OSKA cell will be selected.")]),e._v(" "),t("li",[t("strong",[e._v("highlightNext:")]),e._v(" Incoming events highlight the next column (or cell in a column).")]),e._v(" "),t("li",[t("strong",[e._v("highlightPrev:")]),e._v(" Incoming events highlight the previous column (or cell in a column).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut10:")]),e._v(" These events can be triggered by selecting a cell which contains an @OSKA,event … action string, (for example @OSKA,event 3).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This property defines the TCP port that the component listens on for connections of the OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("title [string]:")]),e._v(" This property defines the caption to be displayed in OSKA?s title bar.")]),e._v(" "),t("li",[t("strong",[e._v("oskaPath [string]:")]),e._v(" The absolute path to the OSKA player as well as the program name is needed in order for the component to start OSKA by itself.")]),e._v(" "),t("li",[t("strong",[e._v("keyboardPath [string]:")]),e._v(" If this property does not hold an empty string, the component will ask OSKA to load the keyboard referred to by this property. When the ACS is synchronized with the ARE (connected and model deployed) available keyboards can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("highlightStyle [integer]:")]),e._v(" This property selects the style of highlighting used in OSKA, the value range is from 0 to 2.")]),e._v(" "),t("li",[t("strong",[e._v("settingsFile [string]:")]),e._v(" if this property is not empty OSKA will be started with this settings file as a command line parameter. When the ACS is synchronized with the ARE (connected and model deployed) available settings files can be selected from a drop-down listbox "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])]),e._v(" "),t("li",[t("strong",[e._v("windowDecorated [boolean]:")]),e._v(" if true, Oska will display a decorated window frame, otherwise only a lightweight frame.")]),e._v(" "),t("li",[t("strong",[e._v("eventScanningEnabled [boolean]:")]),e._v(" if true, incoming events can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("valueScanningEnabled [boolean]:")]),e._v(" if true, incoming values can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("inputRange [boolean] (combobox):")]),e._v(" the range of the incoming input port values: either float values between 0 and 1, or integer values or integer values from 0 to the maximum element (number of cells in a respective row or column of the grid).")]),e._v(" "),t("li",[t("strong",[e._v("resizeEnabled [boolean]:")]),e._v(" if true, the Oska will be resized to the dimensions specified in the GUI designer (slower).")])])])}),[],!1,null,null,null);t.default=o.exports},742:function(e,t,n){e.exports=n.p+"assets/img/oskaexternalscanning1d.cfe422d9.jpg"}}]); \ No newline at end of file diff --git a/assets/js/222.e1c8e948.js b/assets/js/222.8ec4a0e6.js similarity index 97% rename from assets/js/222.e1c8e948.js rename to assets/js/222.8ec4a0e6.js index 9d521e19ae..2012c367bd 100644 --- a/assets/js/222.e1c8e948.js +++ b/assets/js/222.8ec4a0e6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[222],{1181:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"oska-external-scanning2d"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#oska-external-scanning2d"}},[e._v("#")]),e._v(" Oska External Scanning2D")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: OSKA)")]),e._v(" "),t("p",[e._v("This component interacts with the On Screen Keyboard Application (OSKA) and forwards key selections and command (action-) strings to other ARE plugins. The scanning function of OSKA can be controlled via this plugin, allowing 1-dimensional input values to be used for direct scanning position selection. Scanning is operated using two float inputs which take inputs in a range defined by the according property (between 0.0 and 1.0. or integer values). The two inputs control the position of the highlighted cell in a grid with values being mapped to a corresponding position in the grid. An event input allows pressing selected cells in the grid.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(745),alt:"Screenshot: OskaExternalScanning2D plugin",title:"Screenshot: OskaExternalScanning2D plugin"}})]),e._v(" "),t("p",[e._v("OskaExternalScanning2D plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v('This component requires Sensory Software’s OSKA keyboard. OSKA is automatically started by the plugin if it is located in the expected path ("…/OSKA/Start Keyboard.exe").')]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("posColumn [double]:")]),e._v(" This port takes values for the selection of the X-position (column selection). Depending on the value of the property “inputRange”, the incoming values are expected to be in a range from 0 to 1 (where 0 represents the first column and 1 the last) or they identifiy the absolute column position as integer values. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("posRow [double]:")]),e._v(" This port takes values for the selection of the Y-position (row selection). Depending on the value of the property “inputRange”, the incoming values are expected to be in a range from 0 to 1 (where 0 represents the first row and 1 the last) or they identifiy the absolute row position as integer values. "),t("strong",[e._v("This input port supports synchronization")])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" This output sends the action strings (which have been added to a key in the OSKA editor) when this key is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("keycodes [string]:")]),e._v(" If a key is selected which contains the “@KDB: …” action string, the key codes are extracted from the action string and sent via this port, e.g. to the remoteKeyboard plugin’s corresponding input port for keyboard input emulation.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("press:")]),e._v(" Incoming events will trigger a press action on the selected key in OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("highlightNextX:")]),e._v(" Incoming events will highlight the next cell in the selected row.")]),e._v(" "),t("li",[t("strong",[e._v("highlightPrevX:")]),e._v(" Incoming events will highlight the previous cell in the selected row.")]),e._v(" "),t("li",[t("strong",[e._v("highlightNextY:")]),e._v(" Incoming events will highlight the next cell in the selected column.")]),e._v(" "),t("li",[t("strong",[e._v("highlightPrevY:")]),e._v(" Incoming events will highlight the previous cell in the selected column.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut10:")]),e._v(" These events can be triggered by selecting a cell which contains an @OSKA,event … action string, (for example @OSKA,event 3).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This property defines the TCP port that the component listens on for connections of the OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("title [string]:")]),e._v(" This property defines the caption to be displayed in OSKA?s title bar.")]),e._v(" "),t("li",[t("strong",[e._v("oskaPath [string]:")]),e._v(" The absolute path to the OSKA player as well as the program name is needed in order for the component to start OSKA by itself.")]),e._v(" "),t("li",[t("strong",[e._v("keyboardPath [string]:")]),e._v(" If this property does not hold an empty string, the component will ask OSKA to load the keyboard referred to by this property. When the ACS is synchronized with the ARE (connected and model deployed) available keyboards can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("highlightStyle [integer]:")]),e._v(" This property selects the style of highlighting used in OSKA, the value range is from 0 to 2.")]),e._v(" "),t("li",[t("strong",[e._v("highlightResetPosition [integer]:")]),e._v(" This property selects the behaviour of the highlighter after a key has been pressed (do nothing / got to top left / got to center / got to bottom right).")]),e._v(" "),t("li",[t("strong",[e._v("settingsFile [string]:")]),e._v(" if this property is not empty OSKA will be started with this settings file as a command line parameter. When the ACS is synchronized with the ARE (connected and model deployed) available settings files can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("windowDecorated [boolean]:")]),e._v(" if true Oska will display a decorated window frame, otherwise only a lightweight frame.")]),e._v(" "),t("li",[t("strong",[e._v("eventScanningEnabled [boolean]:")]),e._v(" if true, incoming events can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("valueScanningEnabled [boolean]:")]),e._v(" if true, incoming values can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("inputRange [boolean] (combobox):")]),e._v(" the range of the incoming input port values: either float values between 0 and 1, or integer values or integer values from 0 to the maximum element (number of cells in a respective row or column of the grid).")]),e._v(" "),t("li",[t("strong",[e._v("resizeEnabled [boolean]:")]),e._v(" if true, the Oska will be resized to the dimensions specified in the GUI designer (slower).")])])])}),[],!1,null,null,null);t.default=o.exports},745:function(e,t,n){e.exports=n.p+"assets/img/oskaexternalscanning2d.ffabad8e.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[222],{1184:function(e,t,n){"use strict";n.r(t);var i=n(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"oska-external-scanning2d"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#oska-external-scanning2d"}},[e._v("#")]),e._v(" Oska External Scanning2D")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: OSKA)")]),e._v(" "),t("p",[e._v("This component interacts with the On Screen Keyboard Application (OSKA) and forwards key selections and command (action-) strings to other ARE plugins. The scanning function of OSKA can be controlled via this plugin, allowing 1-dimensional input values to be used for direct scanning position selection. Scanning is operated using two float inputs which take inputs in a range defined by the according property (between 0.0 and 1.0. or integer values). The two inputs control the position of the highlighted cell in a grid with values being mapped to a corresponding position in the grid. An event input allows pressing selected cells in the grid.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(747),alt:"Screenshot: OskaExternalScanning2D plugin",title:"Screenshot: OskaExternalScanning2D plugin"}})]),e._v(" "),t("p",[e._v("OskaExternalScanning2D plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v('This component requires Sensory Software’s OSKA keyboard. OSKA is automatically started by the plugin if it is located in the expected path ("…/OSKA/Start Keyboard.exe").')]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("posColumn [double]:")]),e._v(" This port takes values for the selection of the X-position (column selection). Depending on the value of the property “inputRange”, the incoming values are expected to be in a range from 0 to 1 (where 0 represents the first column and 1 the last) or they identifiy the absolute column position as integer values. "),t("strong",[e._v("This input port supports synchronization")])]),e._v(" "),t("li",[t("strong",[e._v("posRow [double]:")]),e._v(" This port takes values for the selection of the Y-position (row selection). Depending on the value of the property “inputRange”, the incoming values are expected to be in a range from 0 to 1 (where 0 represents the first row and 1 the last) or they identifiy the absolute row position as integer values. "),t("strong",[e._v("This input port supports synchronization")])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" This output sends the action strings (which have been added to a key in the OSKA editor) when this key is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("keycodes [string]:")]),e._v(" If a key is selected which contains the “@KDB: …” action string, the key codes are extracted from the action string and sent via this port, e.g. to the remoteKeyboard plugin’s corresponding input port for keyboard input emulation.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("press:")]),e._v(" Incoming events will trigger a press action on the selected key in OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("highlightNextX:")]),e._v(" Incoming events will highlight the next cell in the selected row.")]),e._v(" "),t("li",[t("strong",[e._v("highlightPrevX:")]),e._v(" Incoming events will highlight the previous cell in the selected row.")]),e._v(" "),t("li",[t("strong",[e._v("highlightNextY:")]),e._v(" Incoming events will highlight the next cell in the selected column.")]),e._v(" "),t("li",[t("strong",[e._v("highlightPrevY:")]),e._v(" Incoming events will highlight the previous cell in the selected column.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut10:")]),e._v(" These events can be triggered by selecting a cell which contains an @OSKA,event … action string, (for example @OSKA,event 3).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This property defines the TCP port that the component listens on for connections of the OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("title [string]:")]),e._v(" This property defines the caption to be displayed in OSKA?s title bar.")]),e._v(" "),t("li",[t("strong",[e._v("oskaPath [string]:")]),e._v(" The absolute path to the OSKA player as well as the program name is needed in order for the component to start OSKA by itself.")]),e._v(" "),t("li",[t("strong",[e._v("keyboardPath [string]:")]),e._v(" If this property does not hold an empty string, the component will ask OSKA to load the keyboard referred to by this property. When the ACS is synchronized with the ARE (connected and model deployed) available keyboards can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("highlightStyle [integer]:")]),e._v(" This property selects the style of highlighting used in OSKA, the value range is from 0 to 2.")]),e._v(" "),t("li",[t("strong",[e._v("highlightResetPosition [integer]:")]),e._v(" This property selects the behaviour of the highlighter after a key has been pressed (do nothing / got to top left / got to center / got to bottom right).")]),e._v(" "),t("li",[t("strong",[e._v("settingsFile [string]:")]),e._v(" if this property is not empty OSKA will be started with this settings file as a command line parameter. When the ACS is synchronized with the ARE (connected and model deployed) available settings files can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("windowDecorated [boolean]:")]),e._v(" if true Oska will display a decorated window frame, otherwise only a lightweight frame.")]),e._v(" "),t("li",[t("strong",[e._v("eventScanningEnabled [boolean]:")]),e._v(" if true, incoming events can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("valueScanningEnabled [boolean]:")]),e._v(" if true, incoming values can move the highlighter.")]),e._v(" "),t("li",[t("strong",[e._v("inputRange [boolean] (combobox):")]),e._v(" the range of the incoming input port values: either float values between 0 and 1, or integer values or integer values from 0 to the maximum element (number of cells in a respective row or column of the grid).")]),e._v(" "),t("li",[t("strong",[e._v("resizeEnabled [boolean]:")]),e._v(" if true, the Oska will be resized to the dimensions specified in the GUI designer (slower).")])])])}),[],!1,null,null,null);t.default=o.exports},747:function(e,t,n){e.exports=n.p+"assets/img/oskaexternalscanning2d.ffabad8e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/223.dd3744c7.js b/assets/js/223.55ba3364.js similarity index 97% rename from assets/js/223.dd3744c7.js rename to assets/js/223.55ba3364.js index d1bf4b4207..2b3df2a8ee 100644 --- a/assets/js/223.dd3744c7.js +++ b/assets/js/223.55ba3364.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[223],{1182:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"oska-internal-scanning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#oska-internal-scanning"}},[e._v("#")]),e._v(" Oska Internal Scanning")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: OSKA)")]),e._v(" "),t("p",[e._v("This component interacts with the On Screen Keyboard Application (OSKA) and forwards key selections and command (action-) strings to other ARE plugins. OSKA is set to use its internal scanning methods and the component exposes the two button input events that Oska can work with.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(746),alt:"Screenshot: OskaInternalScanning plugin",title:"Screenshot: OskaInternalScanning plugin"}})]),e._v(" "),t("p",[e._v("OskaInternalScanning plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v('This component requires Sensory Software’s OSKA keyboard. OSKA is automatically started by the plugin if it is located in the expected path ("…/OSKA/Start Keyboard.exe").')]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" This output sends the action string which is attached to a specific key on the keyboard to connected components.")]),e._v(" "),t("li",[t("strong",[e._v("keycodes [string]:")]),e._v(" This output sends the key codes which are attached to a key via the @KDB command.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("increaseScanspeed:")]),e._v(" Incoming events will increase the internal scanning speed of OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("decreaseScanspeed:")]),e._v(" Incoming events will decrease the internal scanning speed of OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("pressSwitch1:")]),e._v(" Incoming events start the automatic scanning or switch to the next selection (to speed up the scanning).")]),e._v(" "),t("li",[t("strong",[e._v("pressSwitch2:")]),e._v(" Incoming events switch from column- to row scanning (or in the next step select the cell). If the scanning is stopped, it will be started.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut10:")]),e._v(" These events can be triggered by selecting a cell which contains an @OSKA,event … action string, (for example @OSKA,event 3).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This property defines the TCP port that the component listens on for connections of the OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("title [string]:")]),e._v(" This property defines the caption to be displayed in OSKA?s title bar.")]),e._v(" "),t("li",[t("strong",[e._v("oskaPath [string]:")]),e._v(" The absolute path to the OSKA player as well as the program name is needed in order for the component to start OSKA by itself.")]),e._v(" "),t("li",[t("strong",[e._v("keyboardPath [string]:")]),e._v(" If this property does not hold an empty string, the component will ask OSKA to load the keyboard referred to by this property. When the ACS is synchronized with the ARE (connected and model deployed) available keyboards can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("scanSpeed [integer]:")]),e._v(" This property relates to the internal row column scanning method of OSKA and sets the speed of scanning, the value range is between 1 and 10.")]),e._v(" "),t("li",[t("strong",[e._v("highlightStyle [integer]:")]),e._v(" This property selects the style of highlighting used in OSKA, the value range is from 0 to 2.")]),e._v(" "),t("li",[t("strong",[e._v("settingsFile [string]:")]),e._v(" if this property is not empty OSKA will be started with this settings file as a command line parameter. When the ACS is synchronized with the ARE (connected and model deployed) available settings files can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("windowDecorated [boolean]:")]),e._v(" if true, Oska will display a decorated window frame, otherwise only a lightweight frame.")]),e._v(" "),t("li",[t("strong",[e._v("resizeEnabled [boolean]:")]),e._v(" if true, the Oska will be resized to the dimensions specified in the GUI designer (slower).")])])])}),[],!1,null,null,null);t.default=i.exports},746:function(e,t,n){e.exports=n.p+"assets/img/oskainternalscanning.bfba2e29.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[223],{1182:function(e,t,n){"use strict";n.r(t);var s=n(2),i=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"oska-internal-scanning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#oska-internal-scanning"}},[e._v("#")]),e._v(" Oska Internal Scanning")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: OSKA)")]),e._v(" "),t("p",[e._v("This component interacts with the On Screen Keyboard Application (OSKA) and forwards key selections and command (action-) strings to other ARE plugins. OSKA is set to use its internal scanning methods and the component exposes the two button input events that Oska can work with.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(745),alt:"Screenshot: OskaInternalScanning plugin",title:"Screenshot: OskaInternalScanning plugin"}})]),e._v(" "),t("p",[e._v("OskaInternalScanning plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v('This component requires Sensory Software’s OSKA keyboard. OSKA is automatically started by the plugin if it is located in the expected path ("…/OSKA/Start Keyboard.exe").')]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" This output sends the action string which is attached to a specific key on the keyboard to connected components.")]),e._v(" "),t("li",[t("strong",[e._v("keycodes [string]:")]),e._v(" This output sends the key codes which are attached to a key via the @KDB command.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("increaseScanspeed:")]),e._v(" Incoming events will increase the internal scanning speed of OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("decreaseScanspeed:")]),e._v(" Incoming events will decrease the internal scanning speed of OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("pressSwitch1:")]),e._v(" Incoming events start the automatic scanning or switch to the next selection (to speed up the scanning).")]),e._v(" "),t("li",[t("strong",[e._v("pressSwitch2:")]),e._v(" Incoming events switch from column- to row scanning (or in the next step select the cell). If the scanning is stopped, it will be started.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventOut1-eventOut10:")]),e._v(" These events can be triggered by selecting a cell which contains an @OSKA,event … action string, (for example @OSKA,event 3).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("port [integer]:")]),e._v(" This property defines the TCP port that the component listens on for connections of the OSKA.")]),e._v(" "),t("li",[t("strong",[e._v("title [string]:")]),e._v(" This property defines the caption to be displayed in OSKA?s title bar.")]),e._v(" "),t("li",[t("strong",[e._v("oskaPath [string]:")]),e._v(" The absolute path to the OSKA player as well as the program name is needed in order for the component to start OSKA by itself.")]),e._v(" "),t("li",[t("strong",[e._v("keyboardPath [string]:")]),e._v(" If this property does not hold an empty string, the component will ask OSKA to load the keyboard referred to by this property. When the ACS is synchronized with the ARE (connected and model deployed) available keyboards can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("scanSpeed [integer]:")]),e._v(" This property relates to the internal row column scanning method of OSKA and sets the speed of scanning, the value range is between 1 and 10.")]),e._v(" "),t("li",[t("strong",[e._v("highlightStyle [integer]:")]),e._v(" This property selects the style of highlighting used in OSKA, the value range is from 0 to 2.")]),e._v(" "),t("li",[t("strong",[e._v("settingsFile [string]:")]),e._v(" if this property is not empty OSKA will be started with this settings file as a command line parameter. When the ACS is synchronized with the ARE (connected and model deployed) available settings files can be selected from a drop-down listbox. (dynamic property)")]),e._v(" "),t("li",[t("strong",[e._v("windowDecorated [boolean]:")]),e._v(" if true, Oska will display a decorated window frame, otherwise only a lightweight frame.")]),e._v(" "),t("li",[t("strong",[e._v("resizeEnabled [boolean]:")]),e._v(" if true, the Oska will be resized to the dimensions specified in the GUI designer (slower).")])])])}),[],!1,null,null,null);t.default=i.exports},745:function(e,t,n){e.exports=n.p+"assets/img/oskainternalscanning.bfba2e29.jpg"}}]); \ No newline at end of file diff --git a/assets/js/224.6e13107c.js b/assets/js/224.87181fe2.js similarity index 93% rename from assets/js/224.6e13107c.js rename to assets/js/224.87181fe2.js index 0e28ae57cd..f14fd74878 100644 --- a/assets/js/224.6e13107c.js +++ b/assets/js/224.87181fe2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[224],{1180:function(t,e,r){"use strict";r.r(e);var s=r(2),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"path-multiplexer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#path-multiplexer"}},[t._v("#")]),t._v(" Path Multiplexer")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The Path Multiplexer component forwards signal from the selected input port to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(744),alt:"Screenshot: PathMultiplexer plugin",title:"Screenshot: PathMultiplexer plugin"}})]),t._v(" "),e("p",[t._v("PathMultiplexer plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1 to input4 [double]:")]),t._v(" The input ports for signals to be multiplexed 1…4.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v("[double]**")]),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("* The output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("passPort1 to passPort4:")]),t._v(" The event send to this port sets the forwarding signal from the appropriate input port:1…4 to the output port.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passNextPort:")]),t._v(" The event send to this port sets the forwarding signal from the next input port. If the current used is the port defined by the number property, the signal will be forward from the input port 1.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passPreviousPort:")]),t._v(" The event send to this port sets the forwarding signal from the previous input port. If the current used is the port 1, the signal will be forward from the input port defined by the number property.")])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("number [integer]:")]),t._v(" The maximum port number in use (can be 1 to 4).")])])])}),[],!1,null,null,null);e.default=o.exports},744:function(t,e,r){t.exports=r.p+"assets/img/pathmultiplexer.22710744.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[224],{1185:function(t,e,r){"use strict";r.r(e);var s=r(2),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"path-multiplexer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#path-multiplexer"}},[t._v("#")]),t._v(" Path Multiplexer")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The Path Multiplexer component forwards signal from the selected input port to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(748),alt:"Screenshot: PathMultiplexer plugin",title:"Screenshot: PathMultiplexer plugin"}})]),t._v(" "),e("p",[t._v("PathMultiplexer plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1 to input4 [double]:")]),t._v(" The input ports for signals to be multiplexed 1…4.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v("[double]**")]),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("* The output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("passPort1 to passPort4:")]),t._v(" The event send to this port sets the forwarding signal from the appropriate input port:1…4 to the output port.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passNextPort:")]),t._v(" The event send to this port sets the forwarding signal from the next input port. If the current used is the port defined by the number property, the signal will be forward from the input port 1.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passPreviousPort:")]),t._v(" The event send to this port sets the forwarding signal from the previous input port. If the current used is the port 1, the signal will be forward from the input port defined by the number property.")])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("number [integer]:")]),t._v(" The maximum port number in use (can be 1 to 4).")])])])}),[],!1,null,null,null);e.default=o.exports},748:function(t,e,r){t.exports=r.p+"assets/img/pathmultiplexer.22710744.jpg"}}]); \ No newline at end of file diff --git a/assets/js/225.8b3109c6.js b/assets/js/225.efaddc56.js similarity index 95% rename from assets/js/225.8b3109c6.js rename to assets/js/225.efaddc56.js index a44a9ddf4f..44e6e3b2e2 100644 --- a/assets/js/225.8b3109c6.js +++ b/assets/js/225.efaddc56.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[225],{1183:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"pathselector"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pathselector"}},[t._v("#")]),t._v(" Pathselector")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The pathselector component allows routing of an incoming numerical signal between up to 4 output ports. The desired output port can be directly selected by a dedicated event listener port, or the signal can be switched to the next or previous output port. This component can be used to utilize one particular signal for different purposes, e.g. controlling different actuators within a single model by sequentially switching between them.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(747),alt:"Screenshot: PathSelector plugin",title:"Screenshot: PathSelector plugin"}})]),t._v(" "),e("p",[t._v("PathSelector plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" The incoming signal to be routed.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1 to out4:")]),t._v(" Four output ports where the incoming signal can be routed to.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("select1 to select4:")]),t._v(" An incoming event at these ports directly activates the associated output path (e.g. as an event comes in at select 3, the input signal will be routed to out3.")]),t._v(" "),e("li",[e("strong",[t._v("selectNext:")]),t._v(" The next output port is selected for signal output. The maximum number of active ports is set via the active ports property. If the current number of active ports is already the maximum one, the select next event will wrap around the active port number and one port will be selected.")]),t._v(" "),e("li",[e("strong",[t._v("selectPrevious:")]),t._v(" The previous output port is selected for signal output. If the current port is out1, the select previous event will switch to the port with the maximum number given by the active ports property.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("activePorts [integer]:")]),t._v(" The maximum port number in use (can be 2 to 4).")])])])}),[],!1,null,null,null);e.default=s.exports},747:function(t,e,r){t.exports=r.p+"assets/img/pathselector.972367d5.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[225],{1183:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"pathselector"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#pathselector"}},[t._v("#")]),t._v(" Pathselector")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The pathselector component allows routing of an incoming numerical signal between up to 4 output ports. The desired output port can be directly selected by a dedicated event listener port, or the signal can be switched to the next or previous output port. This component can be used to utilize one particular signal for different purposes, e.g. controlling different actuators within a single model by sequentially switching between them.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(746),alt:"Screenshot: PathSelector plugin",title:"Screenshot: PathSelector plugin"}})]),t._v(" "),e("p",[t._v("PathSelector plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [double]:")]),t._v(" The incoming signal to be routed.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1 to out4:")]),t._v(" Four output ports where the incoming signal can be routed to.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("select1 to select4:")]),t._v(" An incoming event at these ports directly activates the associated output path (e.g. as an event comes in at select 3, the input signal will be routed to out3.")]),t._v(" "),e("li",[e("strong",[t._v("selectNext:")]),t._v(" The next output port is selected for signal output. The maximum number of active ports is set via the active ports property. If the current number of active ports is already the maximum one, the select next event will wrap around the active port number and one port will be selected.")]),t._v(" "),e("li",[e("strong",[t._v("selectPrevious:")]),t._v(" The previous output port is selected for signal output. If the current port is out1, the select previous event will switch to the port with the maximum number given by the active ports property.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("activePorts [integer]:")]),t._v(" The maximum port number in use (can be 2 to 4).")])])])}),[],!1,null,null,null);e.default=s.exports},746:function(t,e,r){t.exports=r.p+"assets/img/pathselector.972367d5.jpg"}}]); \ No newline at end of file diff --git a/assets/js/226.881faffc.js b/assets/js/226.0fbef67c.js similarity index 98% rename from assets/js/226.881faffc.js rename to assets/js/226.0fbef67c.js index e2c3c88db5..dfa1a0ec28 100644 --- a/assets/js/226.881faffc.js +++ b/assets/js/226.0fbef67c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[226],{1185:function(e,t,a){"use strict";a.r(t);var o=a(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"peakdetector"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#peakdetector"}},[e._v("#")]),e._v(" PeakDetector")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Basic Math)")]),e._v(" "),t("p",[e._v("The Peakdetector component can be used to detect peaks (top values of the signal) and valleys (bottom values) in a signal. Additionally it can calculate the time between two peaks or two valleys or between a peak and a valley. Optionally, top and bottom values can be compared with an average of the most recent top / bottom values - this allows to detect only peaks which are for example greater than 150% of the last 5 averaged peak values.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(749),alt:"Screenshot: PeakDetector plugin",title:"Screenshot: PeakDetector plugin"}})]),e._v(" "),t("p",[e._v("PeakDetector plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in [double]:")]),e._v(" The incoming signal.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("top:")]),e._v(" The peak value of the signal.")]),e._v(" "),t("li",[t("strong",[e._v("bottom:")]),e._v(" The bottom value of the signal.")]),e._v(" "),t("li",[t("strong",[e._v("time:")]),e._v(" The time in ms or beats per minute (BPM) (depending on the property timeMode) between two peaks (Mode=detect tops), two valleys (Mode=detect bottoms) or a valley and a peak (Mode=detect both) depending on the selected mode in the properties.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("topDetected:")]),e._v(" The event gets fired if a new top value was detected in the input signal.")]),e._v(" "),t("li",[t("strong",[e._v("bottomDetected:")]),e._v(" The event gets fired if a new bottom value was detected in the input signal.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mode:")]),e._v(" Determines which time frame will be used for the time output signal (see description of the output port time).")]),e._v(" "),t("li",[e._v("**comparePeaks:**the number of top / bottom values which are taken into account for averaging (0 = disable)")]),e._v(" "),t("li",[e._v("**validTopPercentage:**the percentage of the recent averaged top values which constitutes a valid top value (0 = all top values are valid)")]),e._v(" "),t("li",[e._v("**validBottomPercentage:**the percentage of the recent averaged bottom values which constitutes a valid bottom value (0 = all bottom values are valid)")]),e._v(" "),t("li",[t("strong",[e._v("timeMode:")]),e._v(" Determines the unit for the measured time frame between top/bottom values. Options are beats per minute (BPM) or milliseconds.")])])])}),[],!1,null,null,null);t.default=r.exports},749:function(e,t,a){e.exports=a.p+"assets/img/peakdetector.696ec72f.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[226],{1186:function(e,t,a){"use strict";a.r(t);var o=a(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"peakdetector"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#peakdetector"}},[e._v("#")]),e._v(" PeakDetector")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Basic Math)")]),e._v(" "),t("p",[e._v("The Peakdetector component can be used to detect peaks (top values of the signal) and valleys (bottom values) in a signal. Additionally it can calculate the time between two peaks or two valleys or between a peak and a valley. Optionally, top and bottom values can be compared with an average of the most recent top / bottom values - this allows to detect only peaks which are for example greater than 150% of the last 5 averaged peak values.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(749),alt:"Screenshot: PeakDetector plugin",title:"Screenshot: PeakDetector plugin"}})]),e._v(" "),t("p",[e._v("PeakDetector plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in [double]:")]),e._v(" The incoming signal.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("top:")]),e._v(" The peak value of the signal.")]),e._v(" "),t("li",[t("strong",[e._v("bottom:")]),e._v(" The bottom value of the signal.")]),e._v(" "),t("li",[t("strong",[e._v("time:")]),e._v(" The time in ms or beats per minute (BPM) (depending on the property timeMode) between two peaks (Mode=detect tops), two valleys (Mode=detect bottoms) or a valley and a peak (Mode=detect both) depending on the selected mode in the properties.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("topDetected:")]),e._v(" The event gets fired if a new top value was detected in the input signal.")]),e._v(" "),t("li",[t("strong",[e._v("bottomDetected:")]),e._v(" The event gets fired if a new bottom value was detected in the input signal.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mode:")]),e._v(" Determines which time frame will be used for the time output signal (see description of the output port time).")]),e._v(" "),t("li",[e._v("**comparePeaks:**the number of top / bottom values which are taken into account for averaging (0 = disable)")]),e._v(" "),t("li",[e._v("**validTopPercentage:**the percentage of the recent averaged top values which constitutes a valid top value (0 = all top values are valid)")]),e._v(" "),t("li",[e._v("**validBottomPercentage:**the percentage of the recent averaged bottom values which constitutes a valid bottom value (0 = all bottom values are valid)")]),e._v(" "),t("li",[t("strong",[e._v("timeMode:")]),e._v(" Determines the unit for the measured time frame between top/bottom values. Options are beats per minute (BPM) or milliseconds.")])])])}),[],!1,null,null,null);t.default=r.exports},749:function(e,t,a){e.exports=a.p+"assets/img/peakdetector.696ec72f.png"}}]); \ No newline at end of file diff --git a/assets/js/227.c18ac690.js b/assets/js/227.f2f8a103.js similarity index 96% rename from assets/js/227.c18ac690.js rename to assets/js/227.f2f8a103.js index 85b0caa604..a07270a4d2 100644 --- a/assets/js/227.c18ac690.js +++ b/assets/js/227.f2f8a103.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[227],{1184:function(t,e,r){"use strict";r.r(e);var n=r(2),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"protocol-ssvep-train"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#protocol-ssvep-train"}},[t._v("#")]),t._v(" Protocol SSVEP Train")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feauture-extraction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feauture-extraction"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feauture extraction)")]),t._v(" "),e("p",[t._v("This component is in charge of managing and configuring the SSVEP training recording protocol. It sends out the corresponding SSVEP stimulation frequencies.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(748),alt:"Screenshot: ProtocolSSVEPTrain plugin",title:"Screenshot: ProtocolSSVEPTrain plugin"}})]),t._v(" "),e("p",[t._v("ProtocolSSVEPTrain plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This plugins must be connected to the FlickeringLightStimulator plugin (which triggers the external SSVEP stimulation panels) or to the SSVEPStiumlator plugin.")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StimFrequency [integer]:")]),t._v(" Current stimulation frequency in Hz under test.")]),t._v(" "),e("li",[e("strong",[t._v("Freq2 [integer]:")]),t._v(" Background stimulation frequency in Hz for panel 2.")]),t._v(" "),e("li",[e("strong",[t._v("Freq3 [integer]:")]),t._v(" Background Stimulation frequency in Hz for panel 3.")]),t._v(" "),e("li",[e("strong",[t._v("Freq4 [integer]:")]),t._v(" Background Stimulation frequency in Hz for panel 4.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartProt:")]),t._v(" Start protocol request.")]),t._v(" "),e("li",[e("strong",[t._v("StopProt:")]),t._v(" Stop protocol request.")]),t._v(" "),e("li",[e("strong",[t._v("Continue:")]),t._v(" Next Stimulation trial request")]),t._v(" "),e("li",[e("strong",[t._v("Repeat:")]),t._v(" Repeat last stimulation trial request.")]),t._v(" "),e("li",[e("strong",[t._v("Stop:")]),t._v(" Abort current stimulation trial request.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartTrial:")]),t._v(" Event sent when a stimulation trial starts.")]),t._v(" "),e("li",[e("strong",[t._v("StopTrial:")]),t._v(" Event sent when a stimulation trial ends.")]),t._v(" "),e("li",[e("strong",[t._v("StartStim:")]),t._v(" Event sent when a stimulation period starts.")]),t._v(" "),e("li",[e("strong",[t._v("StopStim:")]),t._v(" Event sent when a stimulation period ends.")]),t._v(" "),e("li",[e("strong",[t._v("ReadyStim:")]),t._v(" EEvent sent 1 second befor the stimulation periods starts.")]),t._v(" "),e("li",[e("strong",[t._v("UpdatePanelConfig:")]),t._v(" Event sent requesting a stimulation panels re-configuration.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("NumRepetitions [integer]:")]),t._v(" Number of stimulation periods per trial.")]),t._v(" "),e("li",[e("strong",[t._v("RepStimDuration [integer]:")]),t._v(" Stimulation period duration in seconds.")]),t._v(" "),e("li",[e("strong",[t._v("RepNonStimDuration [integer]:")]),t._v(" Non-Stimulation period duration in seconds.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim1 [integer]:")]),t._v(" Stimulation frequency number 1 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim2 [integer]:")]),t._v(" Stimulation frequency number 2 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim3 [integer]:")]),t._v(" Stimulation frequency number 3 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim4 [integer]:")]),t._v(" Stimulation frequency number 4 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim5 [integer]:")]),t._v(" Stimulation frequency number 5 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim6 [integer]:")]),t._v(" Stimulation frequency number 6 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim7 [integer]:")]),t._v(" Stimulation frequency number 7 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim8 [integer]:")]),t._v(" Stimulation frequency number 8 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim9 [integer]:")]),t._v(" Stimulation frequency number 9 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim10 [integer]:")]),t._v(" Stimulation frequency number 10 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("RandomizeFreq [boolean]:")]),t._v(" Randomize stimulation frequencies order.")])])])}),[],!1,null,null,null);e.default=i.exports},748:function(t,e,r){t.exports=r.p+"assets/img/protocolssveptrain.0fb67610.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[227],{1187:function(t,e,r){"use strict";r.r(e);var n=r(2),i=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"protocol-ssvep-train"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#protocol-ssvep-train"}},[t._v("#")]),t._v(" Protocol SSVEP Train")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feauture-extraction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feauture-extraction"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feauture extraction)")]),t._v(" "),e("p",[t._v("This component is in charge of managing and configuring the SSVEP training recording protocol. It sends out the corresponding SSVEP stimulation frequencies.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(750),alt:"Screenshot: ProtocolSSVEPTrain plugin",title:"Screenshot: ProtocolSSVEPTrain plugin"}})]),t._v(" "),e("p",[t._v("ProtocolSSVEPTrain plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This plugins must be connected to the FlickeringLightStimulator plugin (which triggers the external SSVEP stimulation panels) or to the SSVEPStiumlator plugin.")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StimFrequency [integer]:")]),t._v(" Current stimulation frequency in Hz under test.")]),t._v(" "),e("li",[e("strong",[t._v("Freq2 [integer]:")]),t._v(" Background stimulation frequency in Hz for panel 2.")]),t._v(" "),e("li",[e("strong",[t._v("Freq3 [integer]:")]),t._v(" Background Stimulation frequency in Hz for panel 3.")]),t._v(" "),e("li",[e("strong",[t._v("Freq4 [integer]:")]),t._v(" Background Stimulation frequency in Hz for panel 4.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartProt:")]),t._v(" Start protocol request.")]),t._v(" "),e("li",[e("strong",[t._v("StopProt:")]),t._v(" Stop protocol request.")]),t._v(" "),e("li",[e("strong",[t._v("Continue:")]),t._v(" Next Stimulation trial request")]),t._v(" "),e("li",[e("strong",[t._v("Repeat:")]),t._v(" Repeat last stimulation trial request.")]),t._v(" "),e("li",[e("strong",[t._v("Stop:")]),t._v(" Abort current stimulation trial request.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartTrial:")]),t._v(" Event sent when a stimulation trial starts.")]),t._v(" "),e("li",[e("strong",[t._v("StopTrial:")]),t._v(" Event sent when a stimulation trial ends.")]),t._v(" "),e("li",[e("strong",[t._v("StartStim:")]),t._v(" Event sent when a stimulation period starts.")]),t._v(" "),e("li",[e("strong",[t._v("StopStim:")]),t._v(" Event sent when a stimulation period ends.")]),t._v(" "),e("li",[e("strong",[t._v("ReadyStim:")]),t._v(" EEvent sent 1 second befor the stimulation periods starts.")]),t._v(" "),e("li",[e("strong",[t._v("UpdatePanelConfig:")]),t._v(" Event sent requesting a stimulation panels re-configuration.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("NumRepetitions [integer]:")]),t._v(" Number of stimulation periods per trial.")]),t._v(" "),e("li",[e("strong",[t._v("RepStimDuration [integer]:")]),t._v(" Stimulation period duration in seconds.")]),t._v(" "),e("li",[e("strong",[t._v("RepNonStimDuration [integer]:")]),t._v(" Non-Stimulation period duration in seconds.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim1 [integer]:")]),t._v(" Stimulation frequency number 1 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim2 [integer]:")]),t._v(" Stimulation frequency number 2 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim3 [integer]:")]),t._v(" Stimulation frequency number 3 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim4 [integer]:")]),t._v(" Stimulation frequency number 4 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim5 [integer]:")]),t._v(" Stimulation frequency number 5 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim6 [integer]:")]),t._v(" Stimulation frequency number 6 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim7 [integer]:")]),t._v(" Stimulation frequency number 7 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim8 [integer]:")]),t._v(" Stimulation frequency number 8 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim9 [integer]:")]),t._v(" Stimulation frequency number 9 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("freqStim10 [integer]:")]),t._v(" Stimulation frequency number 10 in Hz.")]),t._v(" "),e("li",[e("strong",[t._v("RandomizeFreq [boolean]:")]),t._v(" Randomize stimulation frequencies order.")])])])}),[],!1,null,null,null);e.default=i.exports},750:function(t,e,r){t.exports=r.p+"assets/img/protocolssveptrain.0fb67610.jpg"}}]); \ No newline at end of file diff --git a/assets/js/228.0ced96e1.js b/assets/js/228.5a935437.js similarity index 92% rename from assets/js/228.0ced96e1.js rename to assets/js/228.5a935437.js index 1014725b17..684466f974 100644 --- a/assets/js/228.0ced96e1.js +++ b/assets/js/228.5a935437.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[228],{1188:function(t,e,r){"use strict";r.r(e);var i=r(2),a=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"quantizer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#quantizer"}},[t._v("#")]),t._v(" Quantizer")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This plugin performs a quantization of the input signal. The value of the output signal is the input value rounded to the nearest multiple of the quantizationStep property value.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(752),alt:"Screenshot: Quantizer plugin",title:"Screenshot: Quantizer plugin"}})]),t._v(" "),e("p",[t._v("Quantizer plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the values to be quantized.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port for the quantized values.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("quantizationStep [double]:")]),t._v(" The quantization step.")])])])}),[],!1,null,null,null);e.default=a.exports},752:function(t,e,r){t.exports=r.p+"assets/img/quantizer.e59f2f05.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[228],{1188:function(t,e,r){"use strict";r.r(e);var i=r(2),a=Object(i.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"quantizer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#quantizer"}},[t._v("#")]),t._v(" Quantizer")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This plugin performs a quantization of the input signal. The value of the output signal is the input value rounded to the nearest multiple of the quantizationStep property value.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(751),alt:"Screenshot: Quantizer plugin",title:"Screenshot: Quantizer plugin"}})]),t._v(" "),e("p",[t._v("Quantizer plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [double]:")]),t._v(" Input port for the values to be quantized.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [double]:")]),t._v(" Output port for the quantized values.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("quantizationStep [double]:")]),t._v(" The quantization step.")])])])}),[],!1,null,null,null);e.default=a.exports},751:function(t,e,r){t.exports=r.p+"assets/img/quantizer.e59f2f05.jpg"}}]); \ No newline at end of file diff --git a/assets/js/229.a64faa7f.js b/assets/js/229.e7926b4f.js similarity index 95% rename from assets/js/229.a64faa7f.js rename to assets/js/229.e7926b4f.js index 17939053a2..9ebbcb298f 100644 --- a/assets/js/229.a64faa7f.js +++ b/assets/js/229.e7926b4f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[229],{1186:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component processes strings with regular expressions. It can work in two modes: match strings with the pattern or replace string parts with another string. The regular expression syntax is defined in the "),e("a",{attrs:{href:"https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java class Pattern"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[e("img",{attrs:{src:r(750),alt:"Screenshot: RegularExpression plugin",title:"Screenshot: RegularExpression plugin"}})]),t._v(" "),e("p",[t._v("RegularExpression plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" String to match against the regular expression.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" If property replace=false, sends out input string in case of a match. if property replace=true, sends out replaced string.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("match")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if the string matches the pattern.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("notMatch")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if the string doesn’t match the pattern.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("replace")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if parts of the string where replaced by the replaceString.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("notReplace")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if no replacement occurred.")])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("pattern [string]:")]),t._v(" Regular expression pattern, see "),e("a",{attrs:{href:"https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java class Pattern"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("li",[e("strong",[t._v("replace [boolean]:")]),t._v(" If the property is set to true, the component will search parts of the string which match the pattern and replace these parts with the replaceString, otherwise the component will match the whole string with the pattern.")]),t._v(" "),e("li",[e("strong",[t._v("replaceString [string]:")]),t._v(" The string which replaces expressions which matching the pattern.")])])])}),[],!1,null,null,null);e.default=n.exports},750:function(t,e,r){t.exports=r.p+"assets/img/regularexpression.6f50f3a3.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[229],{1190:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component processes strings with regular expressions. It can work in two modes: match strings with the pattern or replace string parts with another string. The regular expression syntax is defined in the "),e("a",{attrs:{href:"https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java class Pattern"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[e("img",{attrs:{src:r(753),alt:"Screenshot: RegularExpression plugin",title:"Screenshot: RegularExpression plugin"}})]),t._v(" "),e("p",[t._v("RegularExpression plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" String to match against the regular expression.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" If property replace=false, sends out input string in case of a match. if property replace=true, sends out replaced string.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("match")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if the string matches the pattern.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("notMatch")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if the string doesn’t match the pattern.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("replace")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if parts of the string where replaced by the replaceString.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("notReplace")]),t._v(" "),e("strong",[t._v(":")]),t._v(" This event is sent if no replacement occurred.")])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("pattern [string]:")]),t._v(" Regular expression pattern, see "),e("a",{attrs:{href:"https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java class Pattern"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("li",[e("strong",[t._v("replace [boolean]:")]),t._v(" If the property is set to true, the component will search parts of the string which match the pattern and replace these parts with the replaceString, otherwise the component will match the whole string with the pattern.")]),t._v(" "),e("li",[e("strong",[t._v("replaceString [string]:")]),t._v(" The string which replaces expressions which matching the pattern.")])])])}),[],!1,null,null,null);e.default=n.exports},753:function(t,e,r){t.exports=r.p+"assets/img/regularexpression.6f50f3a3.jpg"}}]); \ No newline at end of file diff --git a/assets/js/23.bc682a1b.js b/assets/js/23.2fdaca85.js similarity index 97% rename from assets/js/23.bc682a1b.js rename to assets/js/23.2fdaca85.js index c1ff294fab..8f5cfd9de6 100644 --- a/assets/js/23.bc682a1b.js +++ b/assets/js/23.2fdaca85.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{405:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-01.c458bb02.png"},406:function(A,t){A.exports="data:image/png;base64,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"},407:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-edit-cell-01.91cf0c1f.png"},408:function(A,t){A.exports="data:image/png;base64,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"},409:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-edit-cell-02b.953a85e4.png"},410:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-edit-cell-03.ac0a8311.png"},928:function(A,t,e){"use strict";e.r(t);var r=e(2),i=Object(r.a)({},(function(){var A=this,t=A._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[t("h1",{attrs:{id:"grid-customization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grid-customization"}},[A._v("#")]),A._v(" Grid Customization")]),A._v(" "),t("p",[A._v("In this tutorial you will learn how to do simple modifications to a grid like changing the cell text or image.")]),A._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[A._v("Note")]),A._v(" "),t("p",[A._v("In case you need more detailed information, please check the "),t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[A._v("AsTeRICS Grid user manual")])],1),A._v(".")])]),A._v(" "),t("h2",{attrs:{id:"asterics-grid-web-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-grid-web-application"}},[A._v("#")]),A._v(" AsTeRICS Grid web application")]),A._v(" "),t("p",[A._v("AsTeRICS Grid is the web application to run and manage grids for AAC.")]),A._v(" "),t("p",[A._v("If you open the link "),t("a",{attrs:{href:"https://grid.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[A._v("https://grid.asterics.eu"),t("OutboundLink")],1),A._v(", the default grid is opened in your browser and saved locally on your device in the browser cache. All modifications are also saved to your local version of the grid from now on.")]),A._v(" "),t("h2",{attrs:{id:"open-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#open-grid"}},[A._v("#")]),A._v(" Open grid")]),A._v(" "),t("p",[A._v("First you have to open the grid you want to change.")]),A._v(" "),t("h3",{attrs:{id:"saved-grids"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#saved-grids"}},[A._v("#")]),A._v(" Saved Grids")]),A._v(" "),t("p",[A._v("If you click the button "),t("code",[A._v("Manage Grids")]),A._v(", you can open other grids from the list of "),t("code",[A._v("Saved Grids")]),A._v(" by clicking on the "),t("code",[A._v("Edit")]),A._v(" button.")]),A._v(" "),t("ol",[t("li",[t("img",{attrs:{src:e(405),alt:"Screenshot with button Manage Grids highlighted"}})]),A._v(" "),t("li",[t("img",{attrs:{src:e(406),alt:"Screenshot with button Edit highlighted"}})])]),A._v(" "),t("h3",{attrs:{id:"import-grid-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#import-grid-file"}},[A._v("#")]),A._v(" Import Grid file")]),A._v(" "),t("p",[A._v("You can also import and open a grid from a file. To do so, click on "),t("code",[A._v("More/Import grid(s) from file")]),A._v(".")]),A._v(" "),t("h2",{attrs:{id:"change-cell"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-cell"}},[A._v("#")]),A._v(" Change cell")]),A._v(" "),t("p",[A._v("You can change the cell text, image and spoken text of a cell. In order for that you must change to the edit mode of the grid by clicking on "),t("code",[A._v("Edit grid")]),A._v(".")]),A._v(" "),t("h3",{attrs:{id:"cell-text-and-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cell-text-and-image"}},[A._v("#")]),A._v(" Cell text and image")]),A._v(" "),t("ol",[t("li",[A._v("Move the mouse cursor to the cell you want to edit and click the right mouse button.")]),A._v(" "),t("li",[A._v("Select the menu entry "),t("code",[A._v("Edit")])]),A._v(" "),t("li",[A._v("Now you can change the label in the text field and select a new image by clicking on "),t("code",[A._v("Choose file")]),A._v(". To clear the image click on "),t("code",[A._v("Clear image")]),A._v(".")])]),A._v(" "),t("p",[t("img",{attrs:{src:e(407),alt:"Screenshot of edit cell dialog"}})]),A._v(" "),t("h3",{attrs:{id:"spoken-text"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#spoken-text"}},[A._v("#")]),A._v(" Spoken text")]),A._v(" "),t("p",[A._v("You can also change the spoken text of a grid by the following steps")]),A._v(" "),t("ol",[t("li",[A._v("Move the mouse cursor to the cell you want to edit and click the right mouse button.")]),A._v(" "),t("li",[A._v("Select the menu entry "),t("code",[A._v("Actions")])]),A._v(" "),t("li",[A._v("Delete "),t("code",[A._v("Speak label")]),A._v(" action\n"),t("img",{attrs:{src:e(408),alt:"Screenshot of edit actions dialog"}})]),A._v(" "),t("li",[A._v("Add "),t("code",[A._v("Speak custom text")]),A._v(" action")]),A._v(" "),t("li",[A._v("Enter text and click on "),t("code",[A._v("Test")])]),A._v(" "),t("li",[A._v("Finally, save the custom text by clicking on "),t("code",[A._v("OK")])])]),A._v(" "),t("p",[t("img",{attrs:{src:e(409),alt:"Screenshot of edit actions dialog"}}),A._v(" "),t("img",{attrs:{src:e(410),alt:"Screenshot of edit actions dialog"}})]),A._v(" "),t("h3",{attrs:{id:"close-edit-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#close-edit-mode"}},[A._v("#")]),A._v(" Close Edit mode")]),A._v(" "),t("p",[A._v("After you have finished all changes, you must close the edit mode for being able to use the grid. You can do this by clicking on the button "),t("code",[A._v("Back")]),A._v(" in the top menu.")]),A._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[A._v("#")]),A._v(" Conclusion")]),A._v(" "),t("p",[A._v("Now you know how to change a cell text, image or spoken text, to learn how to create a new grid, try the "),t("a",{attrs:{href:"./Grid-Creation"}},[A._v("grid creation tutorial")]),A._v(".")])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{406:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-01.c458bb02.png"},407:function(A,t){A.exports="data:image/png;base64,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"},408:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-edit-cell-01.91cf0c1f.png"},409:function(A,t){A.exports="data:image/png;base64,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"},410:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-edit-cell-02b.953a85e4.png"},411:function(A,t,e){A.exports=e.p+"assets/img/grid-customize-edit-cell-03.ac0a8311.png"},929:function(A,t,e){"use strict";e.r(t);var r=e(2),i=Object(r.a)({},(function(){var A=this,t=A._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":A.$parent.slotKey}},[t("h1",{attrs:{id:"grid-customization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grid-customization"}},[A._v("#")]),A._v(" Grid Customization")]),A._v(" "),t("p",[A._v("In this tutorial you will learn how to do simple modifications to a grid like changing the cell text or image.")]),A._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[A._v("Note")]),A._v(" "),t("p",[A._v("In case you need more detailed information, please check the "),t("strong",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[A._v("AsTeRICS Grid user manual")])],1),A._v(".")])]),A._v(" "),t("h2",{attrs:{id:"asterics-grid-web-application"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-grid-web-application"}},[A._v("#")]),A._v(" AsTeRICS Grid web application")]),A._v(" "),t("p",[A._v("AsTeRICS Grid is the web application to run and manage grids for AAC.")]),A._v(" "),t("p",[A._v("If you open the link "),t("a",{attrs:{href:"https://grid.asterics.eu",target:"_blank",rel:"noopener noreferrer"}},[A._v("https://grid.asterics.eu"),t("OutboundLink")],1),A._v(", the default grid is opened in your browser and saved locally on your device in the browser cache. All modifications are also saved to your local version of the grid from now on.")]),A._v(" "),t("h2",{attrs:{id:"open-grid"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#open-grid"}},[A._v("#")]),A._v(" Open grid")]),A._v(" "),t("p",[A._v("First you have to open the grid you want to change.")]),A._v(" "),t("h3",{attrs:{id:"saved-grids"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#saved-grids"}},[A._v("#")]),A._v(" Saved Grids")]),A._v(" "),t("p",[A._v("If you click the button "),t("code",[A._v("Manage Grids")]),A._v(", you can open other grids from the list of "),t("code",[A._v("Saved Grids")]),A._v(" by clicking on the "),t("code",[A._v("Edit")]),A._v(" button.")]),A._v(" "),t("ol",[t("li",[t("img",{attrs:{src:e(406),alt:"Screenshot with button Manage Grids highlighted"}})]),A._v(" "),t("li",[t("img",{attrs:{src:e(407),alt:"Screenshot with button Edit highlighted"}})])]),A._v(" "),t("h3",{attrs:{id:"import-grid-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#import-grid-file"}},[A._v("#")]),A._v(" Import Grid file")]),A._v(" "),t("p",[A._v("You can also import and open a grid from a file. To do so, click on "),t("code",[A._v("More/Import grid(s) from file")]),A._v(".")]),A._v(" "),t("h2",{attrs:{id:"change-cell"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#change-cell"}},[A._v("#")]),A._v(" Change cell")]),A._v(" "),t("p",[A._v("You can change the cell text, image and spoken text of a cell. In order for that you must change to the edit mode of the grid by clicking on "),t("code",[A._v("Edit grid")]),A._v(".")]),A._v(" "),t("h3",{attrs:{id:"cell-text-and-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cell-text-and-image"}},[A._v("#")]),A._v(" Cell text and image")]),A._v(" "),t("ol",[t("li",[A._v("Move the mouse cursor to the cell you want to edit and click the right mouse button.")]),A._v(" "),t("li",[A._v("Select the menu entry "),t("code",[A._v("Edit")])]),A._v(" "),t("li",[A._v("Now you can change the label in the text field and select a new image by clicking on "),t("code",[A._v("Choose file")]),A._v(". To clear the image click on "),t("code",[A._v("Clear image")]),A._v(".")])]),A._v(" "),t("p",[t("img",{attrs:{src:e(408),alt:"Screenshot of edit cell dialog"}})]),A._v(" "),t("h3",{attrs:{id:"spoken-text"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#spoken-text"}},[A._v("#")]),A._v(" Spoken text")]),A._v(" "),t("p",[A._v("You can also change the spoken text of a grid by the following steps")]),A._v(" "),t("ol",[t("li",[A._v("Move the mouse cursor to the cell you want to edit and click the right mouse button.")]),A._v(" "),t("li",[A._v("Select the menu entry "),t("code",[A._v("Actions")])]),A._v(" "),t("li",[A._v("Delete "),t("code",[A._v("Speak label")]),A._v(" action\n"),t("img",{attrs:{src:e(409),alt:"Screenshot of edit actions dialog"}})]),A._v(" "),t("li",[A._v("Add "),t("code",[A._v("Speak custom text")]),A._v(" action")]),A._v(" "),t("li",[A._v("Enter text and click on "),t("code",[A._v("Test")])]),A._v(" "),t("li",[A._v("Finally, save the custom text by clicking on "),t("code",[A._v("OK")])])]),A._v(" "),t("p",[t("img",{attrs:{src:e(410),alt:"Screenshot of edit actions dialog"}}),A._v(" "),t("img",{attrs:{src:e(411),alt:"Screenshot of edit actions dialog"}})]),A._v(" "),t("h3",{attrs:{id:"close-edit-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#close-edit-mode"}},[A._v("#")]),A._v(" Close Edit mode")]),A._v(" "),t("p",[A._v("After you have finished all changes, you must close the edit mode for being able to use the grid. You can do this by clicking on the button "),t("code",[A._v("Back")]),A._v(" in the top menu.")]),A._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[A._v("#")]),A._v(" Conclusion")]),A._v(" "),t("p",[A._v("Now you know how to change a cell text, image or spoken text, to learn how to create a new grid, try the "),t("a",{attrs:{href:"./Grid-Creation"}},[A._v("grid creation tutorial")]),A._v(".")])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/230.c9490c1e.js b/assets/js/230.e3d1e4e5.js similarity index 92% rename from assets/js/230.c9490c1e.js rename to assets/js/230.e3d1e4e5.js index 657341ebc5..fd8577acdc 100644 --- a/assets/js/230.c9490c1e.js +++ b/assets/js/230.e3d1e4e5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[230],{1209:function(t,e,r){"use strict";r.r(e);var s=r(2),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"relative-move-sampler"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#relative-move-sampler"}},[t._v("#")]),t._v(" Relative Move Sampler")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This plugin was developed for models where a constant rate of value updates is needed. The plugin sums incoming relative position packages for three coordinates. The sums are sent to the output ports according to sampling rate. When the sums are sent, the accumulation values are reset to zero.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(770),alt:"Screenshot: Relative Move Sampler",title:"Screenshot: Relative Move Sampler"}})]),t._v(" "),e("p",[t._v("Relative Move Sampler")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputX [integer]:")]),t._v(" Input X position.")]),t._v(" "),e("li",[e("strong",[t._v("inputY [integer]:")]),t._v(" Input Y position.")]),t._v(" "),e("li",[e("strong",[t._v("inputZ [integer]:")]),t._v(" Input Z position.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputX [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output X position.")]),t._v(" "),e("li",[e("strong",[t._v("outputY [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output Y position.")]),t._v(" "),e("li",[e("strong",[t._v("outputZ [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output Z position.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("samplingRate [integer]:")]),t._v(" Defines the rate of the sampling (in Hz).")])])])}),[],!1,null,null,null);e.default=o.exports},770:function(t,e,r){t.exports=r.p+"assets/img/relativemovesampler.314a4078.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[230],{1189:function(t,e,r){"use strict";r.r(e);var s=r(2),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"relative-move-sampler"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#relative-move-sampler"}},[t._v("#")]),t._v(" Relative Move Sampler")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This plugin was developed for models where a constant rate of value updates is needed. The plugin sums incoming relative position packages for three coordinates. The sums are sent to the output ports according to sampling rate. When the sums are sent, the accumulation values are reset to zero.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(752),alt:"Screenshot: Relative Move Sampler",title:"Screenshot: Relative Move Sampler"}})]),t._v(" "),e("p",[t._v("Relative Move Sampler")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inputX [integer]:")]),t._v(" Input X position.")]),t._v(" "),e("li",[e("strong",[t._v("inputY [integer]:")]),t._v(" Input Y position.")]),t._v(" "),e("li",[e("strong",[t._v("inputZ [integer]:")]),t._v(" Input Z position.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("outputX [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output X position.")]),t._v(" "),e("li",[e("strong",[t._v("outputY [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output Y position.")]),t._v(" "),e("li",[e("strong",[t._v("outputZ [**"),e("strong",[t._v("integer*")]),t._v("*]:")]),t._v(" Output Z position.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("samplingRate [integer]:")]),t._v(" Defines the rate of the sampling (in Hz).")])])])}),[],!1,null,null,null);e.default=o.exports},752:function(t,e,r){t.exports=r.p+"assets/img/relativemovesampler.314a4078.jpg"}}]); \ No newline at end of file diff --git a/assets/js/231.56a02a53.js b/assets/js/231.7fff5a57.js similarity index 97% rename from assets/js/231.56a02a53.js rename to assets/js/231.7fff5a57.js index 62fda0ee98..9e40a08877 100644 --- a/assets/js/231.56a02a53.js +++ b/assets/js/231.7fff5a57.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[231],{1187:function(t,e,i){"use strict";i.r(e);var n=i(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ssvep-detect"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssvep-detect"}},[t._v("#")]),t._v(" SSVEP Detect")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This component is in charge of evaluating the SSVEP response (up to 4 different frequencies) among the frequencies defined by the user. It also calculates the config file based on previously recorded training files that will be used to evaluate the detection, and is also in charge of updating its parameters according to the config file Component Type: Processor (Subcategory: DSP and Feauture extraction)")]),t._v(" "),e("p",[e("img",{attrs:{src:i(751),alt:"Screenshot: SSVEPDetect plugin",title:"Screenshot: SSVEPDetect plugin"}})]),t._v(" "),e("p",[t._v("SSVEPDetect plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("SSVEPTrainFunction.exe and Matlab 2008B runtime engine")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("O1 [double]:")]),t._v(" Input port for the EEG channel O1. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("Oz [double]:")]),t._v(" Input port for the EEG channel Oz. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("O2 [double]:")]),t._v(" Input port for the EEG channel O2. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("UserName [string]:")]),t._v(" Name Identifying current the user.")]),t._v(" "),e("li",[e("strong",[t._v("NumberOfPanels [string]:")]),t._v(" Number of stimulation panels.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP1 [string]:")]),t._v(" Stimulation frequency of panel 1.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP2 [string]:")]),t._v(" Stimulation frequency of panel 2.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP3 [string]:")]),t._v(" Stimulation frequency of panel 3.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP4 [string]:")]),t._v(" Stimulation frequency of panel 4.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FreqP1 [integer]:")]),t._v(" Stimulation frequency of panel 1.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP2 [integer]:")]),t._v(" Stimulation frequency of panel 2.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP3 [integer]:")]),t._v(" Stimulation frequency of panel 3.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP4 [integer]:")]),t._v(" Stimulation frequency of panel 4.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartStim:")]),t._v(" Event Informing that the stimulation period has started.")]),t._v(" "),e("li",[e("strong",[t._v("StopStim:")]),t._v(" Event Informing that the stimulation period has finished.")]),t._v(" "),e("li",[e("strong",[t._v("CalculateConfigFile:")]),t._v(" Event requesting the calculation of the configuration file")]),t._v(" "),e("li",[e("strong",[t._v("UpdateFromConfigFile:")]),t._v(" Event requested an update of the properties according to the configuration file.")]),t._v(" "),e("li",[e("strong",[t._v("UpdatePanelsConfig:")]),t._v(" Event reporting the stimulation panels plugin to update the stimulation frequencies.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("UpdatePanelsConfig:")]),t._v(" Event reporting the stimulation panels plugin to update the stimulation frequencies.")]),t._v(" "),e("li",[e("strong",[t._v("NonStimFreqD:")]),t._v(" Event reporting that none stimulation frequency could be detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq1D:")]),t._v(" Event reporting that stimulation frequency number 1 was detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq2D:")]),t._v(" Event reporting that stimulation frequency number 2 was detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq3D:")]),t._v(" Event reporting that stimulation frequency number 3 was detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq4D:")]),t._v(" Event reporting that stimulation frequency number 4 was detected.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("SF1GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 1 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF1GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 1 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF1GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 1 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("SF2GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 2 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF2GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 2 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF2GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 2 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("SF3GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 3 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF3GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 3 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF3GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 3 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("SF4GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 4 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF4GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 4 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF4GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 4 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq1 [integer]:")]),t._v(" Stimulation frequency number 2 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection…")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq2 [integer]:")]),t._v(" Stimulation frequency number 2 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq3 [integer]:")]),t._v(" Stimulation frequency number 3 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq4 [integer]:")]),t._v(" Stimulation frequency number 4 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm1 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 1.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm2 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 2.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm3 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 3.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm4 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 4.")])])])}),[],!1,null,null,null);e.default=r.exports},751:function(t,e,i){t.exports=i.p+"assets/img/ssvepdetect.a71b1d1d.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[231],{1191:function(t,e,i){"use strict";i.r(e);var n=i(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ssvep-detect"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssvep-detect"}},[t._v("#")]),t._v(" SSVEP Detect")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-dsp-and-feature-detection"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-dsp-and-feature-detection"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: DSP and Feature Detection)")]),t._v(" "),e("p",[t._v("This component is in charge of evaluating the SSVEP response (up to 4 different frequencies) among the frequencies defined by the user. It also calculates the config file based on previously recorded training files that will be used to evaluate the detection, and is also in charge of updating its parameters according to the config file Component Type: Processor (Subcategory: DSP and Feauture extraction)")]),t._v(" "),e("p",[e("img",{attrs:{src:i(754),alt:"Screenshot: SSVEPDetect plugin",title:"Screenshot: SSVEPDetect plugin"}})]),t._v(" "),e("p",[t._v("SSVEPDetect plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("SSVEPTrainFunction.exe and Matlab 2008B runtime engine")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("O1 [double]:")]),t._v(" Input port for the EEG channel O1. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("Oz [double]:")]),t._v(" Input port for the EEG channel Oz. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("O2 [double]:")]),t._v(" Input port for the EEG channel O2. "),e("strong",[t._v("This input port supports synchronization")])]),t._v(" "),e("li",[e("strong",[t._v("UserName [string]:")]),t._v(" Name Identifying current the user.")]),t._v(" "),e("li",[e("strong",[t._v("NumberOfPanels [string]:")]),t._v(" Number of stimulation panels.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP1 [string]:")]),t._v(" Stimulation frequency of panel 1.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP2 [string]:")]),t._v(" Stimulation frequency of panel 2.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP3 [string]:")]),t._v(" Stimulation frequency of panel 3.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP4 [string]:")]),t._v(" Stimulation frequency of panel 4.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FreqP1 [integer]:")]),t._v(" Stimulation frequency of panel 1.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP2 [integer]:")]),t._v(" Stimulation frequency of panel 2.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP3 [integer]:")]),t._v(" Stimulation frequency of panel 3.")]),t._v(" "),e("li",[e("strong",[t._v("FreqP4 [integer]:")]),t._v(" Stimulation frequency of panel 4.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("StartStim:")]),t._v(" Event Informing that the stimulation period has started.")]),t._v(" "),e("li",[e("strong",[t._v("StopStim:")]),t._v(" Event Informing that the stimulation period has finished.")]),t._v(" "),e("li",[e("strong",[t._v("CalculateConfigFile:")]),t._v(" Event requesting the calculation of the configuration file")]),t._v(" "),e("li",[e("strong",[t._v("UpdateFromConfigFile:")]),t._v(" Event requested an update of the properties according to the configuration file.")]),t._v(" "),e("li",[e("strong",[t._v("UpdatePanelsConfig:")]),t._v(" Event reporting the stimulation panels plugin to update the stimulation frequencies.")])]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("UpdatePanelsConfig:")]),t._v(" Event reporting the stimulation panels plugin to update the stimulation frequencies.")]),t._v(" "),e("li",[e("strong",[t._v("NonStimFreqD:")]),t._v(" Event reporting that none stimulation frequency could be detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq1D:")]),t._v(" Event reporting that stimulation frequency number 1 was detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq2D:")]),t._v(" Event reporting that stimulation frequency number 2 was detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq3D:")]),t._v(" Event reporting that stimulation frequency number 3 was detected.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq4D:")]),t._v(" Event reporting that stimulation frequency number 4 was detected.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("SF1GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 1 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF1GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 1 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF1GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 1 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("SF2GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 2 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF2GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 2 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF2GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 2 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("SF3GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 3 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF3GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 3 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF3GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 3 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("SF4GO1 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 4 and electrode O1.")]),t._v(" "),e("li",[e("strong",[t._v("SF4GOz [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 4 and electrode Oz.")]),t._v(" "),e("li",[e("strong",[t._v("SF4GO2 [double]:")]),t._v(" Spatial filter coefficient for stimulation frequency 4 and electrode O2.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq1 [integer]:")]),t._v(" Stimulation frequency number 2 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection…")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq2 [integer]:")]),t._v(" Stimulation frequency number 2 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq3 [integer]:")]),t._v(" Stimulation frequency number 3 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection.")]),t._v(" "),e("li",[e("strong",[t._v("StimFreq4 [integer]:")]),t._v(" Stimulation frequency number 4 in Hz. If its value is 0 it will not be evaluated in the SSVEP detection.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm1 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 1.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm2 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 2.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm3 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 3.")]),t._v(" "),e("li",[e("strong",[t._v("BestHarm4 [integer]:")]),t._v(" Best harmonic to detect stimulation frequency 4.")])])])}),[],!1,null,null,null);e.default=r.exports},754:function(t,e,i){t.exports=i.p+"assets/img/ssvepdetect.a71b1d1d.jpg"}}]); \ No newline at end of file diff --git a/assets/js/232.38813191.js b/assets/js/232.7195259a.js similarity index 90% rename from assets/js/232.38813191.js rename to assets/js/232.7195259a.js index 36d2d44c6f..971f57d0c5 100644 --- a/assets/js/232.38813191.js +++ b/assets/js/232.7195259a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[232],{1190:function(t,e,s){"use strict";s.r(e);var o=s(2),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"sample-and-hold"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sample-and-hold"}},[t._v("#")]),t._v(" Sample and Hold")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component provides a sample-and-hold function for up to 4 input signals. This can be useful for storing a particular sensor values (e.g. for sensor calibration purpose).")]),t._v(" "),e("p",[e("img",{attrs:{src:s(754),alt:"Screenshot: SampleAndHold plugin",title:"Screenshot: SampleAndHold plugin"}})]),t._v(" "),e("p",[t._v("SampleAndHold plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in1 - in4 [double]:")]),t._v(" four input ports for double values to be captured on demand.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1 - out4 [double]:")]),t._v(" last captured values.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sampleNow:")]),t._v(" When an event comes in, the signal values of the input ports are captured and sent to the output ports.")])])])}),[],!1,null,null,null);e.default=n.exports},754:function(t,e,s){t.exports=s.p+"assets/img/sampleandhold.5e355178.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[232],{1193:function(t,e,s){"use strict";s.r(e);var o=s(2),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"sample-and-hold"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sample-and-hold"}},[t._v("#")]),t._v(" Sample and Hold")]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Basic Math)")]),t._v(" "),e("p",[t._v("This component provides a sample-and-hold function for up to 4 input signals. This can be useful for storing a particular sensor values (e.g. for sensor calibration purpose).")]),t._v(" "),e("p",[e("img",{attrs:{src:s(756),alt:"Screenshot: SampleAndHold plugin",title:"Screenshot: SampleAndHold plugin"}})]),t._v(" "),e("p",[t._v("SampleAndHold plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in1 - in4 [double]:")]),t._v(" four input ports for double values to be captured on demand.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1 - out4 [double]:")]),t._v(" last captured values.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sampleNow:")]),t._v(" When an event comes in, the signal values of the input ports are captured and sent to the output ports.")])])])}),[],!1,null,null,null);e.default=n.exports},756:function(t,e,s){t.exports=s.p+"assets/img/sampleandhold.5e355178.jpg"}}]); \ No newline at end of file diff --git a/assets/js/234.62628e62.js b/assets/js/234.5fde931b.js similarity index 92% rename from assets/js/234.62628e62.js rename to assets/js/234.5fde931b.js index f258578001..85d936744e 100644 --- a/assets/js/234.62628e62.js +++ b/assets/js/234.5fde931b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[234],{1193:function(e,t,s){"use strict";s.r(t);var a=s(2),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"serialsender"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#serialsender"}},[e._v("#")]),e._v(" SerialSender")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Serial Communication)")]),e._v(" "),t("p",[e._v("The Serialsender can be used to send structured data to Serial devices. It has 16 data slots. Whenever a send event occurs the plugin sends every slot which is active to the device, beginning with slot0")]),e._v(" "),t("p",[t("img",{attrs:{src:s(756),alt:"Screenshot: SerialSender plugin",title:"Screenshot: SerialSender plugin"}})]),e._v(" "),t("p",[e._v("SerialSender plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("slot0 - slot15 [int]:")]),e._v(" Input data for each slot. The lower 8 Bit of the input will be sent when the slot is set Active and a send event occurs")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [string]:")]),e._v(" Defines the COM Port of the target serial device. e.g. COM0")]),e._v(" "),t("li",[t("strong",[e._v("BaudRate [integer]:")]),e._v(" Defines the Baudrate for the communication. It must match the baudrate of the target device")]),e._v(" "),t("li",[e._v("**Slot[0-15] [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the default value of a slot. This value will be overridden if there is data available at the corresponding input slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Active [boolean]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Activate a Slot. Whenever a send event occurs the SerialSender will iterate over all Slots beginning with slot 0 and send the data of every Active Slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Delay [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the delay the plugin should wait before sending data to a slot.")])])])}),[],!1,null,null,null);t.default=i.exports},756:function(e,t,s){e.exports=s.p+"assets/img/serialsender.58f95c8a.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[234],{1194:function(e,t,s){"use strict";s.r(t);var a=s(2),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"serialsender"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#serialsender"}},[e._v("#")]),e._v(" SerialSender")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Serial Communication)")]),e._v(" "),t("p",[e._v("The Serialsender can be used to send structured data to Serial devices. It has 16 data slots. Whenever a send event occurs the plugin sends every slot which is active to the device, beginning with slot0")]),e._v(" "),t("p",[t("img",{attrs:{src:s(757),alt:"Screenshot: SerialSender plugin",title:"Screenshot: SerialSender plugin"}})]),e._v(" "),t("p",[e._v("SerialSender plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("slot0 - slot15 [int]:")]),e._v(" Input data for each slot. The lower 8 Bit of the input will be sent when the slot is set Active and a send event occurs")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [string]:")]),e._v(" Defines the COM Port of the target serial device. e.g. COM0")]),e._v(" "),t("li",[t("strong",[e._v("BaudRate [integer]:")]),e._v(" Defines the Baudrate for the communication. It must match the baudrate of the target device")]),e._v(" "),t("li",[e._v("**Slot[0-15] [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the default value of a slot. This value will be overridden if there is data available at the corresponding input slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Active [boolean]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Activate a Slot. Whenever a send event occurs the SerialSender will iterate over all Slots beginning with slot 0 and send the data of every Active Slot")]),e._v(" "),t("li",[e._v("**Slot[0-15]Delay [int]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Defines the delay the plugin should wait before sending data to a slot.")])])])}),[],!1,null,null,null);t.default=i.exports},757:function(e,t,s){e.exports=s.p+"assets/img/serialsender.58f95c8a.png"}}]); \ No newline at end of file diff --git a/assets/js/236.7cd1ccc9.js b/assets/js/236.bdff31f2.js similarity index 97% rename from assets/js/236.7cd1ccc9.js rename to assets/js/236.bdff31f2.js index 2e04277f62..c5b83ca72e 100644 --- a/assets/js/236.7cd1ccc9.js +++ b/assets/js/236.bdff31f2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[236],{1194:function(e,t,n){"use strict";n.r(t);var o=n(2),i=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"speech-processor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#speech-processor"}},[e._v("#")]),e._v(" Speech Processor")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("The SpeechProcessor component provides methods to use a speech recognition engine and a speech synthesizer, provided via the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/download/v4.1.0/SpeechPlatformRuntime11_including_ge-en-es-Language-Packs.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("Microsoft Speech Platform Runtime 11"),t("OutboundLink")],1),e._v(".\nOriginally the download was available through "),t("a",{attrs:{href:"http://www.microsoft.com/en-us/download/details.aspx?id=27225",target:"_blank",rel:"noopener noreferrer"}},[e._v("Microsoft Download"),t("OutboundLink")],1),e._v(" but is now provided with the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/download/v4.1.0/SpeechPlatformRuntime11_including_ge-en-es-Language-Packs.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("AsTeRICS 4.1 release"),t("OutboundLink")],1),e._v(", as the official download was closed. The Microsoft Speech Platform provides recognition of spoken words and generation of synthesized speech (text-to-speech, TTS). Engines and language packs for 26 languages can be downloaded for free (see above link). The language (culture) of speech recognition and synthesis can be adjusted as a plugin property (currently English, German, Spanish and Polish are supported by the plugin, if the language packs are installed.) The supported voice commands can be set by the plugin properties. Recognized commands trigger events and are put to an output port as stings. Moreover, the component can receive strings which are spoken via the selected speech synthesizer. The component features special commands for activation, deactivation and speaking all supported commands")]),e._v(" "),t("p",[t("img",{attrs:{src:n(757),alt:"Screenshot: SpeechProcessor plugin",title:"Screenshot: SpeechProcessor plugin"}})]),e._v(" "),t("p",[e._v("SpeechProcessor plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("This component requires Microsoft’s Speech Platform version 11 Runtime and the desired language packs to be installed on the platform running the plugin.")])]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("speak [string]:")]),e._v(" This port receives strings containing sentences or words that should be spoken via a speech synthesizer which fits the selected language (text-to-speech).")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("command [string]:")]),e._v(" This output sends strings which have been recognized by the speech recognition engine (matching one of the commands defined by property values).")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("help:")]),e._v(" and incoming event starts the help mode where all supported voice commands will be spoken.")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activated:")]),e._v(" triggered when the recognition is activated via the defined activation command.")]),e._v(" "),t("li",[t("strong",[e._v("deActivated:")]),e._v(" triggered when the recognition is deactivated via the defined command.")]),e._v(" "),t("li",[t("strong",[e._v("recognizedCommand1 - recognizedCommand10:")]),e._v(" If an incoming word matches a command defined in the plugin properties, the corresponding event will fire.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("language [integer] (combobox selection):")]),e._v(" A combobox which defines which speech pack is to be used (currently: English, German, Spanish, Polish) - these language packs need to be installed !")]),e._v(" "),t("li",[t("strong",[e._v("recognitionConfidence [double]:")]),e._v(" This value defines the needed confidence for a valid recognition. The value can range from 0 to 1. A higher value results in a more precise pronunciation needed to detect a command, a lower level could lead to more false-positive recognition results.")]),e._v(" "),t("li",[t("strong",[e._v("speechLoopDelay [integer]:")]),e._v(" This value defines the minimal time between two speech commands. It is used to avoid recognition-loops")]),e._v(" "),t("li",[t("strong",[e._v("activationCommand [string]:")]),e._v(" a speech command to start the recognition of the other commands.")]),e._v(" "),t("li",[t("strong",[e._v("deactivationCommand [string]:")]),e._v(" a speech command to stop the recognition of the other commands.")]),e._v(" "),t("li",[t("strong",[e._v("helpCommand [string]:")]),e._v(" a speech command to speak out all supported voice commands.")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer] (combobox selection):")]),e._v(" This property selects one out of three operating modes for the speech recognition:\n"),t("ul",[t("li",[e._v("“always active”: the command recognition is always running")]),e._v(" "),t("li",[e._v("“voice-triggered activation and deactivation”: the command recognition is started by the recognition of the activation command and stopped by the deactivation command (these commands are defined in the according properties).")]),e._v(" "),t("li",[e._v("“automatic deactivation after command recognition”: after a recognized command, the speech recognition will be bypassed until another activation command has been recognized.")]),e._v(" "),t("li",[e._v("“speech recognition disabled (TTS only)”: In this mode, the speech recognition engine is not used whichs saved CPU power in text-to-speech-only applications.")])])]),e._v(" "),t("li",[t("strong",[e._v("command1 to command10:")]),e._v(" The command strings which are checked by the speech recognition engines (these build the recognition grammar).")])])])}),[],!1,null,null,null);t.default=i.exports},757:function(e,t,n){e.exports=n.p+"assets/img/speechprocessor.69f52c9f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[236],{1197:function(e,t,n){"use strict";n.r(t);var o=n(2),i=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"speech-processor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#speech-processor"}},[e._v("#")]),e._v(" Speech Processor")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Audio and Voice)")]),e._v(" "),t("p",[e._v("The SpeechProcessor component provides methods to use a speech recognition engine and a speech synthesizer, provided via the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/download/v4.1.0/SpeechPlatformRuntime11_including_ge-en-es-Language-Packs.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("Microsoft Speech Platform Runtime 11"),t("OutboundLink")],1),e._v(".\nOriginally the download was available through "),t("a",{attrs:{href:"http://www.microsoft.com/en-us/download/details.aspx?id=27225",target:"_blank",rel:"noopener noreferrer"}},[e._v("Microsoft Download"),t("OutboundLink")],1),e._v(" but is now provided with the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/download/v4.1.0/SpeechPlatformRuntime11_including_ge-en-es-Language-Packs.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("AsTeRICS 4.1 release"),t("OutboundLink")],1),e._v(", as the official download was closed. The Microsoft Speech Platform provides recognition of spoken words and generation of synthesized speech (text-to-speech, TTS). Engines and language packs for 26 languages can be downloaded for free (see above link). The language (culture) of speech recognition and synthesis can be adjusted as a plugin property (currently English, German, Spanish and Polish are supported by the plugin, if the language packs are installed.) The supported voice commands can be set by the plugin properties. Recognized commands trigger events and are put to an output port as stings. Moreover, the component can receive strings which are spoken via the selected speech synthesizer. The component features special commands for activation, deactivation and speaking all supported commands")]),e._v(" "),t("p",[t("img",{attrs:{src:n(759),alt:"Screenshot: SpeechProcessor plugin",title:"Screenshot: SpeechProcessor plugin"}})]),e._v(" "),t("p",[e._v("SpeechProcessor plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("This component requires Microsoft’s Speech Platform version 11 Runtime and the desired language packs to be installed on the platform running the plugin.")])]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("speak [string]:")]),e._v(" This port receives strings containing sentences or words that should be spoken via a speech synthesizer which fits the selected language (text-to-speech).")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("command [string]:")]),e._v(" This output sends strings which have been recognized by the speech recognition engine (matching one of the commands defined by property values).")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("help:")]),e._v(" and incoming event starts the help mode where all supported voice commands will be spoken.")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activated:")]),e._v(" triggered when the recognition is activated via the defined activation command.")]),e._v(" "),t("li",[t("strong",[e._v("deActivated:")]),e._v(" triggered when the recognition is deactivated via the defined command.")]),e._v(" "),t("li",[t("strong",[e._v("recognizedCommand1 - recognizedCommand10:")]),e._v(" If an incoming word matches a command defined in the plugin properties, the corresponding event will fire.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("language [integer] (combobox selection):")]),e._v(" A combobox which defines which speech pack is to be used (currently: English, German, Spanish, Polish) - these language packs need to be installed !")]),e._v(" "),t("li",[t("strong",[e._v("recognitionConfidence [double]:")]),e._v(" This value defines the needed confidence for a valid recognition. The value can range from 0 to 1. A higher value results in a more precise pronunciation needed to detect a command, a lower level could lead to more false-positive recognition results.")]),e._v(" "),t("li",[t("strong",[e._v("speechLoopDelay [integer]:")]),e._v(" This value defines the minimal time between two speech commands. It is used to avoid recognition-loops")]),e._v(" "),t("li",[t("strong",[e._v("activationCommand [string]:")]),e._v(" a speech command to start the recognition of the other commands.")]),e._v(" "),t("li",[t("strong",[e._v("deactivationCommand [string]:")]),e._v(" a speech command to stop the recognition of the other commands.")]),e._v(" "),t("li",[t("strong",[e._v("helpCommand [string]:")]),e._v(" a speech command to speak out all supported voice commands.")]),e._v(" "),t("li",[t("strong",[e._v("mode [integer] (combobox selection):")]),e._v(" This property selects one out of three operating modes for the speech recognition:\n"),t("ul",[t("li",[e._v("“always active”: the command recognition is always running")]),e._v(" "),t("li",[e._v("“voice-triggered activation and deactivation”: the command recognition is started by the recognition of the activation command and stopped by the deactivation command (these commands are defined in the according properties).")]),e._v(" "),t("li",[e._v("“automatic deactivation after command recognition”: after a recognized command, the speech recognition will be bypassed until another activation command has been recognized.")]),e._v(" "),t("li",[e._v("“speech recognition disabled (TTS only)”: In this mode, the speech recognition engine is not used whichs saved CPU power in text-to-speech-only applications.")])])]),e._v(" "),t("li",[t("strong",[e._v("command1 to command10:")]),e._v(" The command strings which are checked by the speech recognition engines (these build the recognition grammar).")])])])}),[],!1,null,null,null);t.default=i.exports},759:function(e,t,n){e.exports=n.p+"assets/img/speechprocessor.69f52c9f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/237.da7a51b8.js b/assets/js/237.5e3d3381.js similarity index 94% rename from assets/js/237.da7a51b8.js rename to assets/js/237.5e3d3381.js index 72be53fc3f..06001e1222 100644 --- a/assets/js/237.da7a51b8.js +++ b/assets/js/237.5e3d3381.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[237],{1196:function(t,e,r){"use strict";r.r(e);var n=r(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"string-append"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#string-append"}},[t._v("#")]),t._v(" String Append")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("Appends an incoming string or ASCII character to a stringbuffer, the updated stringbuffer is sent to an output port. Incoming events are available to send the final string to a dedicated output port and to clear the stringbuffer (or set it to a default value respectively).")]),t._v(" "),e("p",[e("img",{attrs:{src:r(759),alt:"Screenshot: StringAppend plugin",title:"Screenshot: StringAppend plugin"}})]),t._v(" "),e("p",[t._v("StringAppend plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inStr [string]:")]),t._v(" String input port.")]),t._v(" "),e("li",[e("strong",[t._v("inChar [integer]:")]),t._v(" ASCII code input port.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("actResult [string]:")]),t._v(" String output port for current stringbuffer content.")]),t._v(" "),e("li",[e("strong",[t._v("finalResult [string]:")]),t._v(" String output port for final stringbuffer content (triggered by event or enter).")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-ports"}},[t._v("#")]),t._v(" Event Listener Ports")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sendNow:")]),t._v(" sends the current content of the stringbuffer to the “finalResult” output port.")]),t._v(" "),e("li",[e("strong",[t._v("sendNowAndClear:")]),t._v(" sends the current content of the stringbuffer to the “finalResult” output port and sets the stringbuffer to the default value.")]),t._v(" "),e("li",[e("strong",[t._v("deleteCharacter:")]),t._v(" deletes the last character of the stringbuffer.")]),t._v(" "),e("li",[e("strong",[t._v("clear:")]),t._v(" sets the stringbuffer to the default value.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("autoSendAtEnter [boolean]:")]),t._v(" If true, the stringbuffer is sent and cleared when the ASCII value for Enter/Return is received by the inChar input port.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("defaultValue [string]:")]),t._v(" An optional string text which is used a initial value for the stringbuffer.")])])])])}),[],!1,null,null,null);e.default=s.exports},759:function(t,e,r){t.exports=r.p+"assets/img/stringappend.ffa6ba12.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[237],{1198:function(t,e,r){"use strict";r.r(e);var n=r(2),s=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"string-append"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#string-append"}},[t._v("#")]),t._v(" String Append")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("Appends an incoming string or ASCII character to a stringbuffer, the updated stringbuffer is sent to an output port. Incoming events are available to send the final string to a dedicated output port and to clear the stringbuffer (or set it to a default value respectively).")]),t._v(" "),e("p",[e("img",{attrs:{src:r(760),alt:"Screenshot: StringAppend plugin",title:"Screenshot: StringAppend plugin"}})]),t._v(" "),e("p",[t._v("StringAppend plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("inStr [string]:")]),t._v(" String input port.")]),t._v(" "),e("li",[e("strong",[t._v("inChar [integer]:")]),t._v(" ASCII code input port.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("actResult [string]:")]),t._v(" String output port for current stringbuffer content.")]),t._v(" "),e("li",[e("strong",[t._v("finalResult [string]:")]),t._v(" String output port for final stringbuffer content (triggered by event or enter).")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-ports"}},[t._v("#")]),t._v(" Event Listener Ports")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sendNow:")]),t._v(" sends the current content of the stringbuffer to the “finalResult” output port.")]),t._v(" "),e("li",[e("strong",[t._v("sendNowAndClear:")]),t._v(" sends the current content of the stringbuffer to the “finalResult” output port and sets the stringbuffer to the default value.")]),t._v(" "),e("li",[e("strong",[t._v("deleteCharacter:")]),t._v(" deletes the last character of the stringbuffer.")]),t._v(" "),e("li",[e("strong",[t._v("clear:")]),t._v(" sets the stringbuffer to the default value.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("autoSendAtEnter [boolean]:")]),t._v(" If true, the stringbuffer is sent and cleared when the ASCII value for Enter/Return is received by the inChar input port.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("defaultValue [string]:")]),t._v(" An optional string text which is used a initial value for the stringbuffer.")])])])])}),[],!1,null,null,null);e.default=s.exports},760:function(t,e,r){t.exports=r.p+"assets/img/stringappend.ffa6ba12.jpg"}}]); \ No newline at end of file diff --git a/assets/js/238.8c1e90b5.js b/assets/js/238.580e0546.js similarity index 90% rename from assets/js/238.8c1e90b5.js rename to assets/js/238.580e0546.js index b72b595641..0983cf11aa 100644 --- a/assets/js/238.8c1e90b5.js +++ b/assets/js/238.580e0546.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[238],{1197:function(t,r,e){"use strict";e.r(r);var s=e(2),n=Object(s.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"stringdelay"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#stringdelay"}},[t._v("#")]),t._v(" StringDelay")]),t._v(" "),r("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),r("p",[t._v("This plugin passes received string values after a defined delay.")]),t._v(" "),r("p",[r("img",{attrs:{src:e(760),alt:"Screenshot: StringDelay plugin",title:"Screenshot: StringDelay plugin"}})]),t._v(" "),r("p",[t._v("StringDelay plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("in (string):")]),t._v(" Input port for the incoming string.")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("out (string):")]),t._v(" Output port for the delayed string.")])]),t._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("delay [integer]:")]),t._v(" Delay between input and output of the string (in milliseconds).")])])])}),[],!1,null,null,null);r.default=n.exports},760:function(t,r,e){t.exports=e.p+"assets/img/stringdelay.f660f62d.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[238],{1199:function(t,r,e){"use strict";e.r(r);var s=e(2),n=Object(s.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"stringdelay"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#stringdelay"}},[t._v("#")]),t._v(" StringDelay")]),t._v(" "),r("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),r("p",[t._v("This plugin passes received string values after a defined delay.")]),t._v(" "),r("p",[r("img",{attrs:{src:e(761),alt:"Screenshot: StringDelay plugin",title:"Screenshot: StringDelay plugin"}})]),t._v(" "),r("p",[t._v("StringDelay plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("in (string):")]),t._v(" Input port for the incoming string.")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("out (string):")]),t._v(" Output port for the delayed string.")])]),t._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("delay [integer]:")]),t._v(" Delay between input and output of the string (in milliseconds).")])])])}),[],!1,null,null,null);r.default=n.exports},761:function(t,r,e){t.exports=e.p+"assets/img/stringdelay.f660f62d.jpg"}}]); \ No newline at end of file diff --git a/assets/js/239.8d0a5254.js b/assets/js/239.5fbd1ec2.js similarity index 98% rename from assets/js/239.8d0a5254.js rename to assets/js/239.5fbd1ec2.js index 5c9b6c8072..45391e688c 100644 --- a/assets/js/239.8d0a5254.js +++ b/assets/js/239.5fbd1ec2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[239],{1200:function(t,e,s){"use strict";s.r(e);var r=s(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component has twenty slots for text strings. These strings can be sent to the output port via incoming events or by directly addressing a slot number using the input port.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(763),alt:"Screenshot: StringDispatcher plugin",title:"Screenshot: StringDispatcher plugin"}})]),t._v(" "),e("p",[t._v("StringDispatcher plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("slotDispatch [integer]:")]),t._v(" Sends the string from the slot defined by number.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("dispatchSlot1…dispatchSlot20:")]),t._v(" These events cause text from the slot: 1…20 to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchNextSlot:")]),t._v(" This event causes text from the next (not empty) slot to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchCurrentSlot:")]),t._v(" This event causes text from the current slot to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchPreviousSlot:")]),t._v(" This event causes text from the previous (not empty) slot to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("resetToFirstSlot:")]),t._v(" This event resets the internal slot counter (for next/previous) to the first slot.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchSlotSeries:")]),t._v(" This event causes text in sequence from all not empty slots to be sent, with a delay defined by the delay property.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" The interval (in milliseconds) which will be used for sending strings sequentially from all slots.")]),t._v(" "),e("li",[e("strong",[t._v("slot1…slot20 [string]:")]),t._v(" 20 slots which contains the text to be sent")])])])}),[],!1,null,null,null);e.default=n.exports},763:function(t,e,s){t.exports=s.p+"assets/img/stringdispatcher.9540c871.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[239],{1201:function(t,e,s){"use strict";s.r(e);var r=s(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component has twenty slots for text strings. These strings can be sent to the output port via incoming events or by directly addressing a slot number using the input port.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(763),alt:"Screenshot: StringDispatcher plugin",title:"Screenshot: StringDispatcher plugin"}})]),t._v(" "),e("p",[t._v("StringDispatcher plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("slotDispatch [integer]:")]),t._v(" Sends the string from the slot defined by number.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("dispatchSlot1…dispatchSlot20:")]),t._v(" These events cause text from the slot: 1…20 to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchNextSlot:")]),t._v(" This event causes text from the next (not empty) slot to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchCurrentSlot:")]),t._v(" This event causes text from the current slot to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchPreviousSlot:")]),t._v(" This event causes text from the previous (not empty) slot to be sent.")]),t._v(" "),e("li",[e("strong",[t._v("resetToFirstSlot:")]),t._v(" This event resets the internal slot counter (for next/previous) to the first slot.")]),t._v(" "),e("li",[e("strong",[t._v("dispatchSlotSeries:")]),t._v(" This event causes text in sequence from all not empty slots to be sent, with a delay defined by the delay property.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("delay [integer]:")]),t._v(" The interval (in milliseconds) which will be used for sending strings sequentially from all slots.")]),t._v(" "),e("li",[e("strong",[t._v("slot1…slot20 [string]:")]),t._v(" 20 slots which contains the text to be sent")])])])}),[],!1,null,null,null);e.default=n.exports},763:function(t,e,s){t.exports=s.p+"assets/img/stringdispatcher.9540c871.jpg"}}]); \ No newline at end of file diff --git a/assets/js/24.cfb5a2f6.js b/assets/js/24.1cfbba75.js similarity index 99% rename from assets/js/24.cfb5a2f6.js rename to assets/js/24.1cfbba75.js index bc21a25bbf..c901773d9c 100644 --- a/assets/js/24.cfb5a2f6.js +++ b/assets/js/24.1cfbba75.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{289:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_c0991ef32ae9b458.424ba3f3.png"},290:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_4dfe72317ab9f571.6b0975c3.jpg"},291:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_b6693a1cbcd9178a.03fc763d.png"},292:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_f1a0b4f36dd370ba.c1a39a2a.jpg"},293:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_fb7627584ba9d5d7.45a2067d.png"},294:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_3e993efbc73f2910.c6357005.png"},939:function(t,e,a){"use strict";a.r(e);var s=a(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"are-development-manual"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-development-manual"}},[t._v("#")]),t._v(" ARE Development Manual")]),t._v(" "),e("p",[t._v("The AsTeRICS source code repository is hosted at github and located at")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS",target:"_blank",rel:"noopener noreferrer"}},[e("strong",[t._v("https://github.com/asterics/AsTeRICS")]),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("The source code contains open source software modules in JAVA, C++ and C, and proprietary modules by AsTeRICS partners which are available in binary from (.dll or .exe).")]),t._v(" "),e("p",[t._v("The licenses of the utilized software packages and 3rd party products can be viewed in the file "),e("em",[t._v("/documentation/licenses.doc")])]),t._v(" "),e("p",[t._v("Currently, the editor for OSKA (the on-screen keyboard application) is the only commercial software package within the AsTeRICS framework – and not included in the free downloads. The OSKA editor is only needed if you want to design custom on-screen keyboard layouts for OSKA (see AsTeRICS User Manual).")]),t._v(" "),e("h2",{attrs:{id:"understanding-the-component-build-scripts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#understanding-the-component-build-scripts"}},[t._v("#")]),t._v(" Understanding the component build-scripts")]),t._v(" "),e("p",[t._v("A typical ANT build script for an ARE component looks like the following:")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("project")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("component.id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("processor.MyComponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- set global properties for this build --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("build"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../out/production/${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src.java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dist"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("runtime"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../../examples/ARE"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bin"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${osgi}/org.eclipse.osgi_3.6.0.v20100517.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${middleware}/asterics.ARE.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the time stamp --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("tstamp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the build directory structure used by compile --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mkdir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile the source "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("javac")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("srcdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${src.java}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("destdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("verbose")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("debug")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${debug}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("classpath")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${classpath}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("classpath")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("refid")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("generate the OSGi bundle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("jar")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("jarfile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("manifest")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}/META-INF/MANIFEST.MF"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("fileset")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("copy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("file")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("tofile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${runtime}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[t._v("In the first section of the build script, folder locations for the build intermediates, the final build products (.jar file) and the classpath are defined. The classpath usually points to the “bin” folder, the middleware “asterics.ARE.jar” and the osgi distribution. If a component needs additional resources, their location has to be defined here.")]),t._v(" "),e("p",[t._v("Subsequently the build script defines two build targets: the compilation of the Java source code and the creation of the .jar file. If the .jar file shall contain additional .dlls with native code, they have to be specified in the Manifest file as shows in section 5.14.1.")]),t._v(" "),e("p",[t._v("After the .jar file has been created in the distribution folder, it is copied to the runtime folder (/bin/ARE).")]),t._v(" "),e("h2",{attrs:{id:"starting-the-are-middleware-and-component-deployments"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#starting-the-are-middleware-and-component-deployments"}},[t._v("#")]),t._v(" Starting the ARE middleware and component deployments")]),t._v(" "),e("p",[t._v("To test the ARE and component bundles, open the folder “/bin/ARE”, and use ARE.exe, start.bat or start_debug.bat.")]),t._v(" "),e("h2",{attrs:{id:"structure-of-the-runtime-folder-bin-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-the-runtime-folder-bin-are"}},[t._v("#")]),t._v(" Structure of the runtime folder “./bin/ARE”:")]),t._v(" "),e("p",[t._v("This folder contains dependencies for running the ARE middleware and the .jars resulting from ANT builds, it has the following structure:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("/\n+- bin/\n +- ARE/\n +- data/ folder for plugin working data\n +- models/ stored models (configurations)\n +- profile/\n +- config.ini system bundles to be started\n +- services.ini general service bundles to be started\n +- services-windows.ini windows-specific service bundles\n +- services-linux.ini linux-specific service bundles\n +- services-macosx.ini macosx-specific service bundles\n +- org.eclipse.osgi/ osgi bundle cache folder\n +- 1238790741.log system log messages, stack trace\n +- tools/ plugin helper apps and dlls\n +- .logger stores console logging settings\n +- ARE.exe starts the ARE without console output\n +- areProperties stores recent window/GUI properties\n +- component bundle(s)\n +- asterics.ARE.jar ARE middleware\n +- asterics.mw.services.cimcommunication.jar CIM port manager\n +- grizzly-httpservice-bundle-2.3.23.jar http service for webservice feature\n +- javacv-*-linux|windows|macosx.jar platform specific javacv service\n +- tmp/*.log application log files\n +- jtester.exe helper app for checking Java version\n +- logging.properties configuration of loglevel etc.\n +- org.eclipse.osgi.*.jar osgi distribution\n +- sleeper.exe helper app for launcher timing\n +- start.bat starts ARE with console output\n +- findjava.bat searches for the newest 32bit JRE\n +- start_debug.bat starts ARE with Eclipse debug support\n +- start.sh starts ARE without console on Linux\n +- start_debug.sh starts ARE with debugging on Linux\n +- VCChecker.jar helper jar for checking VC redist dependency\n")])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Important Note: The osgi configuration folder “org.eclipse.osgi” in the “profile” subdirectory has to be deleted if .dlls in .jar bundles are updated or changed. (This folder is automatically created when starting the ARE and holds working data for the OSGI-bundles.) The One-Click build.xml script described in chapter 2.4.2 deletes the folder automatically.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-services"}},[t._v("#")]),t._v(" AsteRICS services")]),t._v(" "),e("p",[t._v("An AsteRICS service is a bundle that provides ARE-wide functionality usable by other services or plugins. The service can be optionally disabled which means that the service bundle is not installed and not activated. The file services.ini contains a list of general services to be loaded. Whereas the services-windows.ini, services-linux.ini and services-macosx.ini files contain platform dependent service names. You can also create your own use-case specific services ini file and edit the start script to load it.")]),t._v(" "),e("h2",{attrs:{id:"running-a-deployment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#running-a-deployment"}},[t._v("#")]),t._v(" Running a deployment")]),t._v(" "),e("p",[t._v("The “ARE.exe” starter application launches the ARE without console output and without debugging instrumentation.")]),t._v(" "),e("p",[t._v("Alternatively, the commandline batch script “start_debug.bat” which is provided in the folder “.bin/ARE” runs Java with additional configuration parameters including:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the location of the OSGi distribution")])]),t._v(" "),e("li",[e("p",[t._v("the profile subfolder which contains the config.ini file: “./bin/ARE/profile”")])]),t._v(" "),e("li",[e("p",[t._v("debugging instrumentation for the remote debugging server connection")])])]),t._v(" "),e("p",[t._v("After starting the ARE middleware, bundles are loaded and started on-demand if they are needed for the deployment of a model. If everything is properly configured, the ARE window comes up with a GUI and provides ASAPI server functionalities for connection of the ACS or other client applications.")]),t._v(" "),e("h2",{attrs:{id:"are-webserver-including-rest-api-websocket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver-including-rest-api-websocket"}},[t._v("#")]),t._v(" ARE webserver (including REST API, websocket)")]),t._v(" "),e("p",[t._v("The ARE contains a service that creates several web-based services. These include")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a webserver with document root "),e("em",[t._v("ARE/web")]),t._v(" and URL: "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a websocket at URL "),e("a",{attrs:{href:"http://localhost:8082/ws/astericsData",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8082/ws/astericsData"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a REST API at URL "),e("a",{attrs:{href:"http://localhost:8081/rest",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/rest"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a javascript REST API client implementation example at "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])])]),t._v(" "),e("h2",{attrs:{id:"define-autostart-model-per-command-line"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#define-autostart-model-per-command-line"}},[t._v("#")]),t._v(" Define autostart model per command line")]),t._v(" "),e("p",[t._v("By starting the ARE with the name of a model as first command line parameter a model that should be started automatically can be defined. The model must exist in the sub-folder “models”.")]),t._v(" "),e("p",[t._v("‘ARE.exe CameraMouse.acs’")]),t._v(" "),e("p",[t._v("or")]),t._v(" "),e("p",[t._v("‘start_debug.bat CameraMouse.acs’")]),t._v(" "),e("h2",{attrs:{id:"change-model-task-submit-timeout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-model-task-submit-timeout"}},[t._v("#")]),t._v(" Change model task submit timeout")]),t._v(" "),e("p",[t._v("The file “areProperties” contains properties to configure ARE features and to configure the internal model execution behaviour. The following internal model execution properties exist:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("ThreadPoolTasks.submitTimeout=20000")]),t._v(" "),e("ul",[e("li",[t._v("When submitting a task to be executed in the ModelExecutor thread a submit timeout can be configured. After the time elapsed a TimeoutException is thrown. The timeout value must be specified in milliseconds."),e("br"),t._v("\nThe submit timeout is used for starting, stopping, pausing and resuming a model.")])])])]),t._v(" "),e("h2",{attrs:{id:"debugging-the-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#debugging-the-are"}},[t._v("#")]),t._v(" Debugging the ARE")]),t._v(" "),e("p",[t._v("If the ARE is started using the “start_debug.bat” script and source-level debug information was added during the compilation (see section 2.3), debugging with Eclipse is supported via a remote debugging connection. This is a convenient way for dimagesebugging an OSGI-based java framework with a lot of plugins. To enable the debugging support in Eclipse, a Debug Configuration is created via the dedicated menu entry:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(289),alt:""}})]),t._v(" "),e("p",[t._v("Create a “Remote Java Application” Debug Configuration and assign a name for it, e.g. “ARE”. Then, specify the connection properties of the Debug Configuration to use the Host “localhost” and the Socket/Port “1044” (this port is given in the ARE build scripts for the remote debug server to listen for incoming client connections):")]),t._v(" "),e("p",[e("img",{attrs:{src:a(290),alt:""}})]),t._v(" "),e("p",[t._v("Now launch the ARE using “start_debug.bat”. The messages in the console window should indicate the establishment of the listening socket 1044 for the debugging connection:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(291),alt:""}})]),t._v(" "),e("p",[t._v("Now, the usual debugging support of Eclipse can be used, including breakpoints in middleware or components, variable and context watch windows, single stepping etc. All these operations are performed in the Eclipse “Debug” perspective.")]),t._v(" "),e("p",[t._v("The following screenshot shows a program execution of the ARE which ran into a breakpoint (here: the OSKA plugin was halted as a command was selected in the OSKA-application and transferred to the ARE plugin’s command handler:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(292),alt:""}})]),t._v(" "),e("p",[e("img",{attrs:{src:a(293),alt:""}})]),t._v(" "),e("p",[t._v("If the source-level debug information is missing (due to compilation without debugging support) an error message indicates a problem, e.g. the missing line number for breakpoint installation:")]),t._v(" "),e("h2",{attrs:{id:"services-and-utils-infrastructure-for-plugins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#services-and-utils-infrastructure-for-plugins"}},[t._v("#")]),t._v(" Services and Utils: Infrastructure for plugins")]),t._v(" "),e("p",[t._v("The ARE Services are a set of classes that enable the direct interaction between AsTeRICS plugins and other software to directly interact with the runtime environment. The most significant ARE Services are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIM Communication Service: the ARE CIM Communication service layer is a unified approach to allow plugins of the ARE to communicate with their associated hardware modules attached to the AsTeRICS platform via a COM port. A range of hardware modules are provided which implement the dedicated Communication Interface Module (CIM) protocol. Further details on this communication protocol and implementation details for the ARE CIM Communication Service can be found in chapter 5.15.")])]),t._v(" "),e("li",[e("p",[t._v("Remote Connection Service: the remote connection services allows external software that cannot be integrated into the standard plugin inter communication system used by the ARE, for example because of programming language incompatibilities, to work with the AsTeRICS system. For example, the interconnection of OSKA (the On-Screen Keyboard Application developed by AsTeRICS partner SENSORY) and the ARE uses the Remote Connection Service to send key selection information to the ARE. On the other hand, the ARE can reply with cell selection commands or other information. The actual communication is done via a protocol that can be understood by the Java ServerSocket implementation. The port number that the external software component connects to identifies the connecting component.")])]),t._v(" "),e("li",[e("p",[t._v("Local Storage Service: The Local Storage Service will allow plugins to store individual working data “per model” and “per plugin-instance”. This is necessary when plugins need to store own calibration data, pattern recognition samples or similar data. In course of the architectural refinements for the final prototype, a service class will be provided which generates an according folder and respective file read- and write methods.")])]),t._v(" "),e("li",[e("p",[t._v("Native Hook Services for systemwide keyboard and mouse capturing")])]),t._v(" "),e("li",[e("p",[t._v("Computer Vision services to support a unified way for frame grabbing, computer vision processing and video frame rendering.")])]),t._v(" "),e("li",[e("p",[t._v("Logging service")])]),t._v(" "),e("li",[e("p",[t._v("ConversionUtils: Helper class to convert port data streams into Java data types and vice versa.")])]),t._v(" "),e("li",[e("p",[t._v("Class "),e("strong",[t._v("ResourceRegistry")]),t._v(" to fetch resource URIs. If a plugin needs access to a config, data or a multimedia file, the class ResourceRegistry must be used.")])])]),t._v(" "),e("h2",{attrs:{id:"communicating-with-peripherals-cim-communication-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communicating-with-peripherals-cim-communication-service"}},[t._v("#")]),t._v(" Communicating with peripherals: CIM Communication service")]),t._v(" "),e("p",[t._v("Communication between actuator and sensor components in the ARE and peripheral devices is currently defined to use a serial communication i.e. a COM port or a virtual COM port. Messaging via this interface can either adhere to the CIM protocol (see section 5.15) or use any other protocol using the raw port implementation of the CIM communication services.")]),t._v(" "),e("p",[t._v("All the communication with peripheral devices is done through a service in the ARE service layer called CIM Communication. The service is provided as a separate OSGi bundle which places its classes in the package "),e("code",[t._v("$1")]),t._v(". Access to the classes is done by exporting the entire package in the bundle.")]),t._v(" "),e("p",[t._v("Four classes of the CIM Communication service are important to the component programmer:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMPortManager")])]),t._v(" "),e("li",[e("p",[t._v("CIMController")])]),t._v(" "),e("li",[e("p",[t._v("CIMProtocolPacket")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventHandler")])])]),t._v(" "),e("h2",{attrs:{id:"cimportcontroller"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportcontroller"}},[t._v("#")]),t._v(" CIMPortController")]),t._v(" "),e("p",[t._v("CIMPortController is an abstract class which hides the actual implementation of the port controller. The port controller provides the same methods for sending packets using the CIM protocol, for raw port implementations and for future uses such as a port controller handling Zigbee connections.")]),t._v(" "),e("h2",{attrs:{id:"cimportmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportmanager"}},[t._v("#")]),t._v(" CIMPortManager")]),t._v(" "),e("p",[t._v("All CIM ports and other COM ports are access through the main class of the package CIMPortManager. This is implemented as a singleton with a public access method getInstance(). Thus all calls to the CIM communication service have to be done through:")]),t._v(" "),e("p",[e("code",[t._v("CIMPortManager.getInstance()")])]),t._v(" "),e("p",[t._v("Upon creation the CIMPortManager detects all the connected CIMs and registers them in a HashMap. CIMs are identified and stored by the combination of their CIM Id and their unique number. Therefore multiple CIMs of the same CIM Id can be used on the AsTeRICS platform.")]),t._v(" "),e("p",[t._v("On some computers there exist certain serial ports which do not work correctly and behave strangely. An example of such a port is a loopback port which echoes everything written to it or ports created by Bluetooth dongles. Since the CIMPortManager iterates through all serial ports, these ports can cause problems in the auto detection of attached CIMs and even lock up the runtime. Therefore a file "),e("em",[t._v("ignore_ports.txt")]),t._v(" in the directory "),e("em",[t._v("data/cimcommunication")]),t._v(" is parsed upon start of the auto detection. This file should be filled with the name of the COM ports behaving erratically one name per line.")]),t._v(" "),e("p",[t._v("To be able to communicate with a CIM, the CIM port manager provides several methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" uniqueNumber"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("These methods return a CIMPortController (read on for details) instance of the requested CIM. The method using two parameters will return the instance to the port controller which works with the CIM of the exact CIM ID and unique number. If the CIM cannot be found, null will be returned.")]),t._v(" "),e("p",[t._v("Requesting a connection without naming a unique number will return the first port controller connected to a CIM of the correct ID found in the HashMap holding all the port controllers.")]),t._v(" "),e("p",[t._v("Sending data to the connected peripheral can be done in several ways using the following methods of CIMPortManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMUniqueIdentifier")]),t._v(" cuid"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" ctrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Basically these three methods do the same thing, however they do it at different speeds as the first two methods will look up the port controller that the packet should be sent to. Again the method taking only the CIM ID as a parameter will look up the first correct port controller. The third method which is passed the CIMPortController instance returned on getConnection() is the fastest method and should be used whenever possible.")]),t._v(" "),e("p",[t._v("Sending a CIM packet is done by providing the feature address and request code for a certain packet. The feature addresses and request codes can be found in the CIM protocol specification and the basic addresses and requests are also provided as static fields in the CIMProtocolPacket class. If data has to be attached to a CIM protocol packet a byte array holding said data has to be passed to the method, otherwise the data parameter of the method has to be set to null. The caller can also decide whether a CRC checksum should be added to the packet although this is currently unimplemented.")]),t._v(" "),e("h2",{attrs:{id:"cimeventhandler"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimeventhandler"}},[t._v("#")]),t._v(" CIMEventHandler")]),t._v(" "),e("p",[t._v("Receiving a packet is done through use of the CIMEventHandler interface. This interface should be implemented by plugins that wish to communicate with CIMs (or raw ports). The interface contains two methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("These methods are called upon correct reception of a packet or upon discovery of an error (timeout of a reply, packet transmission errors, incorrect order of incoming packets …) respectively by the port controller.")]),t._v(" "),e("p",[t._v("Upon correct reception of a CIM protocol based packet the method handlePacketReceived() is called with an instance of CIMEventPacketReceived as parameter. After conversion of the CIMEvent to this class, the packet can be extracted from the event and processed further.")]),t._v(" "),e("p",[t._v("All detected errors lead to a call of handlePacketError() with an appropriate CIMEvent implementation. The possible implemenations are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMEventErrorPacketFault: holds information to error in packet and the broken packet itself")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventErrorPacketLost: holds information on serial number of lost packet")])])]),t._v(" "),e("p",[t._v("To register the event handler with a specific CIM port controller, the CIMPortController class exposes the following methods:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("addEventHandler(CIMEventHandler hdlr)")])]),t._v(" "),e("li",[e("p",[t._v("removeEventHandler(CIMEventHandler hdlr)")])])]),t._v(" "),e("p",[t._v("A port controller can handle multiple attached event handlers and remove each one separately.")]),t._v(" "),e("h2",{attrs:{id:"cimprotocolpacket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimprotocolpacket"}},[t._v("#")]),t._v(" CIMProtocolPacket")]),t._v(" "),e("p",[t._v("This class holds all the information given in a packet transferred to or from a CIM. There are two ways the developer has to use this class. Upon sending packets the sending component has to set the feature address and the request code. The CIMProtocolPacket class provides the constants as static field to facilitate setting commands.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x00")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x01")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_EVENT_REPLY")]),t._v(" \t\t\t "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x20")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Furthermore the class contains constants for the global features that every CIM has to provide.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("FEATURE_UNIQUE_SERIAL_NUMBER")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Upon reception of an incoming packet the component associated with the CIM sending the packet is notified and a reference to the packet is passed as an instance of CIMProtocolPacket wrapped in a CIMEvent instance. The developer can access all the fields of the packet via the getter methods the class provides:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAreCimID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSerialNumber")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFeatureAddress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequestReplyCode")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCrc")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("h2",{attrs:{id:"serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[t._v("#")]),t._v(" Serial ports not adhering to CIM Protocol (Raw Ports)")]),t._v(" "),e("p",[t._v("Some peripherals use a proprietary protocol to transfer their data. If this is the case the user can open a raw port through the CIMPortManager method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will open the port with the name specified in the parameter portName and set the communication to the specified Baud rate.")]),t._v(" "),e("p",[t._v("Data can be sent to peripheral using the sendPacket() method for the returned CIMPortController. The packet will simply transfer the byte array passed in the data parameter and ignore the values giving the in the other parameter fields.")]),t._v(" "),e("p",[t._v("Received data will be forwarded to the event handler through calls to handlePacketReceived() with a CIMEventRawPacket as parameter. This class holds a public member variable b which holds the value of the received byte. The event handler has to handle the reconstruction of the proprietary packet itself.")]),t._v(" "),e("p",[e("strong",[t._v("HighSpeed Raw Ports:")])]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" highSpeed"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("A second variant opf the getRawConnection method allows specification of a “highSpeed” parameter. If highSpeed is true, the CIMPortController does not apply any connection handling or callbacks for received data to avoid performance problems in higher bandwidth streaming use cases. In this case, the CIMPortController can return the JAVA InputStream for the openend COM port connection and the plug developer can use it as desired:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("portController "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COM12")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("115200")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nin "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" portController"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputStream")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("available")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" myHandlePacket "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("read")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h2",{attrs:{id:"communication-through-a-socket-interface-remote-connection-manager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communication-through-a-socket-interface-remote-connection-manager"}},[t._v("#")]),t._v(" Communication through a socket interface: Remote Connection Manager")]),t._v(" "),e("p",[t._v("When using third party software that runs on the same platform (as for example the prominently used On Screen Keyboard Application OSKA), it becomes necessary to establish a communication between ARE and the third party application. This is managed by the RemoteConnectionManager found in the package eu.asterics.mw.services. The main interface to this manager are the classes RemoteConnectionManager and IRemoteConnectionListener.")]),t._v(" "),e("h2",{attrs:{id:"iremoteconnectionlistener"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#iremoteconnectionlistener"}},[t._v("#")]),t._v(" IRemoteConnectionListener")]),t._v(" "),e("p",[t._v("This interface is implemented by plugins that need to communicate via a socket communication. The interface contains the following methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionEstablished")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dataReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionLost")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionClosed")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("connectionEstablished() is called whenever a plugin requests a connection and the connection has been established. This can either happen if a connection has already been established before or if the new connection has finished its setup and connection process.")]),t._v(" "),e("p",[t._v("dataReceived() is called whenever new data arrives from the other end of the connection. Data is transferred in a byte array and has to be processed by the event listener.")]),t._v(" "),e("p",[t._v("connectionLost() is called when the connection management cannot read from or write to the socket.")]),t._v(" "),e("p",[t._v("connectionClosed() is called after the connection has been closed.")]),t._v(" "),e("h2",{attrs:{id:"remoteconnectionmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#remoteconnectionmanager"}},[t._v("#")]),t._v(" RemoteConnectionManager")]),t._v(" "),e("p",[t._v("The RemoteConnectionManager is implemented as a singleton and can be accessed via a public static member of the class. Thus access is always achieved through:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RemoteConnectionManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance\n")])])]),e("p",[t._v("A connection is opened by calling the RemoteConnectionManager’s method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" requestConnection "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRemoteConnectionListener")]),t._v(" l"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This call will try to access a connection on the specified port. Although the port is actually an integer it is passed as a String here. The method will return true if a connection on this port has already been established and attach the remote connection listener passed in the second argument to the connection. If there is no active connection on the specified port, the requestConnection method will initiate the setup of the connection and return false. With this return value the user can decide whether he needs to perform setup actions or will be able to do this in the connectionEstablished() callback.")]),t._v(" "),e("p",[t._v("The socket connection handling is implemented using two threads, one for sending, one for receiving data. The receiver thread will continuously read data from the socket and forward it to the registered listener calling the dataReceived() method. Since incoming data is handled in another thread than the plugin which will use the socket connection, access to the methods handling this data or the way of passing data should be done in a synchronised code block.")]),t._v(" "),e("p",[t._v("Sending data is done calling the method sendData of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is called using a String holding the port number of the connection socket and an array of bytes to be sent. The call to this method will place the data in an outgoing queue and return true if this was successful. Thus it is not guaranteed that the data has already been sent when the method returns. The sender thread will grab data from the outgoing queue and transfer it via the socket or call the connectionLost() method of the registered listener if there are problems while sending.")]),t._v(" "),e("p",[t._v("Once the connection to a socket is not needed anymore, the user has to close the connection, calling the following method of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("closeConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will close the socket connection, end all threads and return.")]),t._v(" "),e("h2",{attrs:{id:"local-storage-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#local-storage-service"}},[t._v("#")]),t._v(" Local Storage Service")]),t._v(" "),e("p",[t._v("If a model needs to save its own calibration data, training data or other private data that can be different in every model and every instance, the local storage service provides a method to save different data to the same file name on a per plugin instance per model basis.")]),t._v(" "),e("p",[t._v("The service uses a directory tree structure that is placed in the directory the OSGi is run from. Data is saved in a directory called “storage”. In this directory, directories for every model name of a model that uses at least one plugin that accesses local storage can be found. In the third directory layer, directories with the plugin instance name of every plugin that accesses local storage can be found. Thus if a model named “timertest” uses a plugin instance named “timer1” that saves local data this data can be found at the path location “storage/timertest/timer1”.")]),t._v(" "),e("p",[t._v("The service practically consists of only one method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLocalStorageFile")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" fileName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Calling this method located in the AREServices class will return a File object pointing to the requested file name or null if the file could not be opened or the model name could not be retrieved. After opening the file the standard JAVA ways to manipulate files apply.")]),t._v(" "),e("h2",{attrs:{id:"keyboard-mouse-native-hook-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-mouse-native-hook-services"}},[t._v("#")]),t._v(" Keyboard/Mouse Native Hook Services")]),t._v(" "),e("p",[t._v("The AsTeRICS service jnativehook (if enabled) provides access to the library "),e("a",{attrs:{href:"https://github.com/kwhat/jnativehook",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/kwhat/jnativehook"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Additionally, the service contains the singleton NativeHookServices that initializes the library to be usable in plugins. A plugin that wants to be a keaboard/mouse listener only has to add the listener to the GlobalScreen instance of the library.")]),t._v(" "),e("h2",{attrs:{id:"computer-vision-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#computer-vision-services"}},[t._v("#")]),t._v(" Computer Vision Services")]),t._v(" "),e("p",[t._v("The AsTeRICS services javacv and computervision (if enabled) provide access to the library "),e("a",{attrs:{href:"https://github.com/bytedeco/javacv",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/bytedeco/javacv"),e("OutboundLink")],1),t._v(", which again provides access to numerous libs in the field of computer vision (e.g. OpenCV), frame grabbing and frame rendering. Additionally, some helper classes are provided for face detection.")]),t._v(" "),e("h2",{attrs:{id:"data-conversion-utilities"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-conversion-utilities"}},[t._v("#")]),t._v(" Data Conversion Utilities")]),t._v(" "),e("p",[t._v("The middleware provides the class “ConversionUtils” that provide static helper methods to convert model data types to byte arrays and vice versa. The conversion is needed to convert incoming data of input ports or outgoing data to output ports. There are methods for each type of conversion. If two connected ports (output to input) have different data types the data is automatically converted to the data type of the input port.")]),t._v(" "),e("p",[t._v("Check the class ConversionUtils for a full list of supported methods: "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"fetching-resource-uris-with-resourceregistry-class"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fetching-resource-uris-with-resourceregistry-class"}},[t._v("#")]),t._v(" Fetching resource URIs with ResourceRegistry class")]),t._v(" "),e("p",[t._v("If a plugin needs resources like data files (images, keyboard files, haarcascade definitions,…), the class "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("ResourceRegistry"),e("OutboundLink")],1),t._v(" must be used to fetch the resource URI.")]),t._v(" "),e("p",[t._v("This can be done by using the method:")]),t._v(" "),e("p",[e("code",[t._v("public URI getResource(String resourcePath, RES_TYPE type) throws URISyntaxException")])]),t._v(" "),e("p",[t._v("Returns the URI according to the given resourcePath string and the given resource type RES_TYPE.")]),t._v(" "),e("p",[t._v("Please refer to the Javadoc of the class and to the "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Fetching-resources-with-class-ResourceRegistry",target:"_blank",rel:"noopener noreferrer"}},[t._v("wiki page"),e("OutboundLink")],1),t._v(" for further examples.")]),t._v(" "),e("h2",{attrs:{id:"error-reporting-astericserrorhandling"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-astericserrorhandling"}},[t._v("#")]),t._v(" Error Reporting (AstericsErrorHandling)")]),t._v(" "),e("p",[t._v("The "),e("code",[t._v("AstericsErrorHandling")]),t._v(" provides a unified logging and error reporting mechanism. It contains methods for reporting an error of a component or even the ARE.")]),t._v(" "),e("h3",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),e("p",[t._v("The Logging support provides a uniform way of error reporting in the runtime environment so we have utilized the Java logging libraries and the various severity levels supported. The AsTeRICS error handling mechanism is used extensively from the runtime core classes but also utilized by the AsTeRICS components via the AstericsErrorHandling interface.")]),t._v(" "),e("p",[t._v("Each component is allowed to report an error message, a debug information or a simple information to be displayed on the screen. The ARE maintains four separate log files and updates them whenever a new error occurs. In particular there are different loggers for reporting severe errors, warnings, fine errors and one logger that contains them all.")]),t._v(" "),e("p",[t._v("ARE also maintains a status object for the current status of the runtime environment. Whenever a fatal error occurs (either internally or caused by one of the deployed components) the status changes to fatal error. Other possible statuses are unknown, OK, deployed, running and paused.")]),t._v(" "),e("p",[t._v("The ACS can request the current status of the runtime environment and update its own state accordingly. For example the ACS user can be informed about the current ARE status while the ACS will terminate a connection (or refuse to establish a new one) with a non-working ARE.")]),t._v(" "),e("p",[t._v("Using a Logger is the recommended way to report notifications or error descriptions to the user. In the ARE framework, using the Java logging service is recommended. The Java logger can be configured using the file “logging.properties” (see section 2.3.3.1) and used as follows:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("…"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsErrorHandling")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h3",{attrs:{id:"error-reporting-of-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-of-components"}},[t._v("#")]),t._v(" Error Reporting of components")]),t._v(" "),e("p",[t._v("If a component wants to notify an error it should use the following method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_warning.log” file. Additionally the status of the component is set to error with the given error message and an error dialog is shown in the ARE gui, if enabled.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportInfo")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" info"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_fine.log” file.")]),t._v(" "),e("h3",{attrs:{id:"status-checking"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#status-checking"}},[t._v("#")]),t._v(" Status checking")]),t._v(" "),e("p",[t._v("The status checking mechanism is responsible for recording the current status of the ARE or the error state of a component. The status is recorded by creating and storing objects called "),e("em",[t._v("statusObjects")]),t._v(". A statusObject stores the status of its creator as a string, its creator (the ARE or the specific component) and the error message.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setStatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" status"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The status of the ARE can be one of the following strings:")]),t._v(" "),e("p",[t._v("UNKNOWN: initial state for the ARE")]),t._v(" "),e("p",[t._v("OK: ARE is running and ready to deploy a model")]),t._v(" "),e("p",[t._v("DEPLOYED: A model has been deployed and the ARE is now ready to run the model")]),t._v(" "),e("p",[t._v("RUNNING: A model is running on the ARE")]),t._v(" "),e("p",[t._v("PAUSED: A model has been deployed and the ARE is in paused mode")]),t._v(" "),e("p",[t._v("ERROR: An error occurred")]),t._v(" "),e("p",[t._v("FATAL_ERROR: A fatal error occurred, model or deployment aborted")]),t._v(" "),e("p",[t._v("The status of a component can only be the ERROR state because this is the only state of a component that we are interested in recording for later use. An ERROR statusObject is automatically created when a component calls the reportError method as described above.")]),t._v(" "),e("p",[t._v("For retrieving the statusObjects, the following method is used:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("queryStatus")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" fullList"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is particularly useful for the ACS to determine the current status of the runtime environment and of the deployed components. If the ARE or one of the components are in a problematic state it can be reflected in the ACS.")]),t._v(" "),e("p",[t._v("The boolean "),e("em",[t._v("fullList")]),t._v(" argument specifies whether the error list to be returned will include all statusObjects generated since the ARE startup or just those that have not been requested by the ACS before.")]),t._v(" "),e("h2",{attrs:{id:"the-are-thread-pool"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-thread-pool"}},[t._v("#")]),t._v(" The ARE Thread Pool")]),t._v(" "),e("p",[t._v("In order to avoid resource greedy threads and to achieve best thread handling, ARE uses one of the Thread Pool implementations provided by Java since JRE 1.5. In particular, we have utilized the java.util.concurrent.Executors library for creating a CachedThreadPool.")]),t._v(" "),e("p",[t._v("A cached thread pool will create threads as needed but will reuse previously instantiated threads when they are available and inactive. A cached thread pool is particularly useful for many short-lived asynchronous tasks and improves the performance of the runtime environment.")]),t._v(" "),e("p",[t._v("Developers are expected to use the ARE thread pool for executing their tasks that require a new Thread. You will need to import the middleware services package in order to get access to the "),e("strong",[t._v("AstericsThreadPool")]),t._v(" class.")]),t._v(" "),e("h2",{attrs:{id:"the-are-gui-support"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-gui-support"}},[t._v("#")]),t._v(" The ARE GUI support")]),t._v(" "),e("p",[t._v("The ARE provides a panel area (“ARE Desktop”) where plugins can display their graphical elements using the ARE GUI support classes. The ACS provides a dedicated canvas editor that allows end users positioning and resizing graphical elements of the plugins. Based on this information, the ARE displays plugins on the local device, maintaining the correct screen position and aspect ratio of graphical elements with respect to the screen resolution of the deployment device. (For more information about the usage of the ACS GUI editor and the ARE GUI control panel refer to the User Manual.)")]),t._v(" "),e("p",[e("img",{attrs:{src:a(294),alt:""}})]),t._v(" "),e("p",[e("strong",[t._v("GUI composition using the ACS GUI designer (right), resulting ARE GUI (left)")])]),t._v(" "),e("p",[t._v("In order to be recognized as GUI-plugin by ACS and ARE, the bundle descriptor of the plugin has to be extended with a dedicated "),e("code",[t._v("")]),t._v(" entry, which specifies the default size in a virtual coordinate system of 10000/10000 pixels. In the deployment model, the ACS will create position and size information according to the area defined in the ACS GUI designer.")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("gui")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("width")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("5000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("height")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("3000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[e("strong",[t._v("The gui element addition to the bundle descriptor")])]),t._v(" "),e("p",[t._v("The AsTeRICS middleware provides some services to the plugin developers in order to allow them displaying their GUI element onto the ARE Desktop. The middleware services encapsulate the complexity of dealing with positioning and allow displaying all GUI elements onto the same container: the ARE Desktop.")]),t._v(" "),e("p",[t._v("All GUI services are defined in eu.asterics.mw.services.AREServices so developers need to import this class in order to get access to the following methods:")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void displayPanel (JPanel panel, IRuntimeComponentInstance componentInstance, boolean display)")])])]),t._v(" "),e("p",[t._v("This method is used for displaying (or hiding) a plugin’s panel at/from the ARE desktop. Developers need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the panel they want to be displayed (or removed)")])]),t._v(" "),e("li",[e("p",[t._v("the plugin object, in order to help the middleware finding the desired position and dimensions from the deployment model")])]),t._v(" "),e("li",[e("p",[t._v("a boolean argument specifying if they wish to hide or show the given panel.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("Dimension getAvailableSpace(IRuntimeComponentInstance componentInstance)")])])])]),t._v(" "),e("p",[t._v("The space that each plugin will occupy on the ARE desktop is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the available space for their graphical elements by calling the getAvailableSpace method which will return the space occupied for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("Point getComponentPosition (IRuntimeComponentInstance componentInstance)")])])]),t._v(" "),e("p",[t._v("The positioning of plugin’s GUI elements is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the position of their graphical elements by calling the getComponentPosition which will return the position on screen for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void adjustFonts(JPanel panel, int maxFontSize, int minFontSize, int offset)")])])]),t._v(" "),e("p",[t._v("This service can be used by plugin developers interested in auto-adjusting the fonts of their GUI components depending on the space occupied for their plugins on the ARE desktop. They need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a panel to which all the internal fonts will be auto-adjusted")])]),t._v(" "),e("li",[e("p",[t._v("the maximum font size (in case there is more space available than needed)")])]),t._v(" "),e("li",[e("p",[t._v("the minimum font size, in case there is too little space which causes the text to become non-readable. Finally, the offset argument is used in case we want to occupy a percentage of the available space.")])])]),t._v(" "),e("p",[t._v("A good approach to GUI plugin development is to analyse existing plugins which provide GUI elements, e.g. the BarDisplay or Oscilloscope actuators, or the Slider or Cellboard sensor components.")]),t._v(" "),e("p",[t._v("If the plugin uses "),e("strong",[t._v("Swing to implement a GUI-widget")]),t._v(" (e.g. Slider,…), please check the following guidelines as well 4.2.8")]),t._v(" "),e("h2",{attrs:{id:"are-core-events-notification-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-core-events-notification-services"}},[t._v("#")]),t._v(" ARE core events notification services")]),t._v(" "),e("p",[t._v("The ARE core events notification service allows plugins to register/unregister to the ARE middleware in order to receive notifications of ARE core events.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void registerAREEventListener(IAREEventListener clazz)")])])]),t._v(" "),e("p",[t._v("It is sometimes necessary that plugins can be notified of various ARE events so they can react as needed. This method can be called by component instances that wish to be notified of such ARE events. Currently, the core events supported are:")]),t._v(" "),e("ul",[e("li",[e("p",[e("em",[t._v("preDeployModel:")]),t._v(" registered ARE event listeners will be notified just before the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postDeployModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStartModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStartModel:")]),t._v(" registered ARE event listeners will be notified immediately after the currently deployed model has been started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStopModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStopModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("prePauseModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postPauseModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preResumeModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postResumeModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified just before the bundles are is installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified immediately after the bundles have been installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("void unregisterAREEventListener(IAREEventListener clazz)")])])])]),t._v(" "),e("p",[t._v("Plugins already registered for receiving ARE core events can un-register using this method.")]),t._v(" "),e("h2",{attrs:{id:"dynamic-properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-properties"}},[t._v("#")]),t._v(" Dynamic Properties")]),t._v(" "),e("p",[t._v("In some applications, the ACS should be able to provide several options for property values which are not known in advance but depend on the current state of the ARE (see AsTeRUCS User Manual, section “Dynamic Properties”)… A typical example is the selection of a file which is available in the ARE file system (e.g. a .wav-file for the wave player plugin). This feature is particularly useful for plugins that are hardware dependent (selecting e.g. a soundcard or a midi player), or depend on the file system.")]),t._v(" "),e("p",[t._v("If a plugin is implementing a dynamic property, the values will be requested from the ARE, as soon as the ACS is synchronized with the ARE, via the ASAPI function:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),e("span",{pre:!0,attrs:{class:"token generics"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n")])])]),e("p",[t._v("The ARE middleware will forward the request for valid property values to the component instance with the given ID. The "),e("code",[t._v("List getRuntimePropertyList(String key)")]),t._v(" method has to be implemented in the "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" class which every AsTeRICS component extends.\nThe method implementation creates the list of valid properties and returns it to the middleware and the latter forwards the string list to the ACS via ASAPI. The ACS will dynamically update the property list in the properties window.")]),t._v(" "),e("p",[t._v("For an example of the dynamic property implementation, see the WaveFilePlayer plugin.")]),t._v(" "),e("h2",{attrs:{id:"data-synchronization"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-synchronization"}},[t._v("#")]),t._v(" Data Synchronization")]),t._v(" "),e("p",[t._v("Some plugins need data of multiple input ports to be able to start processing. Without data synchronization it is possible that one input port of a plugin receives multiple values before another port gets one value, although both signal channels deliver values at the same sampling rate.")]),t._v(" "),e("p",[t._v("The synchronization service provides a buffering mechanism at the middleware level that can be utilized by plugin developers in order to make sure that incoming data of selected input ports arrives synchronized.")]),t._v(" "),e("p",[t._v("To use the synchronization service in the plugin code, plugin developers are expected to extend the "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" instead of implementing the "),e("em",[t._v("IRuntimeInputPort.")]),t._v(" Basically, "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" provides a default implementation for the necessary buffering methods, as shown in the table below.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("abstract")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DefaultRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("receiveData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" startBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" stopBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" isBuffered "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("The designer can define that a plugin’s input port should be synchronized with some other input ports via the ACS. This will cause an argument change of the inputPort element on the deployment model file (e.g.,"),e("code",[t._v('')]),t._v(").")]),t._v(" "),e("p",[t._v("As soon as a model is deployed on the ARE, the middleware collects per component every port noted as synchronized port. When the model is successfully deployed and started, the ARE will buffer data which enters synchronized input ports until data on all synchronized ports has arrived. At that point, the ARE will call a new "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" callback method.")]),t._v(" "),e("p",[t._v("Developers that wish to support data synchronization need to implement the following method at their component instances.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("syncedValuesReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Where dataRow is a HashMap between Input Port ID and byte[]. For synchronized input ports, instead of implementing the regular "),e("em",[t._v("void receiveData(byte[] data)")]),t._v(" method which delivers incoming data of a single port, developers need to implement the "),e("em",[t._v("syncedValuesReceived")]),t._v(" method which will be called from the ARE with synchronized data from all the input ports that have been selected.")]),t._v(" "),e("h2",{attrs:{id:"interfacing-native-c-c-code-via-jni"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#interfacing-native-c-c-code-via-jni"}},[t._v("#")]),t._v(" Interfacing Native C/C++ Code via JNI")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",[e("code",[t._v("## Specifying native libraries in the Manifest\n")])])]),e("p",[t._v("The Manifest file of a bundle which includes native libraries has to specify these .dlls as shown in the following example:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-sensors.mycomponent\nBundle-SymbolicName: org.asterics.mycomponent\nBundle-Version: 0.1.0\nBundle-NativeCode: lib/native/mylib1.dll;\n lib/native/mylib2.dll;\n lib/native/mylib3.dll;\n osname=win32;processor=x86;\n osname=win;processor=x86-64;\n osname=win8;processor=x86;\n osname=win8;processor=x86-64;\n osname=windows 8;processor=x86;\n osname=windows 8;processor=x86-64;\n osname=windows8;processor=x86;\n osname=windows8;processor=x86-64;\n osname=Windows 8.1;processor=x86;\n osname=Windows 8.1;processor=x86-64\nDynamicImport-Package: *\n")])])]),e("p",[t._v("Components which interface native code via JNI and their respective manifest files can be found in the SVN, e.g. the “webcamera” component or the signal processing plugins by Starlab.")]),t._v(" "),e("p",[t._v("Note that the .jar containing the .dlls can be built manually using the command:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("jar "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-cvfm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("/mybundle.jar META-INF/MANIFEST.MF "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])]),e("h2",{attrs:{id:"java-implementation-jni-bridge"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#java-implementation-jni-bridge"}},[t._v("#")]),t._v(" Java-Implementation: JNI-Bridge")]),t._v(" "),e("p",[t._v("The recommended way to interface Java code of an ARE component with native code in a .dll is a bridge class which encapsulates the JNI functions and callbacks and maps the functions of the ARE component’s lifecycle-, port- and property-management to the corresponding functions in the native code. Here is a simple example which comprises one component property and receives data callbacks from a thread implemented in C. The received values are transferred to the component’s output port:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("jni")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mycomponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Statically load the native library */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib1"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib1.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib2"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib2.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib3"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib3.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAnonymousLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("my_outport "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Activates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("activate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Deactivates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("deactivate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Gets the value of the named property.\n *\n * @param key the name of the property to be accessed\n * @return the value of the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Sets the named property to the defined value.\n *\n * @param key the name of the property to be accessed\n * @param value the value to be assigned to the named property\n * @return the value previously assigned to the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code on demand to signify \n * an internal error. The first argument corresponds to an error code \n * and the second argument corresponds to a textual description \n * of the error.\n * @param errorCode an error code\n * @param message a textual description of the error\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("errorReport_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" errorCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("severe")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorCode "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('": "')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code to send data\n * to the component’s output port.\n *\n * @param data1 (range is [0, Short.MAX_VALUE])\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("newData_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"c-implementation-callbacks-and-jni-code"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#c-implementation-callbacks-and-jni-code"}},[t._v("#")]),t._v(" C-Implementation: Callbacks and JNI code")]),t._v(" "),e("p",[t._v("The native C-code needs to be compiled into a .dll and include the JNI header files and libraries. An example for the Microsoft Visual Studio compiler looks as follows:")]),t._v(" "),e("p",[t._v("The following C-example shows how to implement a JNI-callback from a C-thread and an ARE-compliant exchange of a component property:")]),t._v(" "),e("div",{staticClass:"language-c extra-class"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" JavaVM "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" jobject g_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myProperty"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"20"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_activate")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\terror_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetJavaVM")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tjclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newData_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// explicitly ask for a global reference")]),t._v("\n\tg_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_init")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_deactivate")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_exit")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tenv"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("DeleteGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_getProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\t\t\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_setProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n\t strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown */")]),t._v("\n\t strValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\tpollingIntervalValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prepare JNI callback")]),t._v("\n JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n g_jvm"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("AttachCurrentThread")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newCoordinates_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// perform JNI callback")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("CallVoidMethod")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("my_new_data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("This native C-code needs to be compiled into a .dll, the JNI header files and libraries have to be specified to the compiler and linker respectively. An example for the Microsoft Visual Studio build tools looks as follows:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('cl -c -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include" -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include\\win32" -I ".\\3rdparylib" my_c_file.cpp /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_WARNINGS" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /Gm- /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /errorReport:queue \nlink my_c_file.obj /DLL /OUT:".\\my_c_file.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"libmsvc" /LIBPATH:"3rdparylib" "odbc32.lib" "odbccp32.lib" "comctl32.lib" "winmm.lib" "opengl32.lib" "ole32.lib" "strmiids.lib" "uuid.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "oleaut32.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"atlthunk" /NODEFAULTLIB:"LIBCMT" /MANIFESTUAC:"level=\'asInvoker\' uiAccess=\'false\'" /DEBUG /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:QUEUE\n')])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("The compiler and linker switches may differ depending on the nature of your dependency libraries and setup.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-packaging-environment-ape"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-packaging-environment-ape"}},[t._v("#")]),t._v(" AsTeRICS Packaging Environment (APE)")]),t._v(" "),e("p",[t._v("The APE let’s you select a set of AsTeRICS model files and create a downstripped (minimum size) version of the ARE including plugins, configuration files and data files to execute the models. Optionally, the APE allows the creation of native installers for Windows, Linux incl. Raspberry Pi and Mac OSX using "),e("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaFX packaging technology"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("See "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/AsTeRICS-Packaging-Environment-(APE)",target:"_blank",rel:"noopener noreferrer"}},[t._v("APE documentation"),e("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{290:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_c0991ef32ae9b458.424ba3f3.png"},291:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_4dfe72317ab9f571.6b0975c3.jpg"},292:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_b6693a1cbcd9178a.03fc763d.png"},293:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_f1a0b4f36dd370ba.c1a39a2a.jpg"},294:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_fb7627584ba9d5d7.45a2067d.png"},295:function(t,e,a){t.exports=a.p+"assets/img/DeveloperManual_html_3e993efbc73f2910.c6357005.png"},941:function(t,e,a){"use strict";a.r(e);var s=a(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"are-development-manual"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-development-manual"}},[t._v("#")]),t._v(" ARE Development Manual")]),t._v(" "),e("p",[t._v("The AsTeRICS source code repository is hosted at github and located at")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS",target:"_blank",rel:"noopener noreferrer"}},[e("strong",[t._v("https://github.com/asterics/AsTeRICS")]),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("The source code contains open source software modules in JAVA, C++ and C, and proprietary modules by AsTeRICS partners which are available in binary from (.dll or .exe).")]),t._v(" "),e("p",[t._v("The licenses of the utilized software packages and 3rd party products can be viewed in the file "),e("em",[t._v("/documentation/licenses.doc")])]),t._v(" "),e("p",[t._v("Currently, the editor for OSKA (the on-screen keyboard application) is the only commercial software package within the AsTeRICS framework – and not included in the free downloads. The OSKA editor is only needed if you want to design custom on-screen keyboard layouts for OSKA (see AsTeRICS User Manual).")]),t._v(" "),e("h2",{attrs:{id:"understanding-the-component-build-scripts"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#understanding-the-component-build-scripts"}},[t._v("#")]),t._v(" Understanding the component build-scripts")]),t._v(" "),e("p",[t._v("A typical ANT build script for an ARE component looks like the following:")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("project")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("component.id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("processor.MyComponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- set global properties for this build --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("build"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../out/production/${component.id}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src.java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("dist"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("runtime"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../../examples/ARE"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../osgi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../middleware"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("../../services"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v(".."),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("path")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("bin"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${osgi}/org.eclipse.osgi_3.6.0.v20100517.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("pathelement")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${middleware}/asterics.ARE.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("property")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("location")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("src/main/resources"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the time stamp --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("tstamp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Create the build directory structure used by compile --\x3e")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mkdir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("init"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile the source "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("javac")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("srcdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${src.java}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("destdir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("verbose")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("debug")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${debug}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("classpath")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${classpath}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("classpath")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("refid")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asterics.classpath"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("target")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("depends")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("compile"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("description")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("generate the OSGi bundle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("jar")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("jarfile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("basedir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${build}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("manifest")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}/META-INF/MANIFEST.MF"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("fileset")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("dir")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${resources}"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("copy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("file")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${dist}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("tofile")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("${runtime}/asterics.${component.id}.jar"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[t._v("In the first section of the build script, folder locations for the build intermediates, the final build products (.jar file) and the classpath are defined. The classpath usually points to the “bin” folder, the middleware “asterics.ARE.jar” and the osgi distribution. If a component needs additional resources, their location has to be defined here.")]),t._v(" "),e("p",[t._v("Subsequently the build script defines two build targets: the compilation of the Java source code and the creation of the .jar file. If the .jar file shall contain additional .dlls with native code, they have to be specified in the Manifest file as shows in section 5.14.1.")]),t._v(" "),e("p",[t._v("After the .jar file has been created in the distribution folder, it is copied to the runtime folder (/bin/ARE).")]),t._v(" "),e("h2",{attrs:{id:"starting-the-are-middleware-and-component-deployments"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#starting-the-are-middleware-and-component-deployments"}},[t._v("#")]),t._v(" Starting the ARE middleware and component deployments")]),t._v(" "),e("p",[t._v("To test the ARE and component bundles, open the folder “/bin/ARE”, and use ARE.exe, start.bat or start_debug.bat.")]),t._v(" "),e("h2",{attrs:{id:"structure-of-the-runtime-folder-bin-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#structure-of-the-runtime-folder-bin-are"}},[t._v("#")]),t._v(" Structure of the runtime folder “./bin/ARE”:")]),t._v(" "),e("p",[t._v("This folder contains dependencies for running the ARE middleware and the .jars resulting from ANT builds, it has the following structure:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("/\n+- bin/\n +- ARE/\n +- data/ folder for plugin working data\n +- models/ stored models (configurations)\n +- profile/\n +- config.ini system bundles to be started\n +- services.ini general service bundles to be started\n +- services-windows.ini windows-specific service bundles\n +- services-linux.ini linux-specific service bundles\n +- services-macosx.ini macosx-specific service bundles\n +- org.eclipse.osgi/ osgi bundle cache folder\n +- 1238790741.log system log messages, stack trace\n +- tools/ plugin helper apps and dlls\n +- .logger stores console logging settings\n +- ARE.exe starts the ARE without console output\n +- areProperties stores recent window/GUI properties\n +- component bundle(s)\n +- asterics.ARE.jar ARE middleware\n +- asterics.mw.services.cimcommunication.jar CIM port manager\n +- grizzly-httpservice-bundle-2.3.23.jar http service for webservice feature\n +- javacv-*-linux|windows|macosx.jar platform specific javacv service\n +- tmp/*.log application log files\n +- jtester.exe helper app for checking Java version\n +- logging.properties configuration of loglevel etc.\n +- org.eclipse.osgi.*.jar osgi distribution\n +- sleeper.exe helper app for launcher timing\n +- start.bat starts ARE with console output\n +- findjava.bat searches for the newest 32bit JRE\n +- start_debug.bat starts ARE with Eclipse debug support\n +- start.sh starts ARE without console on Linux\n +- start_debug.sh starts ARE with debugging on Linux\n +- VCChecker.jar helper jar for checking VC redist dependency\n")])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Important Note: The osgi configuration folder “org.eclipse.osgi” in the “profile” subdirectory has to be deleted if .dlls in .jar bundles are updated or changed. (This folder is automatically created when starting the ARE and holds working data for the OSGI-bundles.) The One-Click build.xml script described in chapter 2.4.2 deletes the folder automatically.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-services"}},[t._v("#")]),t._v(" AsteRICS services")]),t._v(" "),e("p",[t._v("An AsteRICS service is a bundle that provides ARE-wide functionality usable by other services or plugins. The service can be optionally disabled which means that the service bundle is not installed and not activated. The file services.ini contains a list of general services to be loaded. Whereas the services-windows.ini, services-linux.ini and services-macosx.ini files contain platform dependent service names. You can also create your own use-case specific services ini file and edit the start script to load it.")]),t._v(" "),e("h2",{attrs:{id:"running-a-deployment"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#running-a-deployment"}},[t._v("#")]),t._v(" Running a deployment")]),t._v(" "),e("p",[t._v("The “ARE.exe” starter application launches the ARE without console output and without debugging instrumentation.")]),t._v(" "),e("p",[t._v("Alternatively, the commandline batch script “start_debug.bat” which is provided in the folder “.bin/ARE” runs Java with additional configuration parameters including:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the location of the OSGi distribution")])]),t._v(" "),e("li",[e("p",[t._v("the profile subfolder which contains the config.ini file: “./bin/ARE/profile”")])]),t._v(" "),e("li",[e("p",[t._v("debugging instrumentation for the remote debugging server connection")])])]),t._v(" "),e("p",[t._v("After starting the ARE middleware, bundles are loaded and started on-demand if they are needed for the deployment of a model. If everything is properly configured, the ARE window comes up with a GUI and provides ASAPI server functionalities for connection of the ACS or other client applications.")]),t._v(" "),e("h2",{attrs:{id:"are-webserver-including-rest-api-websocket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver-including-rest-api-websocket"}},[t._v("#")]),t._v(" ARE webserver (including REST API, websocket)")]),t._v(" "),e("p",[t._v("The ARE contains a service that creates several web-based services. These include")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a webserver with document root "),e("em",[t._v("ARE/web")]),t._v(" and URL: "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a websocket at URL "),e("a",{attrs:{href:"http://localhost:8082/ws/astericsData",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8082/ws/astericsData"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a REST API at URL "),e("a",{attrs:{href:"http://localhost:8081/rest",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/rest"),e("OutboundLink")],1)])]),t._v(" "),e("li",[e("p",[t._v("a javascript REST API client implementation example at "),e("a",{attrs:{href:"http://localhost:8081/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8081/"),e("OutboundLink")],1)])])]),t._v(" "),e("h2",{attrs:{id:"define-autostart-model-per-command-line"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#define-autostart-model-per-command-line"}},[t._v("#")]),t._v(" Define autostart model per command line")]),t._v(" "),e("p",[t._v("By starting the ARE with the name of a model as first command line parameter a model that should be started automatically can be defined. The model must exist in the sub-folder “models”.")]),t._v(" "),e("p",[t._v("‘ARE.exe CameraMouse.acs’")]),t._v(" "),e("p",[t._v("or")]),t._v(" "),e("p",[t._v("‘start_debug.bat CameraMouse.acs’")]),t._v(" "),e("h2",{attrs:{id:"change-model-task-submit-timeout"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-model-task-submit-timeout"}},[t._v("#")]),t._v(" Change model task submit timeout")]),t._v(" "),e("p",[t._v("The file “areProperties” contains properties to configure ARE features and to configure the internal model execution behaviour. The following internal model execution properties exist:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("ThreadPoolTasks.submitTimeout=20000")]),t._v(" "),e("ul",[e("li",[t._v("When submitting a task to be executed in the ModelExecutor thread a submit timeout can be configured. After the time elapsed a TimeoutException is thrown. The timeout value must be specified in milliseconds."),e("br"),t._v("\nThe submit timeout is used for starting, stopping, pausing and resuming a model.")])])])]),t._v(" "),e("h2",{attrs:{id:"debugging-the-are"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#debugging-the-are"}},[t._v("#")]),t._v(" Debugging the ARE")]),t._v(" "),e("p",[t._v("If the ARE is started using the “start_debug.bat” script and source-level debug information was added during the compilation (see section 2.3), debugging with Eclipse is supported via a remote debugging connection. This is a convenient way for dimagesebugging an OSGI-based java framework with a lot of plugins. To enable the debugging support in Eclipse, a Debug Configuration is created via the dedicated menu entry:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(290),alt:""}})]),t._v(" "),e("p",[t._v("Create a “Remote Java Application” Debug Configuration and assign a name for it, e.g. “ARE”. Then, specify the connection properties of the Debug Configuration to use the Host “localhost” and the Socket/Port “1044” (this port is given in the ARE build scripts for the remote debug server to listen for incoming client connections):")]),t._v(" "),e("p",[e("img",{attrs:{src:a(291),alt:""}})]),t._v(" "),e("p",[t._v("Now launch the ARE using “start_debug.bat”. The messages in the console window should indicate the establishment of the listening socket 1044 for the debugging connection:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(292),alt:""}})]),t._v(" "),e("p",[t._v("Now, the usual debugging support of Eclipse can be used, including breakpoints in middleware or components, variable and context watch windows, single stepping etc. All these operations are performed in the Eclipse “Debug” perspective.")]),t._v(" "),e("p",[t._v("The following screenshot shows a program execution of the ARE which ran into a breakpoint (here: the OSKA plugin was halted as a command was selected in the OSKA-application and transferred to the ARE plugin’s command handler:")]),t._v(" "),e("p",[e("img",{attrs:{src:a(293),alt:""}})]),t._v(" "),e("p",[e("img",{attrs:{src:a(294),alt:""}})]),t._v(" "),e("p",[t._v("If the source-level debug information is missing (due to compilation without debugging support) an error message indicates a problem, e.g. the missing line number for breakpoint installation:")]),t._v(" "),e("h2",{attrs:{id:"services-and-utils-infrastructure-for-plugins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#services-and-utils-infrastructure-for-plugins"}},[t._v("#")]),t._v(" Services and Utils: Infrastructure for plugins")]),t._v(" "),e("p",[t._v("The ARE Services are a set of classes that enable the direct interaction between AsTeRICS plugins and other software to directly interact with the runtime environment. The most significant ARE Services are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIM Communication Service: the ARE CIM Communication service layer is a unified approach to allow plugins of the ARE to communicate with their associated hardware modules attached to the AsTeRICS platform via a COM port. A range of hardware modules are provided which implement the dedicated Communication Interface Module (CIM) protocol. Further details on this communication protocol and implementation details for the ARE CIM Communication Service can be found in chapter 5.15.")])]),t._v(" "),e("li",[e("p",[t._v("Remote Connection Service: the remote connection services allows external software that cannot be integrated into the standard plugin inter communication system used by the ARE, for example because of programming language incompatibilities, to work with the AsTeRICS system. For example, the interconnection of OSKA (the On-Screen Keyboard Application developed by AsTeRICS partner SENSORY) and the ARE uses the Remote Connection Service to send key selection information to the ARE. On the other hand, the ARE can reply with cell selection commands or other information. The actual communication is done via a protocol that can be understood by the Java ServerSocket implementation. The port number that the external software component connects to identifies the connecting component.")])]),t._v(" "),e("li",[e("p",[t._v("Local Storage Service: The Local Storage Service will allow plugins to store individual working data “per model” and “per plugin-instance”. This is necessary when plugins need to store own calibration data, pattern recognition samples or similar data. In course of the architectural refinements for the final prototype, a service class will be provided which generates an according folder and respective file read- and write methods.")])]),t._v(" "),e("li",[e("p",[t._v("Native Hook Services for systemwide keyboard and mouse capturing")])]),t._v(" "),e("li",[e("p",[t._v("Computer Vision services to support a unified way for frame grabbing, computer vision processing and video frame rendering.")])]),t._v(" "),e("li",[e("p",[t._v("Logging service")])]),t._v(" "),e("li",[e("p",[t._v("ConversionUtils: Helper class to convert port data streams into Java data types and vice versa.")])]),t._v(" "),e("li",[e("p",[t._v("Class "),e("strong",[t._v("ResourceRegistry")]),t._v(" to fetch resource URIs. If a plugin needs access to a config, data or a multimedia file, the class ResourceRegistry must be used.")])])]),t._v(" "),e("h2",{attrs:{id:"communicating-with-peripherals-cim-communication-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communicating-with-peripherals-cim-communication-service"}},[t._v("#")]),t._v(" Communicating with peripherals: CIM Communication service")]),t._v(" "),e("p",[t._v("Communication between actuator and sensor components in the ARE and peripheral devices is currently defined to use a serial communication i.e. a COM port or a virtual COM port. Messaging via this interface can either adhere to the CIM protocol (see section 5.15) or use any other protocol using the raw port implementation of the CIM communication services.")]),t._v(" "),e("p",[t._v("All the communication with peripheral devices is done through a service in the ARE service layer called CIM Communication. The service is provided as a separate OSGi bundle which places its classes in the package "),e("code",[t._v("$1")]),t._v(". Access to the classes is done by exporting the entire package in the bundle.")]),t._v(" "),e("p",[t._v("Four classes of the CIM Communication service are important to the component programmer:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMPortManager")])]),t._v(" "),e("li",[e("p",[t._v("CIMController")])]),t._v(" "),e("li",[e("p",[t._v("CIMProtocolPacket")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventHandler")])])]),t._v(" "),e("h2",{attrs:{id:"cimportcontroller"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportcontroller"}},[t._v("#")]),t._v(" CIMPortController")]),t._v(" "),e("p",[t._v("CIMPortController is an abstract class which hides the actual implementation of the port controller. The port controller provides the same methods for sending packets using the CIM protocol, for raw port implementations and for future uses such as a port controller handling Zigbee connections.")]),t._v(" "),e("h2",{attrs:{id:"cimportmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimportmanager"}},[t._v("#")]),t._v(" CIMPortManager")]),t._v(" "),e("p",[t._v("All CIM ports and other COM ports are access through the main class of the package CIMPortManager. This is implemented as a singleton with a public access method getInstance(). Thus all calls to the CIM communication service have to be done through:")]),t._v(" "),e("p",[e("code",[t._v("CIMPortManager.getInstance()")])]),t._v(" "),e("p",[t._v("Upon creation the CIMPortManager detects all the connected CIMs and registers them in a HashMap. CIMs are identified and stored by the combination of their CIM Id and their unique number. Therefore multiple CIMs of the same CIM Id can be used on the AsTeRICS platform.")]),t._v(" "),e("p",[t._v("On some computers there exist certain serial ports which do not work correctly and behave strangely. An example of such a port is a loopback port which echoes everything written to it or ports created by Bluetooth dongles. Since the CIMPortManager iterates through all serial ports, these ports can cause problems in the auto detection of attached CIMs and even lock up the runtime. Therefore a file "),e("em",[t._v("ignore_ports.txt")]),t._v(" in the directory "),e("em",[t._v("data/cimcommunication")]),t._v(" is parsed upon start of the auto detection. This file should be filled with the name of the COM ports behaving erratically one name per line.")]),t._v(" "),e("p",[t._v("To be able to communicate with a CIM, the CIM port manager provides several methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" uniqueNumber"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("These methods return a CIMPortController (read on for details) instance of the requested CIM. The method using two parameters will return the instance to the port controller which works with the CIM of the exact CIM ID and unique number. If the CIM cannot be found, null will be returned.")]),t._v(" "),e("p",[t._v("Requesting a connection without naming a unique number will return the first port controller connected to a CIM of the correct ID found in the HashMap holding all the port controllers.")]),t._v(" "),e("p",[t._v("Sending data to the connected peripheral can be done in several ways using the following methods of CIMPortManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" cimId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMUniqueIdentifier")]),t._v(" cuid"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendPacket")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" ctrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" featureAddress"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" requestCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" crc"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Basically these three methods do the same thing, however they do it at different speeds as the first two methods will look up the port controller that the packet should be sent to. Again the method taking only the CIM ID as a parameter will look up the first correct port controller. The third method which is passed the CIMPortController instance returned on getConnection() is the fastest method and should be used whenever possible.")]),t._v(" "),e("p",[t._v("Sending a CIM packet is done by providing the feature address and request code for a certain packet. The feature addresses and request codes can be found in the CIM protocol specification and the basic addresses and requests are also provided as static fields in the CIMProtocolPacket class. If data has to be attached to a CIM protocol packet a byte array holding said data has to be passed to the method, otherwise the data parameter of the method has to be set to null. The caller can also decide whether a CRC checksum should be added to the packet although this is currently unimplemented.")]),t._v(" "),e("h2",{attrs:{id:"cimeventhandler"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimeventhandler"}},[t._v("#")]),t._v(" CIMEventHandler")]),t._v(" "),e("p",[t._v("Receiving a packet is done through use of the CIMEventHandler interface. This interface should be implemented by plugins that wish to communicate with CIMs (or raw ports). The interface contains two methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("handlePacketError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMEvent")]),t._v(" e"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("These methods are called upon correct reception of a packet or upon discovery of an error (timeout of a reply, packet transmission errors, incorrect order of incoming packets …) respectively by the port controller.")]),t._v(" "),e("p",[t._v("Upon correct reception of a CIM protocol based packet the method handlePacketReceived() is called with an instance of CIMEventPacketReceived as parameter. After conversion of the CIMEvent to this class, the packet can be extracted from the event and processed further.")]),t._v(" "),e("p",[t._v("All detected errors lead to a call of handlePacketError() with an appropriate CIMEvent implementation. The possible implemenations are:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("CIMEventErrorPacketFault: holds information to error in packet and the broken packet itself")])]),t._v(" "),e("li",[e("p",[t._v("CIMEventErrorPacketLost: holds information on serial number of lost packet")])])]),t._v(" "),e("p",[t._v("To register the event handler with a specific CIM port controller, the CIMPortController class exposes the following methods:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("addEventHandler(CIMEventHandler hdlr)")])]),t._v(" "),e("li",[e("p",[t._v("removeEventHandler(CIMEventHandler hdlr)")])])]),t._v(" "),e("p",[t._v("A port controller can handle multiple attached event handlers and remove each one separately.")]),t._v(" "),e("h2",{attrs:{id:"cimprotocolpacket"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#cimprotocolpacket"}},[t._v("#")]),t._v(" CIMProtocolPacket")]),t._v(" "),e("p",[t._v("This class holds all the information given in a packet transferred to or from a CIM. There are two ways the developer has to use this class. Upon sending packets the sending component has to set the feature address and the request code. The CIMProtocolPacket class provides the constants as static field to facilitate setting commands.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x00")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_FEATURE_LIST")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x01")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_WRITE_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x10")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_READ_FEATURE")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x11")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_EVENT_REPLY")]),t._v(" \t\t\t "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x20")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_RESET_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x80")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_START_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x81")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REQUEST_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COMMAND_REPLY_STOP_CIM")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0x82")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Furthermore the class contains constants for the global features that every CIM has to provide.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("FEATURE_UNIQUE_SERIAL_NUMBER")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Upon reception of an incoming packet the component associated with the CIM sending the packet is notified and a reference to the packet is passed as an instance of CIMProtocolPacket wrapped in a CIMEvent instance. The developer can access all the fields of the packet via the getter methods the class provides:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAreCimID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getSerialNumber")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFeatureAddress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("short")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRequestReplyCode")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCrc")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("h2",{attrs:{id:"serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#serial-ports-not-adhering-to-cim-protocol-raw-ports"}},[t._v("#")]),t._v(" Serial ports not adhering to CIM Protocol (Raw Ports)")]),t._v(" "),e("p",[t._v("Some peripherals use a proprietary protocol to transfer their data. If this is the case the user can open a raw port through the CIMPortManager method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will open the port with the name specified in the parameter portName and set the communication to the specified Baud rate.")]),t._v(" "),e("p",[t._v("Data can be sent to peripheral using the sendPacket() method for the returned CIMPortController. The packet will simply transfer the byte array passed in the data parameter and ignore the values giving the in the other parameter fields.")]),t._v(" "),e("p",[t._v("Received data will be forwarded to the event handler through calls to handlePacketReceived() with a CIMEventRawPacket as parameter. This class holds a public member variable b which holds the value of the received byte. The event handler has to handle the reconstruction of the proprietary packet itself.")]),t._v(" "),e("p",[e("strong",[t._v("HighSpeed Raw Ports:")])]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortController")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" baudRate"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" highSpeed"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("A second variant opf the getRawConnection method allows specification of a “highSpeed” parameter. If highSpeed is true, the CIMPortController does not apply any connection handling or callbacks for received data to avoid performance problems in higher bandwidth streaming use cases. In this case, the CIMPortController can return the JAVA InputStream for the openend COM port connection and the plug developer can use it as desired:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("portController "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CIMPortManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("COM12")]),t._v("”"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("115200")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nin "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" portController"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInputStream")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("available")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" myHandlePacket "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" in"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("read")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h2",{attrs:{id:"communication-through-a-socket-interface-remote-connection-manager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#communication-through-a-socket-interface-remote-connection-manager"}},[t._v("#")]),t._v(" Communication through a socket interface: Remote Connection Manager")]),t._v(" "),e("p",[t._v("When using third party software that runs on the same platform (as for example the prominently used On Screen Keyboard Application OSKA), it becomes necessary to establish a communication between ARE and the third party application. This is managed by the RemoteConnectionManager found in the package eu.asterics.mw.services. The main interface to this manager are the classes RemoteConnectionManager and IRemoteConnectionListener.")]),t._v(" "),e("h2",{attrs:{id:"iremoteconnectionlistener"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#iremoteconnectionlistener"}},[t._v("#")]),t._v(" IRemoteConnectionListener")]),t._v(" "),e("p",[t._v("This interface is implemented by plugins that need to communicate via a socket communication. The interface contains the following methods:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[t._v("\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionEstablished")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dataReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionLost")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("connectionClosed")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("connectionEstablished() is called whenever a plugin requests a connection and the connection has been established. This can either happen if a connection has already been established before or if the new connection has finished its setup and connection process.")]),t._v(" "),e("p",[t._v("dataReceived() is called whenever new data arrives from the other end of the connection. Data is transferred in a byte array and has to be processed by the event listener.")]),t._v(" "),e("p",[t._v("connectionLost() is called when the connection management cannot read from or write to the socket.")]),t._v(" "),e("p",[t._v("connectionClosed() is called after the connection has been closed.")]),t._v(" "),e("h2",{attrs:{id:"remoteconnectionmanager"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#remoteconnectionmanager"}},[t._v("#")]),t._v(" RemoteConnectionManager")]),t._v(" "),e("p",[t._v("The RemoteConnectionManager is implemented as a singleton and can be accessed via a public static member of the class. Thus access is always achieved through:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RemoteConnectionManager")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance\n")])])]),e("p",[t._v("A connection is opened by calling the RemoteConnectionManager’s method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" requestConnection "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRemoteConnectionListener")]),t._v(" l"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This call will try to access a connection on the specified port. Although the port is actually an integer it is passed as a String here. The method will return true if a connection on this port has already been established and attach the remote connection listener passed in the second argument to the connection. If there is no active connection on the specified port, the requestConnection method will initiate the setup of the connection and return false. With this return value the user can decide whether he needs to perform setup actions or will be able to do this in the connectionEstablished() callback.")]),t._v(" "),e("p",[t._v("The socket connection handling is implemented using two threads, one for sending, one for receiving data. The receiver thread will continuously read data from the socket and forward it to the registered listener calling the dataReceived() method. Since incoming data is handled in another thread than the plugin which will use the socket connection, access to the methods handling this data or the way of passing data should be done in a synchronised code block.")]),t._v(" "),e("p",[t._v("Sending data is done calling the method sendData of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("writeData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is called using a String holding the port number of the connection socket and an array of bytes to be sent. The call to this method will place the data in an outgoing queue and return true if this was successful. Thus it is not guaranteed that the data has already been sent when the method returns. The sender thread will grab data from the outgoing queue and transfer it via the socket or call the connectionLost() method of the registered listener if there are problems while sending.")]),t._v(" "),e("p",[t._v("Once the connection to a socket is not needed anymore, the user has to close the connection, calling the following method of RemoteConnectionManager:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("closeConnection")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" port"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This will close the socket connection, end all threads and return.")]),t._v(" "),e("h2",{attrs:{id:"local-storage-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#local-storage-service"}},[t._v("#")]),t._v(" Local Storage Service")]),t._v(" "),e("p",[t._v("If a model needs to save its own calibration data, training data or other private data that can be different in every model and every instance, the local storage service provides a method to save different data to the same file name on a per plugin instance per model basis.")]),t._v(" "),e("p",[t._v("The service uses a directory tree structure that is placed in the directory the OSGi is run from. Data is saved in a directory called “storage”. In this directory, directories for every model name of a model that uses at least one plugin that accesses local storage can be found. In the third directory layer, directories with the plugin instance name of every plugin that accesses local storage can be found. Thus if a model named “timertest” uses a plugin instance named “timer1” that saves local data this data can be found at the path location “storage/timertest/timer1”.")]),t._v(" "),e("p",[t._v("The service practically consists of only one method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLocalStorageFile")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" fileName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Calling this method located in the AREServices class will return a File object pointing to the requested file name or null if the file could not be opened or the model name could not be retrieved. After opening the file the standard JAVA ways to manipulate files apply.")]),t._v(" "),e("h2",{attrs:{id:"keyboard-mouse-native-hook-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-mouse-native-hook-services"}},[t._v("#")]),t._v(" Keyboard/Mouse Native Hook Services")]),t._v(" "),e("p",[t._v("The AsTeRICS service jnativehook (if enabled) provides access to the library "),e("a",{attrs:{href:"https://github.com/kwhat/jnativehook",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/kwhat/jnativehook"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("Additionally, the service contains the singleton NativeHookServices that initializes the library to be usable in plugins. A plugin that wants to be a keaboard/mouse listener only has to add the listener to the GlobalScreen instance of the library.")]),t._v(" "),e("h2",{attrs:{id:"computer-vision-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#computer-vision-services"}},[t._v("#")]),t._v(" Computer Vision Services")]),t._v(" "),e("p",[t._v("The AsTeRICS services javacv and computervision (if enabled) provide access to the library "),e("a",{attrs:{href:"https://github.com/bytedeco/javacv",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/bytedeco/javacv"),e("OutboundLink")],1),t._v(", which again provides access to numerous libs in the field of computer vision (e.g. OpenCV), frame grabbing and frame rendering. Additionally, some helper classes are provided for face detection.")]),t._v(" "),e("h2",{attrs:{id:"data-conversion-utilities"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-conversion-utilities"}},[t._v("#")]),t._v(" Data Conversion Utilities")]),t._v(" "),e("p",[t._v("The middleware provides the class “ConversionUtils” that provide static helper methods to convert model data types to byte arrays and vice versa. The conversion is needed to convert incoming data of input ports or outgoing data to output ports. There are methods for each type of conversion. If two connected ports (output to input) have different data types the data is automatically converted to the data type of the input port.")]),t._v(" "),e("p",[t._v("Check the class ConversionUtils for a full list of supported methods: "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/data/ConversionUtils.java"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"fetching-resource-uris-with-resourceregistry-class"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#fetching-resource-uris-with-resourceregistry-class"}},[t._v("#")]),t._v(" Fetching resource URIs with ResourceRegistry class")]),t._v(" "),e("p",[t._v("If a plugin needs resources like data files (images, keyboard files, haarcascade definitions,…), the class "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE/middleware/src/main/java/eu/asterics/mw/services/ResourceRegistry.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("ResourceRegistry"),e("OutboundLink")],1),t._v(" must be used to fetch the resource URI.")]),t._v(" "),e("p",[t._v("This can be done by using the method:")]),t._v(" "),e("p",[e("code",[t._v("public URI getResource(String resourcePath, RES_TYPE type) throws URISyntaxException")])]),t._v(" "),e("p",[t._v("Returns the URI according to the given resourcePath string and the given resource type RES_TYPE.")]),t._v(" "),e("p",[t._v("Please refer to the Javadoc of the class and to the "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/Fetching-resources-with-class-ResourceRegistry",target:"_blank",rel:"noopener noreferrer"}},[t._v("wiki page"),e("OutboundLink")],1),t._v(" for further examples.")]),t._v(" "),e("h2",{attrs:{id:"error-reporting-astericserrorhandling"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-astericserrorhandling"}},[t._v("#")]),t._v(" Error Reporting (AstericsErrorHandling)")]),t._v(" "),e("p",[t._v("The "),e("code",[t._v("AstericsErrorHandling")]),t._v(" provides a unified logging and error reporting mechanism. It contains methods for reporting an error of a component or even the ARE.")]),t._v(" "),e("h3",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[t._v("#")]),t._v(" Logging")]),t._v(" "),e("p",[t._v("The Logging support provides a uniform way of error reporting in the runtime environment so we have utilized the Java logging libraries and the various severity levels supported. The AsTeRICS error handling mechanism is used extensively from the runtime core classes but also utilized by the AsTeRICS components via the AstericsErrorHandling interface.")]),t._v(" "),e("p",[t._v("Each component is allowed to report an error message, a debug information or a simple information to be displayed on the screen. The ARE maintains four separate log files and updates them whenever a new error occurs. In particular there are different loggers for reporting severe errors, warnings, fine errors and one logger that contains them all.")]),t._v(" "),e("p",[t._v("ARE also maintains a status object for the current status of the runtime environment. Whenever a fatal error occurs (either internally or caused by one of the deployed components) the status changes to fatal error. Other possible statuses are unknown, OK, deployed, running and paused.")]),t._v(" "),e("p",[t._v("The ACS can request the current status of the runtime environment and update its own state accordingly. For example the ACS user can be informed about the current ARE status while the ACS will terminate a connection (or refuse to establish a new one) with a non-working ARE.")]),t._v(" "),e("p",[t._v("Using a Logger is the recommended way to report notifications or error descriptions to the user. In the ARE framework, using the Java logging service is recommended. The Java logger can be configured using the file “logging.properties” (see section 2.3.3.1) and used as follows:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("…"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AstericsErrorHandling")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h3",{attrs:{id:"error-reporting-of-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#error-reporting-of-components"}},[t._v("#")]),t._v(" Error Reporting of components")]),t._v(" "),e("p",[t._v("If a component wants to notify an error it should use the following method:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_warning.log” file. Additionally the status of the component is set to error with the given error message and an error dialog is shown in the ARE gui, if enabled.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("reportInfo")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeComponentInstance")]),t._v(" component"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" info"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The messages will be written in the “asterics_logger_fine.log” file.")]),t._v(" "),e("h3",{attrs:{id:"status-checking"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#status-checking"}},[t._v("#")]),t._v(" Status checking")]),t._v(" "),e("p",[t._v("The status checking mechanism is responsible for recording the current status of the ARE or the error state of a component. The status is recorded by creating and storing objects called "),e("em",[t._v("statusObjects")]),t._v(". A statusObject stores the status of its creator as a string, its creator (the ARE or the specific component) and the error message.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setStatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" status"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" errorMsg"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("The status of the ARE can be one of the following strings:")]),t._v(" "),e("p",[t._v("UNKNOWN: initial state for the ARE")]),t._v(" "),e("p",[t._v("OK: ARE is running and ready to deploy a model")]),t._v(" "),e("p",[t._v("DEPLOYED: A model has been deployed and the ARE is now ready to run the model")]),t._v(" "),e("p",[t._v("RUNNING: A model is running on the ARE")]),t._v(" "),e("p",[t._v("PAUSED: A model has been deployed and the ARE is in paused mode")]),t._v(" "),e("p",[t._v("ERROR: An error occurred")]),t._v(" "),e("p",[t._v("FATAL_ERROR: A fatal error occurred, model or deployment aborted")]),t._v(" "),e("p",[t._v("The status of a component can only be the ERROR state because this is the only state of a component that we are interested in recording for later use. An ERROR statusObject is automatically created when a component calls the reportError method as described above.")]),t._v(" "),e("p",[t._v("For retrieving the statusObjects, the following method is used:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusObject")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("queryStatus")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" fullList"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("This method is particularly useful for the ACS to determine the current status of the runtime environment and of the deployed components. If the ARE or one of the components are in a problematic state it can be reflected in the ACS.")]),t._v(" "),e("p",[t._v("The boolean "),e("em",[t._v("fullList")]),t._v(" argument specifies whether the error list to be returned will include all statusObjects generated since the ARE startup or just those that have not been requested by the ACS before.")]),t._v(" "),e("h2",{attrs:{id:"the-are-thread-pool"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-thread-pool"}},[t._v("#")]),t._v(" The ARE Thread Pool")]),t._v(" "),e("p",[t._v("In order to avoid resource greedy threads and to achieve best thread handling, ARE uses one of the Thread Pool implementations provided by Java since JRE 1.5. In particular, we have utilized the java.util.concurrent.Executors library for creating a CachedThreadPool.")]),t._v(" "),e("p",[t._v("A cached thread pool will create threads as needed but will reuse previously instantiated threads when they are available and inactive. A cached thread pool is particularly useful for many short-lived asynchronous tasks and improves the performance of the runtime environment.")]),t._v(" "),e("p",[t._v("Developers are expected to use the ARE thread pool for executing their tasks that require a new Thread. You will need to import the middleware services package in order to get access to the "),e("strong",[t._v("AstericsThreadPool")]),t._v(" class.")]),t._v(" "),e("h2",{attrs:{id:"the-are-gui-support"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-are-gui-support"}},[t._v("#")]),t._v(" The ARE GUI support")]),t._v(" "),e("p",[t._v("The ARE provides a panel area (“ARE Desktop”) where plugins can display their graphical elements using the ARE GUI support classes. The ACS provides a dedicated canvas editor that allows end users positioning and resizing graphical elements of the plugins. Based on this information, the ARE displays plugins on the local device, maintaining the correct screen position and aspect ratio of graphical elements with respect to the screen resolution of the deployment device. (For more information about the usage of the ACS GUI editor and the ARE GUI control panel refer to the User Manual.)")]),t._v(" "),e("p",[e("img",{attrs:{src:a(295),alt:""}})]),t._v(" "),e("p",[e("strong",[t._v("GUI composition using the ACS GUI designer (right), resulting ARE GUI (left)")])]),t._v(" "),e("p",[t._v("In order to be recognized as GUI-plugin by ACS and ARE, the bundle descriptor of the plugin has to be extended with a dedicated "),e("code",[t._v("")]),t._v(" entry, which specifies the default size in a virtual coordinate system of 10000/10000 pixels. In the deployment model, the ACS will create position and size information according to the area defined in the ACS GUI designer.")]),t._v(" "),e("div",{staticClass:"language-xml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-xml"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("gui")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("width")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("5000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("height")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("3000"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),e("p",[e("strong",[t._v("The gui element addition to the bundle descriptor")])]),t._v(" "),e("p",[t._v("The AsTeRICS middleware provides some services to the plugin developers in order to allow them displaying their GUI element onto the ARE Desktop. The middleware services encapsulate the complexity of dealing with positioning and allow displaying all GUI elements onto the same container: the ARE Desktop.")]),t._v(" "),e("p",[t._v("All GUI services are defined in eu.asterics.mw.services.AREServices so developers need to import this class in order to get access to the following methods:")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void displayPanel (JPanel panel, IRuntimeComponentInstance componentInstance, boolean display)")])])]),t._v(" "),e("p",[t._v("This method is used for displaying (or hiding) a plugin’s panel at/from the ARE desktop. Developers need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("the panel they want to be displayed (or removed)")])]),t._v(" "),e("li",[e("p",[t._v("the plugin object, in order to help the middleware finding the desired position and dimensions from the deployment model")])]),t._v(" "),e("li",[e("p",[t._v("a boolean argument specifying if they wish to hide or show the given panel.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("Dimension getAvailableSpace(IRuntimeComponentInstance componentInstance)")])])])]),t._v(" "),e("p",[t._v("The space that each plugin will occupy on the ARE desktop is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the available space for their graphical elements by calling the getAvailableSpace method which will return the space occupied for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("Point getComponentPosition (IRuntimeComponentInstance componentInstance)")])])]),t._v(" "),e("p",[t._v("The positioning of plugin’s GUI elements is defined by the designer on the ACS and passed to the ARE via ASAPI. Plugin developers can get the position of their graphical elements by calling the getComponentPosition which will return the position on screen for the plugin object passed as argument.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void adjustFonts(JPanel panel, int maxFontSize, int minFontSize, int offset)")])])]),t._v(" "),e("p",[t._v("This service can be used by plugin developers interested in auto-adjusting the fonts of their GUI components depending on the space occupied for their plugins on the ARE desktop. They need to pass")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("a panel to which all the internal fonts will be auto-adjusted")])]),t._v(" "),e("li",[e("p",[t._v("the maximum font size (in case there is more space available than needed)")])]),t._v(" "),e("li",[e("p",[t._v("the minimum font size, in case there is too little space which causes the text to become non-readable. Finally, the offset argument is used in case we want to occupy a percentage of the available space.")])])]),t._v(" "),e("p",[t._v("A good approach to GUI plugin development is to analyse existing plugins which provide GUI elements, e.g. the BarDisplay or Oscilloscope actuators, or the Slider or Cellboard sensor components.")]),t._v(" "),e("p",[t._v("If the plugin uses "),e("strong",[t._v("Swing to implement a GUI-widget")]),t._v(" (e.g. Slider,…), please check the following guidelines as well 4.2.8")]),t._v(" "),e("h2",{attrs:{id:"are-core-events-notification-services"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-core-events-notification-services"}},[t._v("#")]),t._v(" ARE core events notification services")]),t._v(" "),e("p",[t._v("The ARE core events notification service allows plugins to register/unregister to the ARE middleware in order to receive notifications of ARE core events.")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("void registerAREEventListener(IAREEventListener clazz)")])])]),t._v(" "),e("p",[t._v("It is sometimes necessary that plugins can be notified of various ARE events so they can react as needed. This method can be called by component instances that wish to be notified of such ARE events. Currently, the core events supported are:")]),t._v(" "),e("ul",[e("li",[e("p",[e("em",[t._v("preDeployModel:")]),t._v(" registered ARE event listeners will be notified just before the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postDeployModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployment of a model.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStartModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStartModel:")]),t._v(" registered ARE event listeners will be notified immediately after the currently deployed model has been started.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preStopModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postStopModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been stopped.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("prePauseModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postPauseModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been paused.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preResumeModel:")]),t._v(" registered ARE event listeners will be notified just before the currently deployed model is resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postResumeModel:")]),t._v(" registered ARE event listeners will be notified immediately after the deployed model has been resumed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("preBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified just before the bundles are is installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("postBundlesInstalled:")]),t._v(" registered ARE event listeners will be notified immediately after the bundles have been installed.")])]),t._v(" "),e("li",[e("p",[e("em",[t._v("void unregisterAREEventListener(IAREEventListener clazz)")])])])]),t._v(" "),e("p",[t._v("Plugins already registered for receiving ARE core events can un-register using this method.")]),t._v(" "),e("h2",{attrs:{id:"dynamic-properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dynamic-properties"}},[t._v("#")]),t._v(" Dynamic Properties")]),t._v(" "),e("p",[t._v("In some applications, the ACS should be able to provide several options for property values which are not known in advance but depend on the current state of the ARE (see AsTeRUCS User Manual, section “Dynamic Properties”)… A typical example is the selection of a file which is available in the ARE file system (e.g. a .wav-file for the wave player plugin). This feature is particularly useful for plugins that are hardware dependent (selecting e.g. a soundcard or a midi player), or depend on the file system.")]),t._v(" "),e("p",[t._v("If a plugin is implementing a dynamic property, the values will be requested from the ARE, as soon as the ACS is synchronized with the ARE, via the ASAPI function:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),e("span",{pre:!0,attrs:{class:"token generics"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRuntimePropertyList")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" componentID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n")])])]),e("p",[t._v("The ARE middleware will forward the request for valid property values to the component instance with the given ID. The "),e("code",[t._v("List getRuntimePropertyList(String key)")]),t._v(" method has to be implemented in the "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" class which every AsTeRICS component extends.\nThe method implementation creates the list of valid properties and returns it to the middleware and the latter forwards the string list to the ACS via ASAPI. The ACS will dynamically update the property list in the properties window.")]),t._v(" "),e("p",[t._v("For an example of the dynamic property implementation, see the WaveFilePlayer plugin.")]),t._v(" "),e("h2",{attrs:{id:"data-synchronization"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-synchronization"}},[t._v("#")]),t._v(" Data Synchronization")]),t._v(" "),e("p",[t._v("Some plugins need data of multiple input ports to be able to start processing. Without data synchronization it is possible that one input port of a plugin receives multiple values before another port gets one value, although both signal channels deliver values at the same sampling rate.")]),t._v(" "),e("p",[t._v("The synchronization service provides a buffering mechanism at the middleware level that can be utilized by plugin developers in order to make sure that incoming data of selected input ports arrives synchronized.")]),t._v(" "),e("p",[t._v("To use the synchronization service in the plugin code, plugin developers are expected to extend the "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" instead of implementing the "),e("em",[t._v("IRuntimeInputPort.")]),t._v(" Basically, "),e("em",[t._v("DefaultRuntimeInputPort")]),t._v(" provides a default implementation for the necessary buffering methods, as shown in the table below.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("abstract")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DefaultRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IRuntimeInputPort")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("receiveData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" startBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" stopBuffering "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractRuntimeComponentInstance")]),t._v(" c"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n\t\t\t"),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" portID"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("boolean")]),t._v(" isBuffered "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("buffering"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("The designer can define that a plugin’s input port should be synchronized with some other input ports via the ACS. This will cause an argument change of the inputPort element on the deployment model file (e.g.,"),e("code",[t._v('')]),t._v(").")]),t._v(" "),e("p",[t._v("As soon as a model is deployed on the ARE, the middleware collects per component every port noted as synchronized port. When the model is successfully deployed and started, the ARE will buffer data which enters synchronized input ports until data on all synchronized ports has arrived. At that point, the ARE will call a new "),e("em",[t._v("AbstractRuntimeComponentInstance")]),t._v(" callback method.")]),t._v(" "),e("p",[t._v("Developers that wish to support data synchronization need to implement the following method at their component instances.")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("syncedValuesReceived")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("byte")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" dataRow"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("p",[t._v("Where dataRow is a HashMap between Input Port ID and byte[]. For synchronized input ports, instead of implementing the regular "),e("em",[t._v("void receiveData(byte[] data)")]),t._v(" method which delivers incoming data of a single port, developers need to implement the "),e("em",[t._v("syncedValuesReceived")]),t._v(" method which will be called from the ARE with synchronized data from all the input ports that have been selected.")]),t._v(" "),e("h2",{attrs:{id:"interfacing-native-c-c-code-via-jni"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#interfacing-native-c-c-code-via-jni"}},[t._v("#")]),t._v(" Interfacing Native C/C++ Code via JNI")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",[e("code",[t._v("## Specifying native libraries in the Manifest\n")])])]),e("p",[t._v("The Manifest file of a bundle which includes native libraries has to specify these .dlls as shown in the following example:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("Manifest-Version: 1.0\nBundle-ManifestVersion: 2\nBundle-Name: asterics-sensors.mycomponent\nBundle-SymbolicName: org.asterics.mycomponent\nBundle-Version: 0.1.0\nBundle-NativeCode: lib/native/mylib1.dll;\n lib/native/mylib2.dll;\n lib/native/mylib3.dll;\n osname=win32;processor=x86;\n osname=win;processor=x86-64;\n osname=win8;processor=x86;\n osname=win8;processor=x86-64;\n osname=windows 8;processor=x86;\n osname=windows 8;processor=x86-64;\n osname=windows8;processor=x86;\n osname=windows8;processor=x86-64;\n osname=Windows 8.1;processor=x86;\n osname=Windows 8.1;processor=x86-64\nDynamicImport-Package: *\n")])])]),e("p",[t._v("Components which interface native code via JNI and their respective manifest files can be found in the SVN, e.g. the “webcamera” component or the signal processing plugins by Starlab.")]),t._v(" "),e("p",[t._v("Note that the .jar containing the .dlls can be built manually using the command:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("jar "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-cvfm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("/mybundle.jar META-INF/MANIFEST.MF "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n")])])]),e("h2",{attrs:{id:"java-implementation-jni-bridge"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#java-implementation-jni-bridge"}},[t._v("#")]),t._v(" Java-Implementation: JNI-Bridge")]),t._v(" "),e("p",[t._v("The recommended way to interface Java code of an ARE component with native code in a .dll is a bridge class which encapsulates the JNI functions and callbacks and maps the functions of the ARE component’s lifecycle-, port- and property-management to the corresponding functions in the native code. Here is a simple example which comprises one component property and receives data callbacks from a thread implemented in C. The received values are transferred to the component’s output port:")]),t._v(" "),e("div",{staticClass:"language-java extra-class"},[e("pre",{pre:!0,attrs:{class:"language-java"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("jni")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("org"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asterics"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mycomponent"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token import"}},[e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("logging"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Statically load the native library */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib1"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib1.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib2"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib2.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("loadLibrary")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mylib3"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// loads mylib3.dll ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),t._v(" logger "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Logger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAnonymousLogger")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bridge")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyComponentInstance"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("OutputPort")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("my_outport "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Activates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("activate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Deactivates the underlying native code/hardware.\n *\n * @return 0 if everything was OK, a negative number otherwise\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("deactivate")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Gets the value of the named property.\n *\n * @param key the name of the property to be accessed\n * @return the value of the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Sets the named property to the defined value.\n *\n * @param key the name of the property to be accessed\n * @param value the value to be assigned to the named property\n * @return the value previously assigned to the named property\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("native")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setProperty")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code on demand to signify \n * an internal error. The first argument corresponds to an error code \n * and the second argument corresponds to a textual description \n * of the error.\n * @param errorCode an error code\n * @param message a textual description of the error\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("errorReport_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" errorCode"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n logger"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("severe")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorCode "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('": "')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * This method is called back from the native code to send data\n * to the component’s output port.\n *\n * @param data1 (range is [0, Short.MAX_VALUE])\n */")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("newData_callback")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n my_outport"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"c-implementation-callbacks-and-jni-code"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#c-implementation-callbacks-and-jni-code"}},[t._v("#")]),t._v(" C-Implementation: Callbacks and JNI code")]),t._v(" "),e("p",[t._v("The native C-code needs to be compiled into a .dll and include the JNI header files and libraries. An example for the Microsoft Visual Studio compiler looks as follows:")]),t._v(" "),e("p",[t._v("The following C-example shows how to implement a JNI-callback from a C-thread and an ARE-compliant exchange of a component property:")]),t._v(" "),e("div",{staticClass:"language-c extra-class"},[e("pre",{pre:!0,attrs:{class:"language-c"}},[e("code",[e("span",{pre:!0,attrs:{class:"token macro property"}},[e("span",{pre:!0,attrs:{class:"token directive-hash"}},[t._v("#")]),e("span",{pre:!0,attrs:{class:"token directive keyword"}},[t._v("include")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" JavaVM "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" jobject g_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myProperty"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" propertyValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"20"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_activate")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\terror_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetJavaVM")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("g_jvm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\tjclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newData_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// explicitly ask for a global reference")]),t._v("\n\tg_obj "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_init")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jint JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_deactivate")]),t._v(" \n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\tjint error_code "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("my_c_thread_exit")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tenv"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("DeleteGlobalRef")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" error_code"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_getProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\t\t\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nJNIEXPORT jstring JNICALL "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Java_org_asterics_jni_Bridge_setProperty")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jobject obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" jstring value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\tjstring result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown*/")]),t._v("\n\t strKey "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* OutOfMemoryError already thrown */")]),t._v("\n\t strValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("strcmp")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("NewStringUTF")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("propertyValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t\tpollingIntervalValue "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\tresult "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \t"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* property was not found */")]),t._v("\n\t"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strKey"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ReleaseStringUTFChars")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" strValue"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" result"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// prepare JNI callback")]),t._v("\n JNIEnv "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n g_jvm"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("AttachCurrentThread")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("env"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NULL")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jclass cls "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetObjectClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g_obj"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jmethodID mid "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetMethodID")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("cls"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"newCoordinates_callback"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"(IIII)V"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// perform JNI callback")]),t._v("\n env"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("CallVoidMethod")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("jint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("my_new_data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("This native C-code needs to be compiled into a .dll, the JNI header files and libraries have to be specified to the compiler and linker respectively. An example for the Microsoft Visual Studio build tools looks as follows:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('cl -c -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include" -I "C:\\Program Files (x86)\\java\\jdk1.6.0_21\\include\\win32" -I ".\\3rdparylib" my_c_file.cpp /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_WARNINGS" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /Gm- /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /errorReport:queue \nlink my_c_file.obj /DLL /OUT:".\\my_c_file.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"libmsvc" /LIBPATH:"3rdparylib" "odbc32.lib" "odbccp32.lib" "comctl32.lib" "winmm.lib" "opengl32.lib" "ole32.lib" "strmiids.lib" "uuid.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "oleaut32.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"atlthunk" /NODEFAULTLIB:"LIBCMT" /MANIFESTUAC:"level=\'asInvoker\' uiAccess=\'false\'" /DEBUG /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:QUEUE\n')])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("The compiler and linker switches may differ depending on the nature of your dependency libraries and setup.")])]),t._v(" "),e("h2",{attrs:{id:"asterics-packaging-environment-ape"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#asterics-packaging-environment-ape"}},[t._v("#")]),t._v(" AsTeRICS Packaging Environment (APE)")]),t._v(" "),e("p",[t._v("The APE let’s you select a set of AsTeRICS model files and create a downstripped (minimum size) version of the ARE including plugins, configuration files and data files to execute the models. Optionally, the APE allows the creation of native installers for Windows, Linux incl. Raspberry Pi and Mac OSX using "),e("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI",target:"_blank",rel:"noopener noreferrer"}},[t._v("JavaFX packaging technology"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("See "),e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/wiki/AsTeRICS-Packaging-Environment-(APE)",target:"_blank",rel:"noopener noreferrer"}},[t._v("APE documentation"),e("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/240.369897d5.js b/assets/js/240.58bb5d95.js similarity index 92% rename from assets/js/240.369897d5.js rename to assets/js/240.58bb5d95.js index fb7ce5d645..4b5b6e3319 100644 --- a/assets/js/240.369897d5.js +++ b/assets/js/240.58bb5d95.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[240],{1198:function(t,r,n){"use strict";n.r(r);var e=n(2),i=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"frontmatter-title"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),r("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),r("p",[t._v("Adds the preString and postString strings to the incoming string and sends the new string to the output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:n(761),alt:"Screenshot: StringExpander plugin",title:"Screenshot: StringExpander plugin"}})]),t._v(" "),r("p",[t._v("StringExpander plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input [string]:")]),t._v(" String input port.")]),t._v(" "),r("li",[r("strong",[t._v("preString [string]:")]),t._v(" String which will be placed before the input string (as leading string).")]),t._v(" "),r("li",[r("strong",[t._v("postString [string]:")]),t._v(" String which will be placed after the input string (as trailing string).")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),r("ul",[r("li",[r("p",[r("strong",[t._v("preString [string]:")]),t._v(" default leading String.")])]),t._v(" "),r("li",[r("p",[r("strong",[t._v("postString [string]:")]),t._v(" default trailing String.")])]),t._v(" "),r("li",[r("p",[r("strong",[t._v("trim [boolean]:")]),t._v(" if selected, all leading and trailing white-space characters will be removed from the input string.")])])])])}),[],!1,null,null,null);r.default=i.exports},761:function(t,r,n){t.exports=n.p+"assets/img/stringexpander.35b2aef0.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[240],{1200:function(t,r,n){"use strict";n.r(r);var e=n(2),i=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"frontmatter-title"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),r("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),r("p",[t._v("Adds the preString and postString strings to the incoming string and sends the new string to the output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:n(762),alt:"Screenshot: StringExpander plugin",title:"Screenshot: StringExpander plugin"}})]),t._v(" "),r("p",[t._v("StringExpander plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input [string]:")]),t._v(" String input port.")]),t._v(" "),r("li",[r("strong",[t._v("preString [string]:")]),t._v(" String which will be placed before the input string (as leading string).")]),t._v(" "),r("li",[r("strong",[t._v("postString [string]:")]),t._v(" String which will be placed after the input string (as trailing string).")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),r("ul",[r("li",[r("p",[r("strong",[t._v("preString [string]:")]),t._v(" default leading String.")])]),t._v(" "),r("li",[r("p",[r("strong",[t._v("postString [string]:")]),t._v(" default trailing String.")])]),t._v(" "),r("li",[r("p",[r("strong",[t._v("trim [boolean]:")]),t._v(" if selected, all leading and trailing white-space characters will be removed from the input string.")])])])])}),[],!1,null,null,null);r.default=i.exports},762:function(t,r,n){t.exports=n.p+"assets/img/stringexpander.35b2aef0.jpg"}}]); \ No newline at end of file diff --git a/assets/js/241.f0bba66d.js b/assets/js/241.75245bbb.js similarity index 92% rename from assets/js/241.f0bba66d.js rename to assets/js/241.75245bbb.js index 917187245b..f143dade9c 100644 --- a/assets/js/241.f0bba66d.js +++ b/assets/js/241.75245bbb.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[241],{1199:function(t,e,r){"use strict";r.r(e);var s=r(2),i=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("Applies a given filter text to the incoming string. It can be selected if only strings that contain the filter text are passed to the output port, and/or if the filter text shall be removed from the incoming string. Please note that the filter text is applied case sensitive.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(762),alt:"Screenshot: StringFilter plugin",title:"Screenshot: StringFilter plugin"}})]),t._v(" "),e("p",[t._v("StringFilter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [string]:")]),t._v(" String input port.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [string]:")]),t._v(" String output port for processed/filtered string.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("filterText [string]:")]),t._v(" The filter text.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passOnlyIfContains [boolean]:")]),t._v(" If selected, only strings containing the filter text will be passed.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("cropFilterText [boolean]:")]),t._v(" If selected, the filter will be removed before the input string is passed to the output port.")])])])])}),[],!1,null,null,null);e.default=i.exports},762:function(t,e,r){t.exports=r.p+"assets/img/stringfilter.e949de40.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[241],{1204:function(t,e,r){"use strict";r.r(e);var s=r(2),i=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("Applies a given filter text to the incoming string. It can be selected if only strings that contain the filter text are passed to the output port, and/or if the filter text shall be removed from the incoming string. Please note that the filter text is applied case sensitive.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(764),alt:"Screenshot: StringFilter plugin",title:"Screenshot: StringFilter plugin"}})]),t._v(" "),e("p",[t._v("StringFilter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [string]:")]),t._v(" String input port.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out [string]:")]),t._v(" String output port for processed/filtered string.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("filterText [string]:")]),t._v(" The filter text.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passOnlyIfContains [boolean]:")]),t._v(" If selected, only strings containing the filter text will be passed.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("cropFilterText [boolean]:")]),t._v(" If selected, the filter will be removed before the input string is passed to the output port.")])])])])}),[],!1,null,null,null);e.default=i.exports},764:function(t,e,r){t.exports=r.p+"assets/img/stringfilter.e949de40.jpg"}}]); \ No newline at end of file diff --git a/assets/js/242.d2fa9bcd.js b/assets/js/242.43754f9b.js similarity index 93% rename from assets/js/242.d2fa9bcd.js rename to assets/js/242.43754f9b.js index 6f90ba6dde..73888297f8 100644 --- a/assets/js/242.d2fa9bcd.js +++ b/assets/js/242.43754f9b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[242],{1202:function(t,e,r){"use strict";r.r(e);var s=r(2),i=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The String Path Multiplexer component forwards strings from the selected input port to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(764),alt:"Screenshot: StringPathMultiplexer plugin",title:"Screenshot: StringPathMultiplexer plugin"}})]),t._v(" "),e("p",[t._v("StringPathMultiplexer plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1 to input4 [string]:")]),t._v(" The input ports for strings to be multiplexed.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v("[string]**")]),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("* The string output, which sends data of the selected input port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("passPort1 to passPort4:")]),t._v(" The string output, which sends data of the selected input port.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passNextPort:")]),t._v(" selets the next input port. If the currently used port is the maximum port (defined by the number property), input port 1 will be selected.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passPreviousPort:")]),t._v(" selects the previous input port. If the currently used port is port 1, the maximum port (defined by the number property) will be selected.")])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("number [integer]:")]),t._v(" The maximum port number (can be 1 to 4).")])])])}),[],!1,null,null,null);e.default=i.exports},764:function(t,e,r){t.exports=r.p+"assets/img/stringpathmultiplexer.cefdc2b2.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[242],{1207:function(t,e,r){"use strict";r.r(e);var s=r(2),i=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The String Path Multiplexer component forwards strings from the selected input port to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(767),alt:"Screenshot: StringPathMultiplexer plugin",title:"Screenshot: StringPathMultiplexer plugin"}})]),t._v(" "),e("p",[t._v("StringPathMultiplexer plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input1 to input4 [string]:")]),t._v(" The input ports for strings to be multiplexed.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" "),e("strong",[t._v("[string]**")]),e("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),t._v("* The string output, which sends data of the selected input port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("passPort1 to passPort4:")]),t._v(" The string output, which sends data of the selected input port.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passNextPort:")]),t._v(" selets the next input port. If the currently used port is the maximum port (defined by the number property), input port 1 will be selected.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("passPreviousPort:")]),t._v(" selects the previous input port. If the currently used port is port 1, the maximum port (defined by the number property) will be selected.")])])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("number [integer]:")]),t._v(" The maximum port number (can be 1 to 4).")])])])}),[],!1,null,null,null);e.default=i.exports},767:function(t,e,r){t.exports=r.p+"assets/img/stringpathmultiplexer.cefdc2b2.jpg"}}]); \ No newline at end of file diff --git a/assets/js/243.2b0420d1.js b/assets/js/243.111b3ae4.js similarity index 97% rename from assets/js/243.2b0420d1.js rename to assets/js/243.111b3ae4.js index ebd5d04bac..f6e5b55e4f 100644 --- a/assets/js/243.2b0420d1.js +++ b/assets/js/243.111b3ae4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[243],{1204:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The StringPathSelector component allows routing of incoming strings between up to 4 output ports. The desired output port can be directly selected by a dedicated event listener port, or the strings can be switched to the next or previous output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(765),alt:"Screenshot: StringPathSelector plugin",title:"Screenshot: StringPathSelector plugin"}})]),t._v(" "),e("p",[t._v("StringPathSelector plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [string]:")]),t._v(" The incoming string port to be routed.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1 to out4:")]),t._v(" Four output ports where the incoming strings can be routed to.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("select1 to select4:")]),t._v(" An incoming event at these ports directly activates the associated output path (e.g. as an event comes in at select 3, the input string port will be routed to out3.")]),t._v(" "),e("li",[e("strong",[t._v("selectNext:")]),t._v(" The next output port is selected for string output. The maximum number of active ports is set via the activePorts property. If the current number is already the maximum one, the select next event will wrap around the active port number and port 1 will be selected.")]),t._v(" "),e("li",[e("strong",[t._v("selectPrevious:")]),t._v(" The previous output port is selected for string output. If the current port is out1, the maximum port number (given by the activePorts property) will be selected.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("activePorts [integer]:")]),t._v(" The maximum port number in use (can be 1 to 4).")])])])}),[],!1,null,null,null);e.default=s.exports},765:function(t,e,r){t.exports=r.p+"assets/img/stringpathselector.ab8e1a6f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[243],{1205:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Processor (Subcategory: Signal Pathways)")]),t._v(" "),e("p",[t._v("The StringPathSelector component allows routing of incoming strings between up to 4 output ports. The desired output port can be directly selected by a dedicated event listener port, or the strings can be switched to the next or previous output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(765),alt:"Screenshot: StringPathSelector plugin",title:"Screenshot: StringPathSelector plugin"}})]),t._v(" "),e("p",[t._v("StringPathSelector plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in [string]:")]),t._v(" The incoming string port to be routed.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("out1 to out4:")]),t._v(" Four output ports where the incoming strings can be routed to.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("select1 to select4:")]),t._v(" An incoming event at these ports directly activates the associated output path (e.g. as an event comes in at select 3, the input string port will be routed to out3.")]),t._v(" "),e("li",[e("strong",[t._v("selectNext:")]),t._v(" The next output port is selected for string output. The maximum number of active ports is set via the activePorts property. If the current number is already the maximum one, the select next event will wrap around the active port number and port 1 will be selected.")]),t._v(" "),e("li",[e("strong",[t._v("selectPrevious:")]),t._v(" The previous output port is selected for string output. If the current port is out1, the maximum port number (given by the activePorts property) will be selected.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("activePorts [integer]:")]),t._v(" The maximum port number in use (can be 1 to 4).")])])])}),[],!1,null,null,null);e.default=s.exports},765:function(t,e,r){t.exports=r.p+"assets/img/stringpathselector.ab8e1a6f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/244.05ea02ae.js b/assets/js/244.2a48b233.js similarity index 97% rename from assets/js/244.05ea02ae.js rename to assets/js/244.2a48b233.js index 9af38d3c70..8023f04f40 100644 --- a/assets/js/244.05ea02ae.js +++ b/assets/js/244.2a48b233.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[244],{1205:function(t,e,r){"use strict";r.r(e);var s=r(2),a=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("Splits a string with separators in up to 16 outputports.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(766),alt:"Screenshot: StringSplitter plugin",title:"Screenshot: StringSplitter plugin"}})]),t._v(" "),e("p",[t._v("StringSplitter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" String input port. The string which has to be splitted.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output 1 to 16[string]:")]),t._v(" String output ports. Sending the seperated Data.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Seperator [string]:")]),t._v(" Defines the separator. The separator itself will not be part of the result strings. Please note that "),e("a",{attrs:{href:"https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#sum",target:"_blank",rel:"noopener noreferrer"}},[t._v("regular expressions"),e("OutboundLink")],1),t._v(" can be use for the separator. This also means that special characters for the regular expressions are not allowed in the separator string, unless they are introduced with the escape character (backslash). These special characters are: the backslash \\\\, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), and the opening square bracket [, the opening curly brace {. For example: for using the dot as separator, use \\. as separator string.")])])])}),[],!1,null,null,null);e.default=a.exports},766:function(t,e,r){t.exports=r.p+"assets/img/stringsplitter.c64848ba.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[244],{1206:function(t,e,r){"use strict";r.r(e);var s=r(2),a=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("Splits a string with separators in up to 16 outputports.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(766),alt:"Screenshot: StringSplitter plugin",title:"Screenshot: StringSplitter plugin"}})]),t._v(" "),e("p",[t._v("StringSplitter plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("input [string]:")]),t._v(" String input port. The string which has to be splitted.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output 1 to 16[string]:")]),t._v(" String output ports. Sending the seperated Data.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Seperator [string]:")]),t._v(" Defines the separator. The separator itself will not be part of the result strings. Please note that "),e("a",{attrs:{href:"https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#sum",target:"_blank",rel:"noopener noreferrer"}},[t._v("regular expressions"),e("OutboundLink")],1),t._v(" can be use for the separator. This also means that special characters for the regular expressions are not allowed in the separator string, unless they are introduced with the escape character (backslash). These special characters are: the backslash \\\\, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening parenthesis (, the closing parenthesis ), and the opening square bracket [, the opening curly brace {. For example: for using the dot as separator, use \\. as separator string.")])])])}),[],!1,null,null,null);e.default=a.exports},766:function(t,e,r){t.exports=r.p+"assets/img/stringsplitter.c64848ba.png"}}]); \ No newline at end of file diff --git a/assets/js/245.42d41f4c.js b/assets/js/245.2cd92ba6.js similarity index 91% rename from assets/js/245.42d41f4c.js rename to assets/js/245.2cd92ba6.js index c3710d4ad4..4458d56c81 100644 --- a/assets/js/245.42d41f4c.js +++ b/assets/js/245.2cd92ba6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[245],{1208:function(t,o,r){"use strict";r.r(o);var e=r(2),n=Object(e.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"string-to-double"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#string-to-double"}},[t._v("#")]),t._v(" String To Double")]),t._v(" "),o("p",[t._v("Component Type: Processor (Subcategory: Data Converters)")]),t._v(" "),o("p",[t._v("This component converts the incoming string values into the integer values at the output port.")]),t._v(" "),o("p",[o("img",{attrs:{src:r(769),alt:"Screenshot: StringToDouble plugin",title:"Screenshot: StringToDouble plugin"}})]),t._v(" "),o("p",[t._v("StringToDouble plugin")]),t._v(" "),o("h2",{attrs:{id:"input-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("input [string]:")]),t._v(" Input port for the string values to be converted.")])]),t._v(" "),o("h2",{attrs:{id:"output-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("output [double]:")]),t._v(" Output port for the converted double values.")])])])}),[],!1,null,null,null);o.default=n.exports},769:function(t,o,r){t.exports=r.p+"assets/img/stringtodouble.9dd0d127.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[245],{1208:function(t,o,r){"use strict";r.r(o);var e=r(2),n=Object(e.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"string-to-double"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#string-to-double"}},[t._v("#")]),t._v(" String To Double")]),t._v(" "),o("p",[t._v("Component Type: Processor (Subcategory: Data Converters)")]),t._v(" "),o("p",[t._v("This component converts the incoming string values into the integer values at the output port.")]),t._v(" "),o("p",[o("img",{attrs:{src:r(768),alt:"Screenshot: StringToDouble plugin",title:"Screenshot: StringToDouble plugin"}})]),t._v(" "),o("p",[t._v("StringToDouble plugin")]),t._v(" "),o("h2",{attrs:{id:"input-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("input [string]:")]),t._v(" Input port for the string values to be converted.")])]),t._v(" "),o("h2",{attrs:{id:"output-port-description"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),o("ul",[o("li",[o("strong",[t._v("output [double]:")]),t._v(" Output port for the converted double values.")])])])}),[],!1,null,null,null);o.default=n.exports},768:function(t,o,r){t.exports=r.p+"assets/img/stringtodouble.9dd0d127.jpg"}}]); \ No newline at end of file diff --git a/assets/js/246.ee60da55.js b/assets/js/246.dfbbed5d.js similarity index 89% rename from assets/js/246.ee60da55.js rename to assets/js/246.dfbbed5d.js index d298ac212a..3058cd4269 100644 --- a/assets/js/246.ee60da55.js +++ b/assets/js/246.dfbbed5d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[246],{1206:function(t,r,e){"use strict";e.r(r);var n=e(2),s=Object(n.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"string-to-int"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#string-to-int"}},[t._v("#")]),t._v(" String To Int")]),t._v(" "),r("p",[t._v("Component Type: Processor (Subcategory: Data Converters)")]),t._v(" "),r("p",[t._v("This component converts the incoming string values into the integer values at the output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:e(767),alt:"Screenshot: StringToInt plugin",title:"Screenshot: StringToInt plugin"}})]),t._v(" "),r("p",[t._v("StringToInt plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input [string]:")]),t._v(" Input port for the string values to be converted.")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [integer]:")]),t._v(" Output port for the converted integer values.")])]),t._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("hexadecimalInput [boolean]:")]),t._v(" If this property is set, the input string data are regarded as the hexadecimal data string.")])])])}),[],!1,null,null,null);r.default=s.exports},767:function(t,r,e){t.exports=e.p+"assets/img/stringtoint.3fa07379.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[246],{1209:function(t,r,e){"use strict";e.r(r);var n=e(2),s=Object(n.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"string-to-int"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#string-to-int"}},[t._v("#")]),t._v(" String To Int")]),t._v(" "),r("p",[t._v("Component Type: Processor (Subcategory: Data Converters)")]),t._v(" "),r("p",[t._v("This component converts the incoming string values into the integer values at the output port.")]),t._v(" "),r("p",[r("img",{attrs:{src:e(769),alt:"Screenshot: StringToInt plugin",title:"Screenshot: StringToInt plugin"}})]),t._v(" "),r("p",[t._v("StringToInt plugin")]),t._v(" "),r("h2",{attrs:{id:"input-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("input [string]:")]),t._v(" Input port for the string values to be converted.")])]),t._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("output [integer]:")]),t._v(" Output port for the converted integer values.")])]),t._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),r("ul",[r("li",[r("strong",[t._v("hexadecimalInput [boolean]:")]),t._v(" If this property is set, the input string data are regarded as the hexadecimal data string.")])])])}),[],!1,null,null,null);r.default=s.exports},769:function(t,r,e){t.exports=e.p+"assets/img/stringtoint.3fa07379.jpg"}}]); \ No newline at end of file diff --git a/assets/js/247.0424e9d4.js b/assets/js/247.c1a24c8e.js similarity index 91% rename from assets/js/247.0424e9d4.js rename to assets/js/247.c1a24c8e.js index 8992590052..d0fa952c09 100644 --- a/assets/js/247.0424e9d4.js +++ b/assets/js/247.c1a24c8e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[247],{1207:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"text-sender"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#text-sender"}},[t._v("#")]),t._v(" Text Sender")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component sends the string data through the output port when it receives the trigger event.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(768),alt:"Screenshot: TextSender plugin",title:"Screenshot: TextSender plugin"}})]),t._v(" "),e("p",[t._v("TextSender plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setText [string]:")]),t._v(" Updates the text with the incoming string.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sendText:")]),t._v(" This event causes text to be sent.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("text [string]:")]),t._v(" The default text to be sent.")])])])}),[],!1,null,null,null);e.default=n.exports},768:function(t,e,r){t.exports=r.p+"assets/img/textsender.7fb85a38.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[247],{1210:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"text-sender"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#text-sender"}},[t._v("#")]),t._v(" Text Sender")]),t._v(" "),e("h2",{attrs:{id:"component-type-processor-subcategory-event-and-string-processing"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-event-and-string-processing"}},[t._v("#")]),t._v(" Component Type: Processor (Subcategory: Event and String Processing)")]),t._v(" "),e("p",[t._v("This component sends the string data through the output port when it receives the trigger event.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(770),alt:"Screenshot: TextSender plugin",title:"Screenshot: TextSender plugin"}})]),t._v(" "),e("p",[t._v("TextSender plugin")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("setText [string]:")]),t._v(" Updates the text with the incoming string.")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("sendText:")]),t._v(" This event causes text to be sent.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("text [string]:")]),t._v(" The default text to be sent.")])])])}),[],!1,null,null,null);e.default=n.exports},770:function(t,e,r){t.exports=r.p+"assets/img/textsender.7fb85a38.jpg"}}]); \ No newline at end of file diff --git a/assets/js/248.aa3377dd.js b/assets/js/248.6e96bd51.js similarity index 96% rename from assets/js/248.aa3377dd.js rename to assets/js/248.6e96bd51.js index 12cf326897..f341f39f6b 100644 --- a/assets/js/248.aa3377dd.js +++ b/assets/js/248.6e96bd51.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[248],{1284:function(e,t,o){"use strict";o.r(t);var s=o(2),h=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"threshold"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#threshold"}},[e._v("#")]),e._v(" Threshold")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Basic Math)")]),e._v(" "),t("p",[e._v("This component takes an input and compares it to a given threshold and generates an according output value dependent on the operation mode. The component allows three operation modes: binary, deadzone and cut off which are described in the property section. The component allows operating with a hysteresis by setting the thresholds for transition from below to above and vice versa differently. Transitions over the thresholds are always evaluated arithmetically thus a below threshold to above transition always happens when the new value is mathematically greater than the threshold while the last input was less than threshold. Respectively the transition from above to below happens when the last value was greater than the threshold value and the new value is less than it. This statement also holds for negative values in the threshold."),t("br"),e._v("\nThe component provides the possibility to raise events on threshold transitions either on below to above, above to below or on both.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(865),alt:"Screenshot: Threshold plugin",title:"Screenshot: Threshold plugin"}})]),e._v(" "),t("p",[e._v("Threshold plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in [double]:")]),e._v(" the input to be evaluated.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("out[double]:")]),e._v(" the value that the threshold passes on for the given input.")])]),e._v(" "),t("h2",{attrs:{id:"event-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-port-description"}},[e._v("#")]),e._v(" Event Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventPosEdge:")]),e._v(" This event port will trigger an event when the value crosses the thresholdHigh property from below.")]),e._v(" "),t("li",[t("strong",[e._v("eventNegEdge:")]),e._v(" This event port will trigger an event when the value crosses the thresholdLow property from above.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("thresholdHigh [double]:")]),e._v(" The threshold that is checked for transitions from below the threshold to above.")]),e._v(" "),t("li",[t("strong",[e._v("thresholdLow [double]:")]),e._v(" The threshold that is checked for transitions from above the threshold to below. Setting it to the same value as threshold_high will remove the hysteresis from the threshold system.")]),e._v(" "),t("li",[t("strong",[e._v("outputHigh [double]:")]),e._v(" The value to be sent to the output if the input is above the threshold in certain operation modes.")]),e._v(" "),t("li",[t("strong",[e._v("outputLow [double]:")]),e._v(" The value to be sent to the output if the input is below the threshold in certain operation modes (see below).")]),e._v(" "),t("li",[t("strong",[e._v("operationMode [integer]:")]),e._v(" There are three operation modes for the threshold component:\n"),t("ul",[t("li",[t("em",[e._v("binary:")]),e._v(" the output will only generate two different values, the value of output_high if the input is in the range above the threshold and the value of output_low if the input is below the threshold.")]),e._v(" "),t("li",[t("em",[e._v("cutoff:")]),e._v(" the input value will be passed through to the output as long as the value is below the threshold. If the input passes the threshold the output will take on the value set in output_high.v")]),e._v(" "),t("li",[t("em",[e._v("deadzone:")]),e._v(" the input value will be passed through to the output as long as the value is above the threshold. If the input falls below the threshold the output will take on the value set in output_low.")])])]),e._v(" "),t("li",[t("strong",[e._v("eventCondition [integer]:")]),e._v(" This property declares on which types of transitions an event will be raised:\n"),t("ul",[t("li",[t("em",[e._v("Below->above:")]),e._v(" only transitions from below to above threshold raise events.")]),e._v(" "),t("li",[t("em",[e._v("Above->below:")]),e._v(" only transitions from above to below threshold raise events.")]),e._v(" "),t("li",[t("em",[e._v("Both:")]),e._v(" both types of transitions raise events.")])])])])])}),[],!1,null,null,null);t.default=h.exports},865:function(e,t,o){e.exports=o.p+"assets/img/threshold.5ccba1f1.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[248],{1211:function(e,t,o){"use strict";o.r(t);var s=o(2),h=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"threshold"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#threshold"}},[e._v("#")]),e._v(" Threshold")]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Basic Math)")]),e._v(" "),t("p",[e._v("This component takes an input and compares it to a given threshold and generates an according output value dependent on the operation mode. The component allows three operation modes: binary, deadzone and cut off which are described in the property section. The component allows operating with a hysteresis by setting the thresholds for transition from below to above and vice versa differently. Transitions over the thresholds are always evaluated arithmetically thus a below threshold to above transition always happens when the new value is mathematically greater than the threshold while the last input was less than threshold. Respectively the transition from above to below happens when the last value was greater than the threshold value and the new value is less than it. This statement also holds for negative values in the threshold."),t("br"),e._v("\nThe component provides the possibility to raise events on threshold transitions either on below to above, above to below or on both.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(771),alt:"Screenshot: Threshold plugin",title:"Screenshot: Threshold plugin"}})]),e._v(" "),t("p",[e._v("Threshold plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in [double]:")]),e._v(" the input to be evaluated.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("out[double]:")]),e._v(" the value that the threshold passes on for the given input.")])]),e._v(" "),t("h2",{attrs:{id:"event-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-port-description"}},[e._v("#")]),e._v(" Event Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("eventPosEdge:")]),e._v(" This event port will trigger an event when the value crosses the thresholdHigh property from below.")]),e._v(" "),t("li",[t("strong",[e._v("eventNegEdge:")]),e._v(" This event port will trigger an event when the value crosses the thresholdLow property from above.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("thresholdHigh [double]:")]),e._v(" The threshold that is checked for transitions from below the threshold to above.")]),e._v(" "),t("li",[t("strong",[e._v("thresholdLow [double]:")]),e._v(" The threshold that is checked for transitions from above the threshold to below. Setting it to the same value as threshold_high will remove the hysteresis from the threshold system.")]),e._v(" "),t("li",[t("strong",[e._v("outputHigh [double]:")]),e._v(" The value to be sent to the output if the input is above the threshold in certain operation modes.")]),e._v(" "),t("li",[t("strong",[e._v("outputLow [double]:")]),e._v(" The value to be sent to the output if the input is below the threshold in certain operation modes (see below).")]),e._v(" "),t("li",[t("strong",[e._v("operationMode [integer]:")]),e._v(" There are three operation modes for the threshold component:\n"),t("ul",[t("li",[t("em",[e._v("binary:")]),e._v(" the output will only generate two different values, the value of output_high if the input is in the range above the threshold and the value of output_low if the input is below the threshold.")]),e._v(" "),t("li",[t("em",[e._v("cutoff:")]),e._v(" the input value will be passed through to the output as long as the value is below the threshold. If the input passes the threshold the output will take on the value set in output_high.v")]),e._v(" "),t("li",[t("em",[e._v("deadzone:")]),e._v(" the input value will be passed through to the output as long as the value is above the threshold. If the input falls below the threshold the output will take on the value set in output_low.")])])]),e._v(" "),t("li",[t("strong",[e._v("eventCondition [integer]:")]),e._v(" This property declares on which types of transitions an event will be raised:\n"),t("ul",[t("li",[t("em",[e._v("Below->above:")]),e._v(" only transitions from below to above threshold raise events.")]),e._v(" "),t("li",[t("em",[e._v("Above->below:")]),e._v(" only transitions from above to below threshold raise events.")]),e._v(" "),t("li",[t("em",[e._v("Both:")]),e._v(" both types of transitions raise events.")])])])])])}),[],!1,null,null,null);t.default=h.exports},771:function(e,t,o){e.exports=o.p+"assets/img/threshold.5ccba1f1.jpg"}}]); \ No newline at end of file diff --git a/assets/js/249.265f0c16.js b/assets/js/249.38ead3a2.js similarity index 96% rename from assets/js/249.265f0c16.js rename to assets/js/249.38ead3a2.js index 91bfc3d530..0a124a5a5e 100644 --- a/assets/js/249.265f0c16.js +++ b/assets/js/249.38ead3a2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[249],{1210:function(e,t,a){"use strict";a.r(t);var o=a(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Microcontroller Interface)")]),e._v(" "),t("p",[e._v("The Universal Remote Control (RC) enables the possibility to control all electronic devices in a household which are controlled remotely through infrared (IR) commands. THe necessary IR codes can be recorded with the RC itself and stored on a database on the computer. By choosing the manufacturer, name and function the IR code is deposed in this database and can be selected in order to send the code to the universal RC and therefore control electronic devices. The universal RC can also be used as a handheld gadget due to its built in battery and user interface. THe IR code database can be stored on an SD card.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(771),alt:"Screenshot: UniversalRemoteControl plugin",title:"Screenshot: Universal Remote Control plugin"}})]),e._v(" "),t("p",[e._v("The Universal Remote Control sensor plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("For the use of the universal RC with a computer, it has to be be connected to a USB port. The firmware of the universal RC can be found in the AsTeRICS folder under /CIMs/UniversalInfraredRemoteControl/. A database will be automatically generated if there is not found one. For the usage of the universal RC as a handheld gadget, the SD card has to be formatted as a FAT16 volume and contain a database as well as the configuration file.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("DeviceType [string]:")]),e._v(" Type of the device to be controlled via IR (e.g.: TV)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceName [string]:")]),e._v(" Name of the device to be controlled via IR (e.g.: Sony, Samsung, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceFunction [string]:")]),e._v(" Name of function of the device (e.g.: On, Off, VolumeUp, etc.)")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("SendIRCode:")]),e._v(" Send an IR Code to the Universal Remote Control")]),e._v(" "),t("li",[t("strong",[e._v("RecordIRCode:")]),e._v(" Record an IR Code through the Universal Remote Control")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("StartRecord:")]),e._v(" will be triggered when Universal Remote Control is recording")]),e._v(" "),t("li",[t("strong",[e._v("StopRecord:")]),e._v(" will be triggered when Universal Remote Control has finished recording")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("IRCodeFilePath [string]:")]),e._v(" Filepath to the file, where the IR Codes are stored.")])]),e._v(" "),t("h2",{attrs:{id:"ir-code-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ir-code-database"}},[e._v("#")]),e._v(" IR Code Database")]),e._v(" "),t("p",[e._v("The database which contains the IR codes as well as the information about the type and name of the device and the specific function is a comma separated value file. The first value is the type, the second one is the name and the third one is the function. The following 512 values are the IR code. This database is automatically generated and maintained if new IR codes are recorded with the Universal Remote Control with IR functions.")]),e._v(" "),t("h2",{attrs:{id:"configuration-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configuration-file"}},[e._v("#")]),e._v(" Configuration File")]),e._v(" "),t("p",[e._v("The settings of the universal RC can be stored in the config.csv file. This is a comma separated value file and contains configurations such as the speed and sensibility of the rotary encoder and external buttons as well as the name of the file that contains the IR codes. The content of the default config.csv file is:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[e._v("\t\tJoystickSpeed,120\n\t\tJoystickSensibility,3\n\t\tFile,IRCODES.CSV\n\t\tSort,2\n")])])])])}),[],!1,null,null,null);t.default=r.exports},771:function(e,t,a){e.exports=a.p+"assets/img/universalremotecontrol.c9a71d59.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[249],{1213:function(e,t,a){"use strict";a.r(t);var o=a(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Processor (Subcategory: Microcontroller Interface)")]),e._v(" "),t("p",[e._v("The Universal Remote Control (RC) enables the possibility to control all electronic devices in a household which are controlled remotely through infrared (IR) commands. THe necessary IR codes can be recorded with the RC itself and stored on a database on the computer. By choosing the manufacturer, name and function the IR code is deposed in this database and can be selected in order to send the code to the universal RC and therefore control electronic devices. The universal RC can also be used as a handheld gadget due to its built in battery and user interface. THe IR code database can be stored on an SD card.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(772),alt:"Screenshot: UniversalRemoteControl plugin",title:"Screenshot: Universal Remote Control plugin"}})]),e._v(" "),t("p",[e._v("The Universal Remote Control sensor plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("For the use of the universal RC with a computer, it has to be be connected to a USB port. The firmware of the universal RC can be found in the AsTeRICS folder under /CIMs/UniversalInfraredRemoteControl/. A database will be automatically generated if there is not found one. For the usage of the universal RC as a handheld gadget, the SD card has to be formatted as a FAT16 volume and contain a database as well as the configuration file.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("DeviceType [string]:")]),e._v(" Type of the device to be controlled via IR (e.g.: TV)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceName [string]:")]),e._v(" Name of the device to be controlled via IR (e.g.: Sony, Samsung, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceFunction [string]:")]),e._v(" Name of function of the device (e.g.: On, Off, VolumeUp, etc.)")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("SendIRCode:")]),e._v(" Send an IR Code to the Universal Remote Control")]),e._v(" "),t("li",[t("strong",[e._v("RecordIRCode:")]),e._v(" Record an IR Code through the Universal Remote Control")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("StartRecord:")]),e._v(" will be triggered when Universal Remote Control is recording")]),e._v(" "),t("li",[t("strong",[e._v("StopRecord:")]),e._v(" will be triggered when Universal Remote Control has finished recording")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("IRCodeFilePath [string]:")]),e._v(" Filepath to the file, where the IR Codes are stored.")])]),e._v(" "),t("h2",{attrs:{id:"ir-code-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ir-code-database"}},[e._v("#")]),e._v(" IR Code Database")]),e._v(" "),t("p",[e._v("The database which contains the IR codes as well as the information about the type and name of the device and the specific function is a comma separated value file. The first value is the type, the second one is the name and the third one is the function. The following 512 values are the IR code. This database is automatically generated and maintained if new IR codes are recorded with the Universal Remote Control with IR functions.")]),e._v(" "),t("h2",{attrs:{id:"configuration-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configuration-file"}},[e._v("#")]),e._v(" Configuration File")]),e._v(" "),t("p",[e._v("The settings of the universal RC can be stored in the config.csv file. This is a comma separated value file and contains configurations such as the speed and sensibility of the rotary encoder and external buttons as well as the name of the file that contains the IR codes. The content of the default config.csv file is:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",[t("code",[e._v("\t\tJoystickSpeed,120\n\t\tJoystickSensibility,3\n\t\tFile,IRCODES.CSV\n\t\tSort,2\n")])])])])}),[],!1,null,null,null);t.default=r.exports},772:function(e,t,a){e.exports=a.p+"assets/img/universalremotecontrol.c9a71d59.png"}}]); \ No newline at end of file diff --git a/assets/js/25.c86449f8.js b/assets/js/25.952f5aa9.js similarity index 99% rename from assets/js/25.c86449f8.js rename to assets/js/25.952f5aa9.js index 0ea8acd53c..7f193d48b2 100644 --- a/assets/js/25.c86449f8.js +++ b/assets/js/25.952f5aa9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{297:function(e,t){e.exports="data:image/png;base64,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"},298:function(e,t){e.exports="data:image/png;base64,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"},299:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_33ee9963708d1fff.70ac87d7.png"},300:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_f830b9b181946728.4be74a14.png"},301:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_d5be58f6ea0f5f1.b4ff3013.png"},302:function(e,t,a){e.exports=a.p+"assets/img/eclipse-ant-buildtarget.a52616ed.png"},946:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"development-environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-environment"}},[e._v("#")]),e._v(" Development Environment")]),e._v(" "),t("h2",{attrs:{id:"repository-overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repository-overview"}},[e._v("#")]),e._v(" Repository Overview")]),e._v(" "),t("p",[e._v("The source code repository is organised in the following subfolders:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(297),alt:""}})]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ACS")])]),e._v(" folder contains the AsTeRICS Configuration Suite source code.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Android")])]),e._v(" folder contains a server application for Android phones which allows interfacing with the AsTeRICS Android plugin to use phone functions in AsTeRICS models.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ARE")])]),e._v(" folder contains the middleware and service layers and ARE components.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("bin")])]),e._v(" folder contains subfolders where ARE and ACS executable files are placed during the build flow. These folders contain additional configuration files or dependencies, for example the config.ini and loader.ini files which specify the modules which are loaded by the ARE at startup.")]),e._v(" "),t("p",[e._v("Additionally, the bin folder contains several resources which are useful, e.g. a pre-built ACS with demo models (in the ACS\\models folder) and the OSKA application.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("BNCIevaluationSuite")])]),e._v(" is a collection of matlab files for analysis and comparison of algorithms for Brain Computer Interfaces (contributed by Starlab).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("CIM")])]),e._v(" folder contains firmware for the microcontroller modules used to interface the system to the environment (maintained by IMA and FHTW).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Documentation")])]),e._v(" folder contains the User- and the Developer Manual, and OSKA manual and the licence information for the developed and all utilized source code and libraries.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("NativeASAPI")])]),e._v(" folder contains C++ libraries for mobile-phone and GSM modem access, 3d-mouse and tremor reduction from own C++ projects.")]),e._v(" "),t("h2",{attrs:{id:"clone-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-repository"}},[e._v("#")]),e._v(" Clone Repository")]),e._v(" "),t("p",[e._v("Install a "),t("a",{attrs:{href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"}},[e._v("git"),t("OutboundLink")],1),e._v(" command line client and clone the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),t("OutboundLink")],1),e._v(" by entering:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/asterics/AsTeRICS.git\n")])])]),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("p",[e._v("You need:")]),e._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Java Development Kit 8"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[t("a",{attrs:{href:"http://ant.apache.org/bindownload.cgi",target:"_blank",rel:"noopener noreferrer"}},[e._v("apache ant build framework (version >= 1.9.1)"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Set "),t("a",{attrs:{href:"#environment-variables"}},[e._v("Environment Variables")]),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"environment-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[e._v("#")]),e._v(" Environment Variables")]),e._v(" "),t("ul",[t("li",[e._v("Ensure to set "),t("code",[e._v("JAVA_HOME")]),e._v(" to the folder where you installed the Java JDK and add the JDK bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")]),e._v(" "),t("li",[e._v("Ensure to set "),t("code",[e._v("ANT_HOME")]),e._v(" to the folder where you installed ant and add the ant bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")])]),e._v(" "),t("p",[e._v("See below an example of how to set the environment variable "),t("code",[e._v("JAVA_HOME")]),e._v(" on Windows 7.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(298),alt:"Setting Environment Variable JAVA_HOME on Windows 7"}})]),e._v(" "),t("h2",{attrs:{id:"build"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[e._v("#")]),e._v(" Build")]),e._v(" "),t("p",[e._v("AsTeRICS uses the build system "),t("code",[e._v("ant")]),e._v(".\nYou can simply build the framework from the command line:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h3",{attrs:{id:"building-are-middleware-services-and-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-are-middleware-services-and-plugins"}},[e._v("#")]),e._v(" Building ARE Middleware, Services and Plugins")]),e._v(" "),t("p",[e._v("In the "),t("code",[e._v("ARE")]),e._v(" subfolder the source code of the ARE middleware ("),t("code",[e._v("ARE/middleware")]),e._v("), ARE services ("),t("code",[e._v("ARE/services")]),e._v(") and plugins ("),t("code",[e._v("ARE/components")]),e._v(") can be found.")]),e._v(" "),t("p",[e._v("The middleware, the services and the components have separate ant build files ("),t("code",[e._v("build.xml")]),e._v("). The middleware and services are required for building the plugins (components). To build everything, a top-level build script is available in the "),t("code",[e._v("ARE")]),e._v(" folder.\nAlternatively, individual services or components can be built by selecting their associated "),t("code",[e._v("build.xml")]),e._v(" script from the corresponding subfolders.")]),e._v(" "),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" the ARE (plugins, services), enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE with "),t("strong",[e._v("remote debugging enabled")]),e._v(", enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run-debug\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h2",{attrs:{id:"eclipse-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eclipse-setup"}},[e._v("#")]),e._v(" Eclipse Setup")]),e._v(" "),t("p",[e._v("The AsTeRICS framework is not bound to a specific IDE, but "),t("a",{attrs:{href:"https://www.eclipse.org/downloads/packages/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Eclipse IDE for Enterprise Java Developers"),t("OutboundLink")],1),e._v(" is recommended. This will provide editing support for diverse file types (java, html, Js, CSS, xml). Alternately you can install "),t("em",[e._v("Eclipse IDE for Java Developers")]),e._v(" and later install addons for web development.")]),e._v(" "),t("h3",{attrs:{id:"java-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java-project"}},[e._v("#")]),e._v(" Java Project")]),e._v(" "),t("p",[e._v("You must create a "),t("code",[e._v("Java Project")]),e._v(" first:")]),e._v(" "),t("p",[e._v("Choose "),t("em",[e._v("File -> New -> JavaProject")]),e._v(" in the Eclipse main menu, disable the option "),t("em",[e._v("“Use default location”")]),e._v(" and browse to the "),t("em",[e._v("ARE")]),e._v(" subfolder:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(299),alt:""}})]),e._v(" "),t("p",[e._v("Then you should see something like this:\n"),t("img",{attrs:{src:a(300),alt:""}})]),e._v(" "),t("p",[e._v("Eclipse provides different views ("),t("em",[e._v("Window -> Show View")]),e._v("), where the "),t("em",[e._v("Navigator")]),e._v(" and the "),t("em",[e._v("Package Explorer")]),e._v(" are most useful for Java source code development.")]),e._v(" "),t("p",[e._v("Note that the “"),t("em",[e._v("Refresh")]),e._v("” command ("),t("em",[e._v("F5")]),e._v(") synchronizes the Navigator view with changes in the local file system.")]),e._v(" "),t("h3",{attrs:{id:"character-encoding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#character-encoding"}},[e._v("#")]),e._v(" Character encoding")]),e._v(" "),t("p",[e._v("Incorrect character encoding settings can cause problems with ANT-based builds in eclipse, especially if special characters like ö, ä, etc. are used in the source code. Be sure to use ISO-8859-1 as character encoding in "),t("em",[e._v("Configuations and Lauch")]),e._v(" settings (in the "),t("em",[e._v("Common")]),e._v(" tab) as shown in the screenshot (note that this is not the default setting in some versions of eclipse):")]),e._v(" "),t("p",[t("img",{attrs:{src:a(301),alt:""}})]),e._v(" "),t("h3",{attrs:{id:"editing-model-files-windows-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-model-files-windows-only"}},[e._v("#")]),e._v(" Editing Model Files (windows-only)")]),e._v(" "),t("p",[e._v("You can configure the Eclipse editor to open the "),t("em",[e._v("ACS")]),e._v(" editor for AsTeRICS model files ("),t("code",[e._v(".acs")]),e._v(").")]),e._v(" "),t("ol",[t("li",[e._v("Right click on a model file, select "),t("code",[e._v("Open with/Other")])]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("External programs")]),e._v(" and browse to "),t("code",[e._v("C:\\Program Files (x86)\\AsTeRICS\\ACS\\ACS.bat")]),e._v(" (Note: "),t("strong",[e._v("ACS.bat")]),e._v(")")]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("Use it for all `*.acs file")])]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Ok")])])]),e._v(" "),t("h3",{attrs:{id:"ant-within-eclipse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ant-within-eclipse"}},[e._v("#")]),e._v(" Ant within Eclipse")]),e._v(" "),t("p",[e._v("You can run the "),t("em",[e._v("ant")]),e._v(" targets of the AsTeRICS build system from within Eclipse.")]),e._v(" "),t("h4",{attrs:{id:"run-default-target"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-default-target"}},[e._v("#")]),e._v(" Run default target")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build")]),e._v(" (first entry)")])]),e._v(" "),t("h4",{attrs:{id:"run-selected-targets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-selected-targets"}},[e._v("#")]),e._v(" Run selected targets")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build...")]),e._v(" (second entry)")]),e._v(" "),t("li",[e._v("Click onto targets to run")]),e._v(" "),t("li",[e._v("Select order of execution at the bottom")]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Apply")]),e._v(" and "),t("code",[e._v("Run")])])]),e._v(" "),t("p",[e._v("The screenshot below shows the dialog for build target selection:\n"),t("img",{attrs:{src:a(302),alt:"Screenshot of ant build target selection"}})])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{297:function(e,t){e.exports="data:image/png;base64,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"},298:function(e,t){e.exports="data:image/png;base64,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"},299:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_33ee9963708d1fff.70ac87d7.png"},300:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_f830b9b181946728.4be74a14.png"},301:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_d5be58f6ea0f5f1.b4ff3013.png"},302:function(e,t,a){e.exports=a.p+"assets/img/eclipse-ant-buildtarget.a52616ed.png"},947:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"development-environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-environment"}},[e._v("#")]),e._v(" Development Environment")]),e._v(" "),t("h2",{attrs:{id:"repository-overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repository-overview"}},[e._v("#")]),e._v(" Repository Overview")]),e._v(" "),t("p",[e._v("The source code repository is organised in the following subfolders:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(297),alt:""}})]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ACS")])]),e._v(" folder contains the AsTeRICS Configuration Suite source code.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Android")])]),e._v(" folder contains a server application for Android phones which allows interfacing with the AsTeRICS Android plugin to use phone functions in AsTeRICS models.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ARE")])]),e._v(" folder contains the middleware and service layers and ARE components.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("bin")])]),e._v(" folder contains subfolders where ARE and ACS executable files are placed during the build flow. These folders contain additional configuration files or dependencies, for example the config.ini and loader.ini files which specify the modules which are loaded by the ARE at startup.")]),e._v(" "),t("p",[e._v("Additionally, the bin folder contains several resources which are useful, e.g. a pre-built ACS with demo models (in the ACS\\models folder) and the OSKA application.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("BNCIevaluationSuite")])]),e._v(" is a collection of matlab files for analysis and comparison of algorithms for Brain Computer Interfaces (contributed by Starlab).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("CIM")])]),e._v(" folder contains firmware for the microcontroller modules used to interface the system to the environment (maintained by IMA and FHTW).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Documentation")])]),e._v(" folder contains the User- and the Developer Manual, and OSKA manual and the licence information for the developed and all utilized source code and libraries.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("NativeASAPI")])]),e._v(" folder contains C++ libraries for mobile-phone and GSM modem access, 3d-mouse and tremor reduction from own C++ projects.")]),e._v(" "),t("h2",{attrs:{id:"clone-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-repository"}},[e._v("#")]),e._v(" Clone Repository")]),e._v(" "),t("p",[e._v("Install a "),t("a",{attrs:{href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"}},[e._v("git"),t("OutboundLink")],1),e._v(" command line client and clone the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),t("OutboundLink")],1),e._v(" by entering:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/asterics/AsTeRICS.git\n")])])]),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("p",[e._v("You need:")]),e._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Java Development Kit 8"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[t("a",{attrs:{href:"http://ant.apache.org/bindownload.cgi",target:"_blank",rel:"noopener noreferrer"}},[e._v("apache ant build framework (version >= 1.9.1)"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Set "),t("a",{attrs:{href:"#environment-variables"}},[e._v("Environment Variables")]),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"environment-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[e._v("#")]),e._v(" Environment Variables")]),e._v(" "),t("ul",[t("li",[e._v("Ensure to set "),t("code",[e._v("JAVA_HOME")]),e._v(" to the folder where you installed the Java JDK and add the JDK bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")]),e._v(" "),t("li",[e._v("Ensure to set "),t("code",[e._v("ANT_HOME")]),e._v(" to the folder where you installed ant and add the ant bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")])]),e._v(" "),t("p",[e._v("See below an example of how to set the environment variable "),t("code",[e._v("JAVA_HOME")]),e._v(" on Windows 7.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(298),alt:"Setting Environment Variable JAVA_HOME on Windows 7"}})]),e._v(" "),t("h2",{attrs:{id:"build"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[e._v("#")]),e._v(" Build")]),e._v(" "),t("p",[e._v("AsTeRICS uses the build system "),t("code",[e._v("ant")]),e._v(".\nYou can simply build the framework from the command line:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h3",{attrs:{id:"building-are-middleware-services-and-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-are-middleware-services-and-plugins"}},[e._v("#")]),e._v(" Building ARE Middleware, Services and Plugins")]),e._v(" "),t("p",[e._v("In the "),t("code",[e._v("ARE")]),e._v(" subfolder the source code of the ARE middleware ("),t("code",[e._v("ARE/middleware")]),e._v("), ARE services ("),t("code",[e._v("ARE/services")]),e._v(") and plugins ("),t("code",[e._v("ARE/components")]),e._v(") can be found.")]),e._v(" "),t("p",[e._v("The middleware, the services and the components have separate ant build files ("),t("code",[e._v("build.xml")]),e._v("). The middleware and services are required for building the plugins (components). To build everything, a top-level build script is available in the "),t("code",[e._v("ARE")]),e._v(" folder.\nAlternatively, individual services or components can be built by selecting their associated "),t("code",[e._v("build.xml")]),e._v(" script from the corresponding subfolders.")]),e._v(" "),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" the ARE (plugins, services), enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE with "),t("strong",[e._v("remote debugging enabled")]),e._v(", enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run-debug\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h2",{attrs:{id:"eclipse-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eclipse-setup"}},[e._v("#")]),e._v(" Eclipse Setup")]),e._v(" "),t("p",[e._v("The AsTeRICS framework is not bound to a specific IDE, but "),t("a",{attrs:{href:"https://www.eclipse.org/downloads/packages/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Eclipse IDE for Enterprise Java Developers"),t("OutboundLink")],1),e._v(" is recommended. This will provide editing support for diverse file types (java, html, Js, CSS, xml). Alternately you can install "),t("em",[e._v("Eclipse IDE for Java Developers")]),e._v(" and later install addons for web development.")]),e._v(" "),t("h3",{attrs:{id:"java-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java-project"}},[e._v("#")]),e._v(" Java Project")]),e._v(" "),t("p",[e._v("You must create a "),t("code",[e._v("Java Project")]),e._v(" first:")]),e._v(" "),t("p",[e._v("Choose "),t("em",[e._v("File -> New -> JavaProject")]),e._v(" in the Eclipse main menu, disable the option "),t("em",[e._v("“Use default location”")]),e._v(" and browse to the "),t("em",[e._v("ARE")]),e._v(" subfolder:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(299),alt:""}})]),e._v(" "),t("p",[e._v("Then you should see something like this:\n"),t("img",{attrs:{src:a(300),alt:""}})]),e._v(" "),t("p",[e._v("Eclipse provides different views ("),t("em",[e._v("Window -> Show View")]),e._v("), where the "),t("em",[e._v("Navigator")]),e._v(" and the "),t("em",[e._v("Package Explorer")]),e._v(" are most useful for Java source code development.")]),e._v(" "),t("p",[e._v("Note that the “"),t("em",[e._v("Refresh")]),e._v("” command ("),t("em",[e._v("F5")]),e._v(") synchronizes the Navigator view with changes in the local file system.")]),e._v(" "),t("h3",{attrs:{id:"character-encoding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#character-encoding"}},[e._v("#")]),e._v(" Character encoding")]),e._v(" "),t("p",[e._v("Incorrect character encoding settings can cause problems with ANT-based builds in eclipse, especially if special characters like ö, ä, etc. are used in the source code. Be sure to use ISO-8859-1 as character encoding in "),t("em",[e._v("Configuations and Lauch")]),e._v(" settings (in the "),t("em",[e._v("Common")]),e._v(" tab) as shown in the screenshot (note that this is not the default setting in some versions of eclipse):")]),e._v(" "),t("p",[t("img",{attrs:{src:a(301),alt:""}})]),e._v(" "),t("h3",{attrs:{id:"editing-model-files-windows-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-model-files-windows-only"}},[e._v("#")]),e._v(" Editing Model Files (windows-only)")]),e._v(" "),t("p",[e._v("You can configure the Eclipse editor to open the "),t("em",[e._v("ACS")]),e._v(" editor for AsTeRICS model files ("),t("code",[e._v(".acs")]),e._v(").")]),e._v(" "),t("ol",[t("li",[e._v("Right click on a model file, select "),t("code",[e._v("Open with/Other")])]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("External programs")]),e._v(" and browse to "),t("code",[e._v("C:\\Program Files (x86)\\AsTeRICS\\ACS\\ACS.bat")]),e._v(" (Note: "),t("strong",[e._v("ACS.bat")]),e._v(")")]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("Use it for all `*.acs file")])]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Ok")])])]),e._v(" "),t("h3",{attrs:{id:"ant-within-eclipse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ant-within-eclipse"}},[e._v("#")]),e._v(" Ant within Eclipse")]),e._v(" "),t("p",[e._v("You can run the "),t("em",[e._v("ant")]),e._v(" targets of the AsTeRICS build system from within Eclipse.")]),e._v(" "),t("h4",{attrs:{id:"run-default-target"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-default-target"}},[e._v("#")]),e._v(" Run default target")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build")]),e._v(" (first entry)")])]),e._v(" "),t("h4",{attrs:{id:"run-selected-targets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-selected-targets"}},[e._v("#")]),e._v(" Run selected targets")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build...")]),e._v(" (second entry)")]),e._v(" "),t("li",[e._v("Click onto targets to run")]),e._v(" "),t("li",[e._v("Select order of execution at the bottom")]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Apply")]),e._v(" and "),t("code",[e._v("Run")])])]),e._v(" "),t("p",[e._v("The screenshot below shows the dialog for build target selection:\n"),t("img",{attrs:{src:a(302),alt:"Screenshot of ant build target selection"}})])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/250.842cf373.js b/assets/js/250.e4aca7ca.js similarity index 91% rename from assets/js/250.842cf373.js rename to assets/js/250.e4aca7ca.js index ee6d1d01a0..b52a5d5759 100644 --- a/assets/js/250.842cf373.js +++ b/assets/js/250.e4aca7ca.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[250],{1213:function(e,t,a){"use strict";a.r(t);var r=a(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"yaak"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yaak"}},[e._v("#")]),e._v(" Yaak")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-phone-interface"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-phone-interface"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Phone Interface)")]),e._v(" "),t("p",[e._v("Yaak is a flexible on-screen-keyboard for the Android operating system. More information can be found in the pdf documentation in the Android/Yaak folder within the release package.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(774),alt:"Yaak plugin in the ACS",title:"Yaak plugin in the ACS"}})]),e._v(" "),t("p",[e._v("Yaak plugin in the ACS")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("The Android based mobile device running Yaak must be connected to the AsTeRICS system over a TCP/IP connection and the used port must not be blocked by a firewall")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" gives the action string whenever a button of the keyboard gets triggered. The string for each button can be stored in the xml layout for the keyboards.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("hostname [string]:")]),e._v(" The hostname of the mobile device (IP or hostname is valid)")]),e._v(" "),t("li",[t("strong",[e._v("port [integer]:")]),e._v(" The port Yaak listens for incoming messages. This can be set in the xml file of a keyboard.")])])])}),[],!1,null,null,null);t.default=o.exports},774:function(e,t,a){e.exports=a.p+"assets/img/yaak.228d9dc7.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[250],{1216:function(e,t,a){"use strict";a.r(t);var r=a(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"yaak"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#yaak"}},[e._v("#")]),e._v(" Yaak")]),e._v(" "),t("h2",{attrs:{id:"component-type-processor-subcategory-phone-interface"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-processor-subcategory-phone-interface"}},[e._v("#")]),e._v(" Component Type: Processor (Subcategory: Phone Interface)")]),e._v(" "),t("p",[e._v("Yaak is a flexible on-screen-keyboard for the Android operating system. More information can be found in the pdf documentation in the Android/Yaak folder within the release package.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(775),alt:"Yaak plugin in the ACS",title:"Yaak plugin in the ACS"}})]),e._v(" "),t("p",[e._v("Yaak plugin in the ACS")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("The Android based mobile device running Yaak must be connected to the AsTeRICS system over a TCP/IP connection and the used port must not be blocked by a firewall")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("action [string]:")]),e._v(" gives the action string whenever a button of the keyboard gets triggered. The string for each button can be stored in the xml layout for the keyboards.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("hostname [string]:")]),e._v(" The hostname of the mobile device (IP or hostname is valid)")]),e._v(" "),t("li",[t("strong",[e._v("port [integer]:")]),e._v(" The port Yaak listens for incoming messages. This can be set in the xml file of a keyboard.")])])])}),[],!1,null,null,null);t.default=o.exports},775:function(e,t,a){e.exports=a.p+"assets/img/yaak.228d9dc7.png"}}]); \ No newline at end of file diff --git a/assets/js/251.53475791.js b/assets/js/251.1be574ea.js similarity index 94% rename from assets/js/251.53475791.js rename to assets/js/251.1be574ea.js index 8a6ae6d75a..e61f691d76 100644 --- a/assets/js/251.53475791.js +++ b/assets/js/251.1be574ea.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[251],{1216:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"analog-in"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#analog-in"}},[e._v("#")]),e._v(" Analog In")]),e._v(" "),t("h3",{attrs:{id:"component-type-sensor-subcategory-generic-control-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-sensor-subcategory-generic-control-input"}},[e._v("#")]),e._v(" Component Type: Sensor (Subcategory: Generic Control Input)")]),e._v(" "),t("p",[e._v("The AnalogIn component is a sensor which is used in combination with the ADC CIM. The component provides two output ports which correlate to the inputs IN1 and IN2 of the CIM. The component can be set up to sample the inputs periodically or upon an incoming event. Both inputs can be used for voltage and resistance measurement.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(777),alt:"Screenshot: AnalogIn plugin",title:"Screenshot: AnalogIn plugin"}})]),e._v(" "),t("p",[e._v("AnalogIn plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an ADC CIM (CIM ID: 0x0901) connected to a USB port.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1 to in2 [integer]:")]),e._v(" Each of these output port corresponds to one input of the ADC CIM. The measured values are forwarded directly from the CIM thus corresponding to the description given in the CIM specification. Depending on the type of connected sensor the values either correspond to a voltage or a resistive value.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("adcSampleTrigger:")]),e._v(" An incoming event on this port will cause the ADC CIM to sample data on its inputs. This event will only take effect if the periodic_update property is set to 0.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("periodicUpdate [integer]:")]),e._v(" This property defines the time between data sampling requests to the ADC CIM (in milliseconds). The software component will send requests to the CIM in the given intervals. Due to current limitations of the ADC CIM it is recommended to use time intervals not lower than 50 milliseconds (20 samples per second).")]),e._v(" "),t("li",[t("strong",[e._v("activateInput1 to activateInput2 [Boolean]:")]),e._v(" These properties correspond the CIM’s ADC inputs IN1 to IN8, if the property is true, the corresponding output port of the software component will send the sampled data.")]),e._v(" "),t("li",[t("strong",[e._v("uniqueId:")]),e._v(" unique number of the CIM - if more than one CIMs of the same type are used. The module flashes a LED for identification when the ID is selected. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);t.default=s.exports},777:function(e,t,n){e.exports=n.p+"assets/img/analogin.1a43205a.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[251],{1218:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"analog-in"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#analog-in"}},[e._v("#")]),e._v(" Analog In")]),e._v(" "),t("h3",{attrs:{id:"component-type-sensor-subcategory-generic-control-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-sensor-subcategory-generic-control-input"}},[e._v("#")]),e._v(" Component Type: Sensor (Subcategory: Generic Control Input)")]),e._v(" "),t("p",[e._v("The AnalogIn component is a sensor which is used in combination with the ADC CIM. The component provides two output ports which correlate to the inputs IN1 and IN2 of the CIM. The component can be set up to sample the inputs periodically or upon an incoming event. Both inputs can be used for voltage and resistance measurement.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(778),alt:"Screenshot: AnalogIn plugin",title:"Screenshot: AnalogIn plugin"}})]),e._v(" "),t("p",[e._v("AnalogIn plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an ADC CIM (CIM ID: 0x0901) connected to a USB port.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1 to in2 [integer]:")]),e._v(" Each of these output port corresponds to one input of the ADC CIM. The measured values are forwarded directly from the CIM thus corresponding to the description given in the CIM specification. Depending on the type of connected sensor the values either correspond to a voltage or a resistive value.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("adcSampleTrigger:")]),e._v(" An incoming event on this port will cause the ADC CIM to sample data on its inputs. This event will only take effect if the periodic_update property is set to 0.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("periodicUpdate [integer]:")]),e._v(" This property defines the time between data sampling requests to the ADC CIM (in milliseconds). The software component will send requests to the CIM in the given intervals. Due to current limitations of the ADC CIM it is recommended to use time intervals not lower than 50 milliseconds (20 samples per second).")]),e._v(" "),t("li",[t("strong",[e._v("activateInput1 to activateInput2 [Boolean]:")]),e._v(" These properties correspond the CIM’s ADC inputs IN1 to IN8, if the property is true, the corresponding output port of the software component will send the sampled data.")]),e._v(" "),t("li",[t("strong",[e._v("uniqueId:")]),e._v(" unique number of the CIM - if more than one CIMs of the same type are used. The module flashes a LED for identification when the ID is selected. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);t.default=s.exports},778:function(e,t,n){e.exports=n.p+"assets/img/analogin.1a43205a.jpg"}}]); \ No newline at end of file diff --git a/assets/js/252.6fa0c25c.js b/assets/js/252.91d21ffe.js similarity index 86% rename from assets/js/252.6fa0c25c.js rename to assets/js/252.91d21ffe.js index 44a2cba611..5569797626 100644 --- a/assets/js/252.6fa0c25c.js +++ b/assets/js/252.91d21ffe.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[252],{1217:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Simulation)")]),t._v(" "),e("p",[t._v("The AutostartEvent component sends an event after model start, with a delay defined by the Delay property.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(778),alt:"Screenshot: AutostartEvent plugin",title:"Screenshot: AutostartEvent plugin"}})]),t._v(" "),e("p",[t._v("AutostartEvent plugin")]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" The output event.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Delay [integer]:")]),t._v(" The event delay[ms].")])])])}),[],!1,null,null,null);e.default=n.exports},778:function(t,e,r){t.exports=r.p+"assets/img/autostartevent.7ca8c939.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[252],{1221:function(t,e,r){"use strict";r.r(e);var s=r(2),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Simulation)")]),t._v(" "),e("p",[t._v("The AutostartEvent component sends an event after model start, with a delay defined by the Delay property.")]),t._v(" "),e("p",[e("img",{attrs:{src:r(782),alt:"Screenshot: AutostartEvent plugin",title:"Screenshot: AutostartEvent plugin"}})]),t._v(" "),e("p",[t._v("AutostartEvent plugin")]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output")]),t._v(" The output event.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Delay [integer]:")]),t._v(" The event delay[ms].")])])])}),[],!1,null,null,null);e.default=n.exports},782:function(t,e,r){t.exports=r.p+"assets/img/autostartevent.7ca8c939.jpg"}}]); \ No newline at end of file diff --git a/assets/js/253.4124dd14.js b/assets/js/253.04620e2a.js similarity index 98% rename from assets/js/253.4124dd14.js rename to assets/js/253.04620e2a.js index 8243028b34..a657aaade8 100644 --- a/assets/js/253.4124dd14.js +++ b/assets/js/253.04620e2a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[253],{1218:function(t,e,o){"use strict";o.r(e);var n=o(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("The Button Grid component is a simple GUI on-screen keyboard. It sends events after buttons have been pressed.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(779),alt:"Screenshot: ButtonGrid plugin",title:"Screenshot: ButtonGrid plugin"}})]),t._v(" "),e("p",[t._v("ButtonGrid plugin")]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("button1…button20:")]),t._v(" These events are fired as the corresponding buttons are pressed.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("caption [string]:")]),t._v(" The text shown on the component caption.")]),t._v(" "),e("li",[e("strong",[t._v("horizontalOrientation [boolean]:")]),t._v(" If selected, the keyboard will be placed horizontally, otherwise the keyboard will be placed vertically.")]),t._v(" "),e("li",[e("strong",[t._v("textColor [integer, combobox selection]:")]),t._v(" The color of the caption text (“default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("backgroundColor [integer, combobox selection]:")]),t._v(" The color of the button background (“default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("borderColor [integer, combobox selection]:")]),t._v(" The color of the button frame (“default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("borderThickness [integer]:")]),t._v(" The size of the button frame")]),t._v(" "),e("li",[e("strong",[t._v("selectionFrameColor [integer, combobox selection]:")]),t._v(" The color of the selection frame (active button, “default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("selectionFrameThickness [integer]:")]),t._v(" The size of the selection frame")]),t._v(" "),e("li",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")]),t._v(" "),e("li",[e("strong",[t._v("buttonCaption1…buttonCaption20 [string]:")]),t._v(" The text shown on the buttons:1…20. If the text is empty, the button will not be displayed at all.")]),t._v(" "),e("li",[e("strong",[t._v("toolTip1…toolTip20 [string]:")]),t._v(" The text shown as tooltip when the mouse hovers over a corresponding button. If the text is empty, no tooltip will be displayed.")])])])}),[],!1,null,null,null);e.default=r.exports},779:function(t,e,o){t.exports=o.p+"assets/img/buttongrid.5b8ad03c.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[253],{1219:function(t,e,o){"use strict";o.r(e);var n=o(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("The Button Grid component is a simple GUI on-screen keyboard. It sends events after buttons have been pressed.")]),t._v(" "),e("p",[e("img",{attrs:{src:o(779),alt:"Screenshot: ButtonGrid plugin",title:"Screenshot: ButtonGrid plugin"}})]),t._v(" "),e("p",[t._v("ButtonGrid plugin")]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("button1…button20:")]),t._v(" These events are fired as the corresponding buttons are pressed.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("caption [string]:")]),t._v(" The text shown on the component caption.")]),t._v(" "),e("li",[e("strong",[t._v("horizontalOrientation [boolean]:")]),t._v(" If selected, the keyboard will be placed horizontally, otherwise the keyboard will be placed vertically.")]),t._v(" "),e("li",[e("strong",[t._v("textColor [integer, combobox selection]:")]),t._v(" The color of the caption text (“default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("backgroundColor [integer, combobox selection]:")]),t._v(" The color of the button background (“default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("borderColor [integer, combobox selection]:")]),t._v(" The color of the button frame (“default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("borderThickness [integer]:")]),t._v(" The size of the button frame")]),t._v(" "),e("li",[e("strong",[t._v("selectionFrameColor [integer, combobox selection]:")]),t._v(" The color of the selection frame (active button, “default” keeps the standard setting)")]),t._v(" "),e("li",[e("strong",[t._v("selectionFrameThickness [integer]:")]),t._v(" The size of the selection frame")]),t._v(" "),e("li",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")]),t._v(" "),e("li",[e("strong",[t._v("buttonCaption1…buttonCaption20 [string]:")]),t._v(" The text shown on the buttons:1…20. If the text is empty, the button will not be displayed at all.")]),t._v(" "),e("li",[e("strong",[t._v("toolTip1…toolTip20 [string]:")]),t._v(" The text shown as tooltip when the mouse hovers over a corresponding button. If the text is empty, no tooltip will be displayed.")])])])}),[],!1,null,null,null);e.default=r.exports},779:function(t,e,o){t.exports=o.p+"assets/img/buttongrid.5b8ad03c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/254.b02c8dfa.js b/assets/js/254.bdef4bcc.js similarity index 94% rename from assets/js/254.b02c8dfa.js rename to assets/js/254.bdef4bcc.js index 5d7172334b..aab65fc418 100644 --- a/assets/js/254.b02c8dfa.js +++ b/assets/js/254.bdef4bcc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[254],{1221:function(e,t,i){"use strict";i.r(t);var n=i(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Generic Control Input)")]),e._v(" "),t("p",[e._v("The DigitalIn component provides an interface to read the digital inputs of the GPIO CIM. On state changes of the connected signals (transitions to high or low level), the component generates corresponding trigger-events.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(784),alt:"Screenshot: DigitalIn plugin",title:"Screenshot: DigitalIn plugin"}})]),e._v(" "),t("p",[e._v("DigitalIn plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This component requires the DigitalIn (GPO) CIM (CIM Id: 0x0701) connected to an USB port.")]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1High to in6High:")]),e._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to high level, an event will be raised on the corresponding port.")]),e._v(" "),t("li",[t("strong",[e._v("in1Low to in6Low:")]),e._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to low level, an event will be raised on the corresponding port.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activateEventIn1 to activateEventIn6 [Boolean]:")]),e._v(" These properties declare for each port whether or not a signal transition on the actual input port should result in an event being triggered in the ARE. If a property is set true for one input, it will raise events on signal transitions, if it is set to false it will not.")]),e._v(" "),t("li",[t("strong",[e._v("periodicUpdate:")]),e._v(" Period in milliseconds for update messages about state of device inputs. If the property is set to zero, the plugin will receive messages from the CIM on signal transitions, if the property is non-zero, the CIM will send status messages in the defined intervals without extra event messages on signal changes. Both modes will have the same effect on the software plugin, it will raise events on its trigger ports.")]),e._v(" "),t("li",[t("strong",[e._v("uniqueId:")]),e._v(" unique number of the CIM - if more than one CIMs of the same type are used. The module flashes a LED for identification when the ID is selected. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);t.default=s.exports},784:function(e,t,i){e.exports=i.p+"assets/img/digitalin.83464356.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[254],{1223:function(e,t,i){"use strict";i.r(t);var n=i(2),s=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Generic Control Input)")]),e._v(" "),t("p",[e._v("The DigitalIn component provides an interface to read the digital inputs of the GPIO CIM. On state changes of the connected signals (transitions to high or low level), the component generates corresponding trigger-events.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(785),alt:"Screenshot: DigitalIn plugin",title:"Screenshot: DigitalIn plugin"}})]),e._v(" "),t("p",[e._v("DigitalIn plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This component requires the DigitalIn (GPO) CIM (CIM Id: 0x0701) connected to an USB port.")]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1High to in6High:")]),e._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to high level, an event will be raised on the corresponding port.")]),e._v(" "),t("li",[t("strong",[e._v("in1Low to in6Low:")]),e._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to low level, an event will be raised on the corresponding port.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activateEventIn1 to activateEventIn6 [Boolean]:")]),e._v(" These properties declare for each port whether or not a signal transition on the actual input port should result in an event being triggered in the ARE. If a property is set true for one input, it will raise events on signal transitions, if it is set to false it will not.")]),e._v(" "),t("li",[t("strong",[e._v("periodicUpdate:")]),e._v(" Period in milliseconds for update messages about state of device inputs. If the property is set to zero, the plugin will receive messages from the CIM on signal transitions, if the property is non-zero, the CIM will send status messages in the defined intervals without extra event messages on signal changes. Both modes will have the same effect on the software plugin, it will raise events on its trigger ports.")]),e._v(" "),t("li",[t("strong",[e._v("uniqueId:")]),e._v(" unique number of the CIM - if more than one CIMs of the same type are used. The module flashes a LED for identification when the ID is selected. "),t("strong",[e._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);t.default=s.exports},785:function(e,t,i){e.exports=i.p+"assets/img/digitalin.83464356.jpg"}}]); \ No newline at end of file diff --git a/assets/js/255.446ce26d.js b/assets/js/255.19ed73db.js similarity index 93% rename from assets/js/255.446ce26d.js rename to assets/js/255.19ed73db.js index f5c7010115..5ab4ced3de 100644 --- a/assets/js/255.446ce26d.js +++ b/assets/js/255.19ed73db.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[255],{1223:function(t,e,o){"use strict";o.r(e);var r=o(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("This component creates a GUI edit field which can send the text to other components. The text will be sent to the output port when enter is pressed or when the edit box looses the input focus (when the cursor is removed from the edit field).")]),t._v(" "),e("p",[e("img",{attrs:{src:o(788),alt:"Screenshot: EditBox plugin",title:"Screenshot: EditBox plugin"}})]),t._v(" "),e("p",[t._v("EditBox plugin")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clear:")]),t._v(" Removes the text from the component.")]),t._v(" "),e("li",[e("strong",[t._v("send:")]),t._v(" Send the text value to the String output port.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("caption [string]:")]),t._v(" Caption of the component.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("default [string]:")]),t._v(" The default text, which is set at startup.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("textColor [integer]:")]),t._v(" Defines color of the text.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("backgroundColor [integer]:")]),t._v(" Defines background color.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("insertAction [integer]:")]),t._v(" Defines behaviour of the component after the text has been sent to the output port. The text in the component can be selected or removed.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("sendDefaultValue [boolean]:")]),t._v(" When this checkbox is checked the default String value is sent to the String output port when the model gets started.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])])}),[],!1,null,null,null);e.default=n.exports},788:function(t,e,o){t.exports=o.p+"assets/img/editbox.54fb1779.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[255],{1225:function(t,e,o){"use strict";o.r(e);var r=o(2),n=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),t._v(" "),e("p",[t._v("This component creates a GUI edit field which can send the text to other components. The text will be sent to the output port when enter is pressed or when the edit box looses the input focus (when the cursor is removed from the edit field).")]),t._v(" "),e("p",[e("img",{attrs:{src:o(789),alt:"Screenshot: EditBox plugin",title:"Screenshot: EditBox plugin"}})]),t._v(" "),e("p",[t._v("EditBox plugin")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("output [string]:")]),t._v(" String output port.")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("clear:")]),t._v(" Removes the text from the component.")]),t._v(" "),e("li",[e("strong",[t._v("send:")]),t._v(" Send the text value to the String output port.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("p",[e("strong",[t._v("caption [string]:")]),t._v(" Caption of the component.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("default [string]:")]),t._v(" The default text, which is set at startup.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("textColor [integer]:")]),t._v(" Defines color of the text.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("backgroundColor [integer]:")]),t._v(" Defines background color.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("insertAction [integer]:")]),t._v(" Defines behaviour of the component after the text has been sent to the output port. The text in the component can be selected or removed.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("sendDefaultValue [boolean]:")]),t._v(" When this checkbox is checked the default String value is sent to the String output port when the model gets started.")])]),t._v(" "),e("li",[e("p",[e("strong",[t._v("displayGUI [boolean]:")]),t._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])])}),[],!1,null,null,null);e.default=n.exports},789:function(t,e,o){t.exports=o.p+"assets/img/editbox.54fb1779.jpg"}}]); \ No newline at end of file diff --git a/assets/js/256.b0bd1795.js b/assets/js/256.1715b98d.js similarity index 98% rename from assets/js/256.b0bd1795.js rename to assets/js/256.1715b98d.js index d204ac049c..8aa24aa299 100644 --- a/assets/js/256.b0bd1795.js +++ b/assets/js/256.1715b98d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[256],{1230:function(e,t,o){"use strict";o.r(t);var i=o(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("The FacetrackerCLM component is one of the vision based plugin. At this stage of development it offers the same functionalities for mouse emulation as the other sensor plugin named "),t("strong",[t("a",{attrs:{href:"FacetrackerLK.htm"}},[e._v("facetrackerLK")])]),e._v(" .")]),e._v(" "),t("p",[e._v("The underlying mechanism is based on the tracking of facial features detected in a first initialization stage by fitting a deformable face model on the image as soon as the region of interest is identified thanks to the OpenCV implementation of the Viola-Jones classifier.")]),e._v(" "),t("p",[e._v("The plugin outputs at each frame the relative offsets of a series of measures based on the tracked points with respect to the previous frame. These offsets may be integrated or used directly as inputs for the mouse emulator actuators. Usually it is a good idea to use the relative displacement of the centre of the face (PosX and PosY) to guide the mouse movements and reserve the other measurements or events to implement other optional functionalities (the head roll, pitch and yaw angles and relative scale of the face).")]),e._v(" "),t("p",[e._v("The FacetrackerCLM also introduces the detection of facial gestures that can be then exploited in the ACS models to directly perform actions or trigger events. In this version an event is sent for the detection of the raising of both eyebrows.")]),e._v(" "),t("p",[e._v("For a closer explaination of the EyeTrackerCLM functions and the training algorithm for eye states please refer to the document FacetrackerCLM.pdf in the folder /documentation.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(799),alt:"Screenshot: FacetrackerCLM plugin",title:"Screenshot: FacetrackerCLM plugin"}})]),e._v(" "),t("p",[e._v("FacetrackerCLM plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A camera has to be available in the operating system (preferably a consumer USB camera).")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("p",[e._v("There are no input ports for this plugin.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Roll[double]:")]),e._v(" The output port Roll outputs the relative change of the roll angle of the head pose (degrees).")]),e._v(" "),t("li",[t("strong",[e._v("Pitch[double]:")]),e._v(" The output port Pitch outputs the relative change of the pitch angle of the head pose (degrees).")]),e._v(" "),t("li",[t("strong",[e._v("Yaw[double]:")]),e._v(" The output port Yaw outputs the relative change of the yaw angle of the head pose (degrees).")]),e._v(" "),t("li",[t("strong",[e._v("PosX[double]:")]),e._v(" The output port PosX outputs the relative displacement of the x coordinate (image coordinates) of the tracked point (approximatively located around the nose).")]),e._v(" "),t("li",[t("strong",[e._v("PosY[double]:")]),e._v(" The output port PosX outputs the relative displacement of the y coordinate (image coordinates) of the tracked point (approximatively located around the nose).")]),e._v(" "),t("li",[t("strong",[e._v("Scale[double]:")]),e._v(" The output port Scale outputs the relative change in scale of the apparent size of the fitted face model in the current image.")]),e._v(" "),t("li",[t("strong",[e._v("EyeLeft[int]:")]),e._v(" The output port EyeLeft outputs 0 if the left eye is opened, 1 if closed in the current image.")]),e._v(" "),t("li",[t("strong",[e._v("EyeRight[int]:")]),e._v(" The output port EyeRight outputs 0 if the right eye is opened, 1 if closed in the current image.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("reset:")]),e._v(" Forces reinit of the fitting of deformable model for the face in order to reset the tracking points.")]),e._v(" "),t("li",[t("strong",[e._v("showCameraSettings:")]),e._v(" Displays the camera settings dialog on screen")]),e._v(" "),t("li",[t("strong",[e._v("setReferencePose:")]),e._v(" sets the reference pose")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("EyebrowsRaised:")]),e._v(" this event gets raised everytime the plugin detects a specific configuration of the facial landmarks corresponding to a "),t("em",[e._v("surprise")]),e._v(" expression.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("cameraSelection [string, combobox selection]:")]),e._v(" this property determines the index of the input camera. Possible values range from “first camera” to “fifth camera”. If only one camera is available in the system, “first camera” is the correct choice.")]),e._v(" "),t("li",[t("strong",[e._v("cameraResolution [string, combobox selection]:")]),e._v(" this selection box provides several standard camera resolutions. Changing the resolution affects accuracy and performance (CPU load of the runtime system). Provided selections include “160x120”, “320x240”, “640x480” and “800x600”. If the selected resolution cannot be delivered by the image acquisition device, the closest matching resolution is chosen automatically by the plugin.")]),e._v(" "),t("li",[t("strong",[e._v("cameraDisplayUpdate [integer]:")]),e._v(" this property allows to select the update rate for the camera display in milliseconds. If “0” milliseconds is chosen, no window for the live-video will be displayed. If “100” is chosen, the live image window will be updated 10 times a second. Please note that this property does not influence the frame rate of the camera nor the processing interval for new camera frames, only the display in the GUI is adjusted.")]),e._v(" "),t("li",[t("strong",[e._v("modelName [string]:")]),e._v(" this property informs the plugin about which is the trained model to load. The file is searched in the the FacetrackerCLM/EyeStateModels folder inside the plugin “data” folder. Specify the name without .yml extension.")])])])}),[],!1,null,null,null);t.default=r.exports},799:function(e,t,o){e.exports=o.p+"assets/img/facetrackerclm.45de8d83.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[256],{1230:function(e,t,o){"use strict";o.r(t);var i=o(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("The FacetrackerCLM component is one of the vision based plugin. At this stage of development it offers the same functionalities for mouse emulation as the other sensor plugin named "),t("strong",[t("a",{attrs:{href:"FacetrackerLK.htm"}},[e._v("facetrackerLK")])]),e._v(" .")]),e._v(" "),t("p",[e._v("The underlying mechanism is based on the tracking of facial features detected in a first initialization stage by fitting a deformable face model on the image as soon as the region of interest is identified thanks to the OpenCV implementation of the Viola-Jones classifier.")]),e._v(" "),t("p",[e._v("The plugin outputs at each frame the relative offsets of a series of measures based on the tracked points with respect to the previous frame. These offsets may be integrated or used directly as inputs for the mouse emulator actuators. Usually it is a good idea to use the relative displacement of the centre of the face (PosX and PosY) to guide the mouse movements and reserve the other measurements or events to implement other optional functionalities (the head roll, pitch and yaw angles and relative scale of the face).")]),e._v(" "),t("p",[e._v("The FacetrackerCLM also introduces the detection of facial gestures that can be then exploited in the ACS models to directly perform actions or trigger events. In this version an event is sent for the detection of the raising of both eyebrows.")]),e._v(" "),t("p",[e._v("For a closer explaination of the EyeTrackerCLM functions and the training algorithm for eye states please refer to the document FacetrackerCLM.pdf in the folder /documentation.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(796),alt:"Screenshot: FacetrackerCLM plugin",title:"Screenshot: FacetrackerCLM plugin"}})]),e._v(" "),t("p",[e._v("FacetrackerCLM plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A camera has to be available in the operating system (preferably a consumer USB camera).")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("p",[e._v("There are no input ports for this plugin.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Roll[double]:")]),e._v(" The output port Roll outputs the relative change of the roll angle of the head pose (degrees).")]),e._v(" "),t("li",[t("strong",[e._v("Pitch[double]:")]),e._v(" The output port Pitch outputs the relative change of the pitch angle of the head pose (degrees).")]),e._v(" "),t("li",[t("strong",[e._v("Yaw[double]:")]),e._v(" The output port Yaw outputs the relative change of the yaw angle of the head pose (degrees).")]),e._v(" "),t("li",[t("strong",[e._v("PosX[double]:")]),e._v(" The output port PosX outputs the relative displacement of the x coordinate (image coordinates) of the tracked point (approximatively located around the nose).")]),e._v(" "),t("li",[t("strong",[e._v("PosY[double]:")]),e._v(" The output port PosX outputs the relative displacement of the y coordinate (image coordinates) of the tracked point (approximatively located around the nose).")]),e._v(" "),t("li",[t("strong",[e._v("Scale[double]:")]),e._v(" The output port Scale outputs the relative change in scale of the apparent size of the fitted face model in the current image.")]),e._v(" "),t("li",[t("strong",[e._v("EyeLeft[int]:")]),e._v(" The output port EyeLeft outputs 0 if the left eye is opened, 1 if closed in the current image.")]),e._v(" "),t("li",[t("strong",[e._v("EyeRight[int]:")]),e._v(" The output port EyeRight outputs 0 if the right eye is opened, 1 if closed in the current image.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("reset:")]),e._v(" Forces reinit of the fitting of deformable model for the face in order to reset the tracking points.")]),e._v(" "),t("li",[t("strong",[e._v("showCameraSettings:")]),e._v(" Displays the camera settings dialog on screen")]),e._v(" "),t("li",[t("strong",[e._v("setReferencePose:")]),e._v(" sets the reference pose")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("EyebrowsRaised:")]),e._v(" this event gets raised everytime the plugin detects a specific configuration of the facial landmarks corresponding to a "),t("em",[e._v("surprise")]),e._v(" expression.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("cameraSelection [string, combobox selection]:")]),e._v(" this property determines the index of the input camera. Possible values range from “first camera” to “fifth camera”. If only one camera is available in the system, “first camera” is the correct choice.")]),e._v(" "),t("li",[t("strong",[e._v("cameraResolution [string, combobox selection]:")]),e._v(" this selection box provides several standard camera resolutions. Changing the resolution affects accuracy and performance (CPU load of the runtime system). Provided selections include “160x120”, “320x240”, “640x480” and “800x600”. If the selected resolution cannot be delivered by the image acquisition device, the closest matching resolution is chosen automatically by the plugin.")]),e._v(" "),t("li",[t("strong",[e._v("cameraDisplayUpdate [integer]:")]),e._v(" this property allows to select the update rate for the camera display in milliseconds. If “0” milliseconds is chosen, no window for the live-video will be displayed. If “100” is chosen, the live image window will be updated 10 times a second. Please note that this property does not influence the frame rate of the camera nor the processing interval for new camera frames, only the display in the GUI is adjusted.")]),e._v(" "),t("li",[t("strong",[e._v("modelName [string]:")]),e._v(" this property informs the plugin about which is the trained model to load. The file is searched in the the FacetrackerCLM/EyeStateModels folder inside the plugin “data” folder. Specify the name without .yml extension.")])])])}),[],!1,null,null,null);t.default=r.exports},796:function(e,t,o){e.exports=o.p+"assets/img/facetrackerclm.45de8d83.jpg"}}]); \ No newline at end of file diff --git a/assets/js/257.8c9ce1d0.js b/assets/js/257.1ed59be9.js similarity index 94% rename from assets/js/257.8c9ce1d0.js rename to assets/js/257.1ed59be9.js index 6a86c142f8..c7c6f34a47 100644 --- a/assets/js/257.8c9ce1d0.js +++ b/assets/js/257.1ed59be9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[257],{1234:function(e,t,r){"use strict";r.r(t);var o=r(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"folderbrowser"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#folderbrowser"}},[e._v("#")]),e._v(" FolderBrowser")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: File System)")]),e._v(" "),t("p",[e._v("The "),t("strong",[e._v("FolderBrowser")]),e._v(" component allows to browse and select files in a given folder or subfolders of it. The navigation can be controlled by events.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(804),alt:"Screenshot: FolderBrowser plugin",title:"Screenshot: FolderBrowser plugin"}})]),e._v(" "),t("p",[e._v("The FolderBrowser plugin block element of the ACS.")]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("initialFolder [string]")]),e._v(": The initial folder to start browsing.")]),e._v(" "),t("li",[t("strong",[e._v("wrapAround [boolean]")]),e._v(": If true, the browsing is wrapped around after the last entry.")]),e._v(" "),t("li",[t("strong",[e._v("exitInitialFolder [boolean]")]),e._v(": If true, the initial folder may be exited.")]),e._v(" "),t("li",[t("strong",[e._v("autoListFiles [boolean]")]),e._v(": Automatically output files when entering the folder.")]),e._v(" "),t("li",[t("strong",[e._v("noFolderMessage [string]")]),e._v(": Message to be sent to the folderName port if no subfolder is available.")]),e._v(" "),t("li",[t("strong",[e._v("noFileMessage [string]")]),e._v(": The message to be sent to the fileNames port, if no file is available.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("next")]),e._v(": Got to the next folder in current directory")]),e._v(" "),t("li",[t("strong",[e._v("previous")]),e._v(": Go to the previous folder in current directory")]),e._v(" "),t("li",[t("strong",[e._v("enter")]),e._v(": Enter current folder")]),e._v(" "),t("li",[t("strong",[e._v("exit")]),e._v(": Exit current folder")]),e._v(" "),t("li",[t("strong",[e._v("current")]),e._v(": Output current folder")]),e._v(" "),t("li",[t("strong",[e._v("listFiles")]),e._v(": Lists files in current folder")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("folderName [string]")]),e._v(": The name of the current folder (without path).")]),e._v(" "),t("li",[t("strong",[e._v("folderPath [boolean]")]),e._v(": The name of the current folder (including path)")]),e._v(" "),t("li",[t("strong",[e._v("fileNames [boolean]")]),e._v(": The names of the files in current folder.")]),e._v(" "),t("li",[t("strong",[e._v("filePaths [boolean]")]),e._v(": The names of the files in current folder (including path)")])])])}),[],!1,null,null,null);t.default=s.exports},804:function(e,t,r){e.exports=r.p+"assets/img/folderbrowser.b4608102.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[257],{1233:function(e,t,r){"use strict";r.r(t);var o=r(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"folderbrowser"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#folderbrowser"}},[e._v("#")]),e._v(" FolderBrowser")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: File System)")]),e._v(" "),t("p",[e._v("The "),t("strong",[e._v("FolderBrowser")]),e._v(" component allows to browse and select files in a given folder or subfolders of it. The navigation can be controlled by events.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(801),alt:"Screenshot: FolderBrowser plugin",title:"Screenshot: FolderBrowser plugin"}})]),e._v(" "),t("p",[e._v("The FolderBrowser plugin block element of the ACS.")]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("initialFolder [string]")]),e._v(": The initial folder to start browsing.")]),e._v(" "),t("li",[t("strong",[e._v("wrapAround [boolean]")]),e._v(": If true, the browsing is wrapped around after the last entry.")]),e._v(" "),t("li",[t("strong",[e._v("exitInitialFolder [boolean]")]),e._v(": If true, the initial folder may be exited.")]),e._v(" "),t("li",[t("strong",[e._v("autoListFiles [boolean]")]),e._v(": Automatically output files when entering the folder.")]),e._v(" "),t("li",[t("strong",[e._v("noFolderMessage [string]")]),e._v(": Message to be sent to the folderName port if no subfolder is available.")]),e._v(" "),t("li",[t("strong",[e._v("noFileMessage [string]")]),e._v(": The message to be sent to the fileNames port, if no file is available.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("next")]),e._v(": Got to the next folder in current directory")]),e._v(" "),t("li",[t("strong",[e._v("previous")]),e._v(": Go to the previous folder in current directory")]),e._v(" "),t("li",[t("strong",[e._v("enter")]),e._v(": Enter current folder")]),e._v(" "),t("li",[t("strong",[e._v("exit")]),e._v(": Exit current folder")]),e._v(" "),t("li",[t("strong",[e._v("current")]),e._v(": Output current folder")]),e._v(" "),t("li",[t("strong",[e._v("listFiles")]),e._v(": Lists files in current folder")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("folderName [string]")]),e._v(": The name of the current folder (without path).")]),e._v(" "),t("li",[t("strong",[e._v("folderPath [boolean]")]),e._v(": The name of the current folder (including path)")]),e._v(" "),t("li",[t("strong",[e._v("fileNames [boolean]")]),e._v(": The names of the files in current folder.")]),e._v(" "),t("li",[t("strong",[e._v("filePaths [boolean]")]),e._v(": The names of the files in current folder (including path)")])])])}),[],!1,null,null,null);t.default=s.exports},801:function(e,t,r){e.exports=r.p+"assets/img/folderbrowser.b4608102.jpg"}}]); \ No newline at end of file diff --git a/assets/js/258.92321666.js b/assets/js/258.2d1025aa.js similarity index 96% rename from assets/js/258.92321666.js rename to assets/js/258.2d1025aa.js index dc76b3bac3..5ba7e82aa2 100644 --- a/assets/js/258.92321666.js +++ b/assets/js/258.2d1025aa.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[258],{1232:function(e,t,h){"use strict";h.r(t);var i=h(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"headpositionhc"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#headpositionhc"}},[e._v("#")]),e._v(" HeadPositionHC")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("This plug-in provides a selection of up to 12 choices via the head. A choice can be selected through looking to the side. The angle of the head is calculated with the position of the ear and the mouth. The detection of the features is realised with HaarCascade.")]),e._v(" "),t("p",[t("img",{attrs:{src:h(801),alt:"Screenshot: HeadPositionHC plug-in",title:"Screenshot: HeadPositionHC plugin"}})]),e._v(" "),t("p",[e._v("The HeadPositionHC sensor plug-in")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A webcam or an other camera has to be connected to the computer.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CellNumber:")]),e._v(" the number of the current selected Choice")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select:")]),e._v(" will be triggered when the position is held for an amount of time")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("ChoiceEachSide [integer]:")]),e._v(" sets the choices, which are visible and selectable for each side. (1-6 Choices each side are possible)")]),e._v(" "),t("li",[t("strong",[e._v("Angle1LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the first choice on the left side. Every value lower than this value and higher than the value of Angle2LeftSide selects the first choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle2LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the second choice on the left side. Every value lower than this value and higher than the value of Angle3LeftSide selects the second choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle3LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the third choice on the left side. Every value lower than this value and higher than the value of Angle4LeftSide selects the third choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle4LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the fourth choice on the left side. Every value lower than this value and higher than the value of Angle5LeftSide selects the fourth choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle5LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the fifth choice on the left side. Every value lower than this value and higher than the value of Angle6LeftSide selects the fifth choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle6LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the sixth choice on the left side. Every value lower than this value selects the sixth choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle1RightSide [integer]:")]),e._v(" sets the lower value of the angle for the first choice on the right side. Every value higher than this value and lower than the value of Angle2RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle2RightSide [integer]:")]),e._v(" sets the lower value of the angle for the second choice on the right side. Every value higher than this value and lower than the value of Angle3RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle3RightSide [integer]:")]),e._v(" sets the lower value of the angle for the third choice on the right side. Every value higher than this value and lower than the value of Angle4RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle4RightSide [integer]:")]),e._v(" sets the lower value of the angle for the fourth choice on the right side. Every value higher than this value and lower than the value of Angle5RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle5RightSide [integer]:")]),e._v(" sets the lower value of the angle for the fifth choice on the right side. Every value higher than this value and lower than the value of Angle6RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle6RightSide [integer]:")]),e._v(" sets the lower value of the angle for the sixth choice on the right side. Every value higher than this value selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("PathForHaarCascade [string]:")]),e._v(" Filepath to the folder, where the HaarCascade-files are stored.")]),e._v(" "),t("li",[t("strong",[e._v("CameraID [integer]:")]),e._v(" the ID of the Camera.")]),e._v(" "),t("li",[t("strong",[e._v("CounterResettingROI [integer]:")]),e._v(" the number of frames to wait before resetting the ROI (finding the face) when no feature is found.")]),e._v(" "),t("li",[t("strong",[e._v("CounterToSendSelectEvent [integer]:")]),e._v(" the number of frames, which the person has to hold the position until the select event is triggered.")])])])}),[],!1,null,null,null);t.default=r.exports},801:function(e,t,h){e.exports=h.p+"assets/img/headpositionhc.38072afc.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[258],{1235:function(e,t,h){"use strict";h.r(t);var i=h(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"headpositionhc"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#headpositionhc"}},[e._v("#")]),e._v(" HeadPositionHC")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("This plug-in provides a selection of up to 12 choices via the head. A choice can be selected through looking to the side. The angle of the head is calculated with the position of the ear and the mouth. The detection of the features is realised with HaarCascade.")]),e._v(" "),t("p",[t("img",{attrs:{src:h(803),alt:"Screenshot: HeadPositionHC plug-in",title:"Screenshot: HeadPositionHC plugin"}})]),e._v(" "),t("p",[e._v("The HeadPositionHC sensor plug-in")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A webcam or an other camera has to be connected to the computer.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("CellNumber:")]),e._v(" the number of the current selected Choice")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Select:")]),e._v(" will be triggered when the position is held for an amount of time")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("ChoiceEachSide [integer]:")]),e._v(" sets the choices, which are visible and selectable for each side. (1-6 Choices each side are possible)")]),e._v(" "),t("li",[t("strong",[e._v("Angle1LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the first choice on the left side. Every value lower than this value and higher than the value of Angle2LeftSide selects the first choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle2LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the second choice on the left side. Every value lower than this value and higher than the value of Angle3LeftSide selects the second choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle3LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the third choice on the left side. Every value lower than this value and higher than the value of Angle4LeftSide selects the third choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle4LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the fourth choice on the left side. Every value lower than this value and higher than the value of Angle5LeftSide selects the fourth choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle5LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the fifth choice on the left side. Every value lower than this value and higher than the value of Angle6LeftSide selects the fifth choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle6LeftSide [integer]:")]),e._v(" sets the upper value of the angle for the sixth choice on the left side. Every value lower than this value selects the sixth choice of the left side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle1RightSide [integer]:")]),e._v(" sets the lower value of the angle for the first choice on the right side. Every value higher than this value and lower than the value of Angle2RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle2RightSide [integer]:")]),e._v(" sets the lower value of the angle for the second choice on the right side. Every value higher than this value and lower than the value of Angle3RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle3RightSide [integer]:")]),e._v(" sets the lower value of the angle for the third choice on the right side. Every value higher than this value and lower than the value of Angle4RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle4RightSide [integer]:")]),e._v(" sets the lower value of the angle for the fourth choice on the right side. Every value higher than this value and lower than the value of Angle5RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle5RightSide [integer]:")]),e._v(" sets the lower value of the angle for the fifth choice on the right side. Every value higher than this value and lower than the value of Angle6RightSide selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("Angle6RightSide [integer]:")]),e._v(" sets the lower value of the angle for the sixth choice on the right side. Every value higher than this value selects the first choice of the right side.")]),e._v(" "),t("li",[t("strong",[e._v("PathForHaarCascade [string]:")]),e._v(" Filepath to the folder, where the HaarCascade-files are stored.")]),e._v(" "),t("li",[t("strong",[e._v("CameraID [integer]:")]),e._v(" the ID of the Camera.")]),e._v(" "),t("li",[t("strong",[e._v("CounterResettingROI [integer]:")]),e._v(" the number of frames to wait before resetting the ROI (finding the face) when no feature is found.")]),e._v(" "),t("li",[t("strong",[e._v("CounterToSendSelectEvent [integer]:")]),e._v(" the number of frames, which the person has to hold the position until the select event is triggered.")])])])}),[],!1,null,null,null);t.default=r.exports},803:function(e,t,h){e.exports=h.p+"assets/img/headpositionhc.38072afc.png"}}]); \ No newline at end of file diff --git a/assets/js/259.e5dba3c5.js b/assets/js/259.d92ca943.js similarity index 98% rename from assets/js/259.e5dba3c5.js rename to assets/js/259.d92ca943.js index 4d0117dd62..27a1b1280a 100644 --- a/assets/js/259.e5dba3c5.js +++ b/assets/js/259.d92ca943.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[259],{1237:function(e,r,t){"use strict";t.r(r);var s=t(2),o=Object(s.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"intelrealsense"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#intelrealsense"}},[e._v("#")]),e._v(" IntelRealSense")]),e._v(" "),r("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),r("p",[e._v("OS: >= Windows 8.1, 64 bit")]),e._v(" "),r("p",[e._v("This component interfaces the Intel Real Sense F200 (SR300) 3D camera and provides head tracking and facial gesture recognition functionality. The head tracking could be used for camera mouse applications and provides 3D absolute coordinates. The facial gestures could be used for simple actions like mouse click or key emulation. Each facial gesture has a recognition score. The user can define the threshold that triggers an event when the score exceeds the threshold.")]),e._v(" "),r("h2",{attrs:{id:"requirements"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),r("p",[e._v("You need an "),r("a",{attrs:{href:"https://software.intel.com/de-de/realsense/sr300camera",target:"_blank",rel:"noopener noreferrer"}},[e._v("Intel Real Sense F200 (SR300)"),r("OutboundLink")],1),e._v(" camera plugged in and the SDK installed and running. The camera only supports Windows (>= 8.1, 64 Bit).")]),e._v(" "),r("p",[r("img",{attrs:{src:t(808),alt:"Intel Real Sense 3D camera",title:"Intel Real Sense F200 (SR300) camera"}})]),e._v(" "),r("p",[e._v("Intel Real Sense F200 (SR300) camera")]),e._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("h [integer]:")]),e._v(" The face rectangle height in pixels.")]),e._v(" "),r("li",[r("strong",[e._v("w [integer]:")]),e._v(" The face rectangle width in pixels.")]),e._v(" "),r("li",[r("strong",[e._v("x [integer]:")]),e._v(" The x coordinate of the top left corner of the face rectangle.")]),e._v(" "),r("li",[r("strong",[e._v("y [integer]:")]),e._v(" The y coordinate of the top left corner of the face rectangle.")]),e._v(" "),r("li",[r("strong",[e._v("roll [integer]:")]),e._v(" Degree of head roll.")]),e._v(" "),r("li",[r("strong",[e._v("yaw [integer]:")]),e._v(" Degree of head yaw (left - right).")]),e._v(" "),r("li",[r("strong",[e._v("pitch [integer]:")]),e._v(" Degree of head pitch (up - down).")])]),e._v(" "),r("h2",{attrs:{id:"event-trigger-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("browRaiserLeft:")]),e._v(" browRaiserLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("browRaiserRight:")]),e._v(" browRaiserRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("browLowererLeft:")]),e._v(" browLowererLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("browLowererRight:")]),e._v(" browLowererRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("smile:")]),e._v(" smile expression happened")]),e._v(" "),r("li",[r("strong",[e._v("kiss:")]),e._v(" kiss expression happened")]),e._v(" "),r("li",[r("strong",[e._v("mouthOpen:")]),e._v(" mouthOpen expression happened")]),e._v(" "),r("li",[r("strong",[e._v("tongueOut:")]),e._v(" tongueOut expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesClosedLeft:")]),e._v(" eyesClosedLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesClosedRight:")]),e._v(" eyesClosedRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesTurnLeft:")]),e._v(" eyesTurnLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesTurnRight:")]),e._v(" eyesTurnRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesUp:")]),e._v(" eyesUp expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesDown:")]),e._v(" eyesDown expression happened")]),e._v(" "),r("li",[r("strong",[e._v("puffLeft:")]),e._v(" puffLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("puffRight:")]),e._v(" puffRight expression happened")])]),e._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("deviceModel [combobox selection]:")]),e._v(" Camera model, one of: F200, R200, R200_Enhanced, SR300")]),e._v(" "),r("li",[r("strong",[e._v("enableExpressions:")]),e._v(" Enable,Disable facial expressions")]),e._v(" "),r("li",[r("strong",[e._v("displayGUI:")]),e._v(" Enable, Disable camera gui.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowRaiserLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowRaiserRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowLowererLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowLowererRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreSmile:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreKiss:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreMouthOpen:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreThongueOut:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesClosedLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesClosedRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesTurnLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesTurnRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesUp:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesDown:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scorePuffLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scorePuffRight:")]),e._v(" Set score threshold value of expression to trigger event.")])])])}),[],!1,null,null,null);r.default=o.exports},808:function(e,r,t){e.exports=t.p+"assets/img/realsense_f200_camera.1ced686a.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[259],{1237:function(e,r,t){"use strict";t.r(r);var s=t(2),o=Object(s.a)({},(function(){var e=this,r=e._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"intelrealsense"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#intelrealsense"}},[e._v("#")]),e._v(" IntelRealSense")]),e._v(" "),r("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),r("p",[e._v("OS: >= Windows 8.1, 64 bit")]),e._v(" "),r("p",[e._v("This component interfaces the Intel Real Sense F200 (SR300) 3D camera and provides head tracking and facial gesture recognition functionality. The head tracking could be used for camera mouse applications and provides 3D absolute coordinates. The facial gestures could be used for simple actions like mouse click or key emulation. Each facial gesture has a recognition score. The user can define the threshold that triggers an event when the score exceeds the threshold.")]),e._v(" "),r("h2",{attrs:{id:"requirements"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),r("p",[e._v("You need an "),r("a",{attrs:{href:"https://software.intel.com/de-de/realsense/sr300camera",target:"_blank",rel:"noopener noreferrer"}},[e._v("Intel Real Sense F200 (SR300)"),r("OutboundLink")],1),e._v(" camera plugged in and the SDK installed and running. The camera only supports Windows (>= 8.1, 64 Bit).")]),e._v(" "),r("p",[r("img",{attrs:{src:t(806),alt:"Intel Real Sense 3D camera",title:"Intel Real Sense F200 (SR300) camera"}})]),e._v(" "),r("p",[e._v("Intel Real Sense F200 (SR300) camera")]),e._v(" "),r("h2",{attrs:{id:"output-port-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("h [integer]:")]),e._v(" The face rectangle height in pixels.")]),e._v(" "),r("li",[r("strong",[e._v("w [integer]:")]),e._v(" The face rectangle width in pixels.")]),e._v(" "),r("li",[r("strong",[e._v("x [integer]:")]),e._v(" The x coordinate of the top left corner of the face rectangle.")]),e._v(" "),r("li",[r("strong",[e._v("y [integer]:")]),e._v(" The y coordinate of the top left corner of the face rectangle.")]),e._v(" "),r("li",[r("strong",[e._v("roll [integer]:")]),e._v(" Degree of head roll.")]),e._v(" "),r("li",[r("strong",[e._v("yaw [integer]:")]),e._v(" Degree of head yaw (left - right).")]),e._v(" "),r("li",[r("strong",[e._v("pitch [integer]:")]),e._v(" Degree of head pitch (up - down).")])]),e._v(" "),r("h2",{attrs:{id:"event-trigger-description"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("browRaiserLeft:")]),e._v(" browRaiserLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("browRaiserRight:")]),e._v(" browRaiserRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("browLowererLeft:")]),e._v(" browLowererLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("browLowererRight:")]),e._v(" browLowererRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("smile:")]),e._v(" smile expression happened")]),e._v(" "),r("li",[r("strong",[e._v("kiss:")]),e._v(" kiss expression happened")]),e._v(" "),r("li",[r("strong",[e._v("mouthOpen:")]),e._v(" mouthOpen expression happened")]),e._v(" "),r("li",[r("strong",[e._v("tongueOut:")]),e._v(" tongueOut expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesClosedLeft:")]),e._v(" eyesClosedLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesClosedRight:")]),e._v(" eyesClosedRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesTurnLeft:")]),e._v(" eyesTurnLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesTurnRight:")]),e._v(" eyesTurnRight expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesUp:")]),e._v(" eyesUp expression happened")]),e._v(" "),r("li",[r("strong",[e._v("eyesDown:")]),e._v(" eyesDown expression happened")]),e._v(" "),r("li",[r("strong",[e._v("puffLeft:")]),e._v(" puffLeft expression happened")]),e._v(" "),r("li",[r("strong",[e._v("puffRight:")]),e._v(" puffRight expression happened")])]),e._v(" "),r("h2",{attrs:{id:"properties"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),r("ul",[r("li",[r("strong",[e._v("deviceModel [combobox selection]:")]),e._v(" Camera model, one of: F200, R200, R200_Enhanced, SR300")]),e._v(" "),r("li",[r("strong",[e._v("enableExpressions:")]),e._v(" Enable,Disable facial expressions")]),e._v(" "),r("li",[r("strong",[e._v("displayGUI:")]),e._v(" Enable, Disable camera gui.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowRaiserLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowRaiserRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowLowererLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreBrowLowererRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreSmile:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreKiss:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreMouthOpen:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreThongueOut:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesClosedLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesClosedRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesTurnLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesTurnRight:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesUp:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scoreEyesDown:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scorePuffLeft:")]),e._v(" Set score threshold value of expression to trigger event.")]),e._v(" "),r("li",[r("strong",[e._v("scorePuffRight:")]),e._v(" Set score threshold value of expression to trigger event.")])])])}),[],!1,null,null,null);r.default=o.exports},806:function(e,r,t){e.exports=t.p+"assets/img/realsense_f200_camera.1ced686a.jpg"}}]); \ No newline at end of file diff --git a/assets/js/26.7a748c90.js b/assets/js/26.63399639.js similarity index 99% rename from assets/js/26.7a748c90.js rename to assets/js/26.63399639.js index c5dee5b6bb..fcb289f897 100644 --- a/assets/js/26.7a748c90.js +++ b/assets/js/26.63399639.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{297:function(e,t){e.exports="data:image/png;base64,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"},298:function(e,t){e.exports="data:image/png;base64,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"},299:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_33ee9963708d1fff.70ac87d7.png"},300:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_f830b9b181946728.4be74a14.png"},301:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_d5be58f6ea0f5f1.b4ff3013.png"},302:function(e,t,a){e.exports=a.p+"assets/img/eclipse-ant-buildtarget.a52616ed.png"},981:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"development-environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-environment"}},[e._v("#")]),e._v(" Development Environment")]),e._v(" "),t("h2",{attrs:{id:"repository-overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repository-overview"}},[e._v("#")]),e._v(" Repository Overview")]),e._v(" "),t("p",[e._v("The source code repository is organised in the following subfolders:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(297),alt:""}})]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ACS")])]),e._v(" folder contains the AsTeRICS Configuration Suite source code.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Android")])]),e._v(" folder contains a server application for Android phones which allows interfacing with the AsTeRICS Android plugin to use phone functions in AsTeRICS models.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ARE")])]),e._v(" folder contains the middleware and service layers and ARE components.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("bin")])]),e._v(" folder contains subfolders where ARE and ACS executable files are placed during the build flow. These folders contain additional configuration files or dependencies, for example the config.ini and loader.ini files which specify the modules which are loaded by the ARE at startup.")]),e._v(" "),t("p",[e._v("Additionally, the bin folder contains several resources which are useful, e.g. a pre-built ACS with demo models (in the ACS\\models folder) and the OSKA application.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("BNCIevaluationSuite")])]),e._v(" is a collection of matlab files for analysis and comparison of algorithms for Brain Computer Interfaces (contributed by Starlab).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("CIM")])]),e._v(" folder contains firmware for the microcontroller modules used to interface the system to the environment (maintained by IMA and FHTW).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Documentation")])]),e._v(" folder contains the User- and the Developer Manual, and OSKA manual and the licence information for the developed and all utilized source code and libraries.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("NativeASAPI")])]),e._v(" folder contains C++ libraries for mobile-phone and GSM modem access, 3d-mouse and tremor reduction from own C++ projects.")]),e._v(" "),t("h2",{attrs:{id:"clone-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-repository"}},[e._v("#")]),e._v(" Clone Repository")]),e._v(" "),t("p",[e._v("Install a "),t("a",{attrs:{href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"}},[e._v("git"),t("OutboundLink")],1),e._v(" command line client and clone the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),t("OutboundLink")],1),e._v(" by entering:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/asterics/AsTeRICS.git\n")])])]),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("p",[e._v("You need:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Java Development Kit 8")]),e._v(": "),t("a",{attrs:{href:"https://www.azul.com/downloads/zulu-community/?version=java-8-lts&package=jdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("Zulu JDKs"),t("OutboundLink")],1),e._v(" are recommended, but you can also use "),t("a",{attrs:{href:"https://openjdk.java.net/install/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenJDK"),t("OutboundLink")],1),e._v(" or the "),t("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Oracle JDK"),t("OutboundLink")],1),e._v(". If you are on Windows, be sure to select the 32-bit version of the JDK.")]),e._v(" "),t("li",[t("a",{attrs:{href:"http://ant.apache.org/bindownload.cgi",target:"_blank",rel:"noopener noreferrer"}},[e._v("apache ant build framework (version >= 1.9.1)"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Set "),t("a",{attrs:{href:"#environment-variables"}},[e._v("Environment Variables")]),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"environment-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[e._v("#")]),e._v(" Environment Variables")]),e._v(" "),t("ul",[t("li",[e._v("Ensure to set "),t("code",[e._v("JAVA_HOME")]),e._v(" to the folder where you installed the Java JDK and add the JDK bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")]),e._v(" "),t("li",[e._v("Ensure to set "),t("code",[e._v("ANT_HOME")]),e._v(" to the folder where you installed ant and add the ant bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")])]),e._v(" "),t("p",[e._v("See below an example of how to set the environment variable "),t("code",[e._v("JAVA_HOME")]),e._v(" on Windows 7.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(298),alt:"Setting Environment Variable JAVA_HOME on Windows 7"}})]),e._v(" "),t("h2",{attrs:{id:"build"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[e._v("#")]),e._v(" Build")]),e._v(" "),t("p",[e._v("AsTeRICS uses the build system "),t("code",[e._v("ant")]),e._v(".\nYou can simply build the framework from the command line:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h3",{attrs:{id:"building-are-middleware-services-and-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-are-middleware-services-and-plugins"}},[e._v("#")]),e._v(" Building ARE Middleware, Services and Plugins")]),e._v(" "),t("p",[e._v("In the "),t("code",[e._v("ARE")]),e._v(" subfolder the source code of the ARE middleware ("),t("code",[e._v("ARE/middleware")]),e._v("), ARE services ("),t("code",[e._v("ARE/services")]),e._v(") and plugins ("),t("code",[e._v("ARE/components")]),e._v(") can be found.")]),e._v(" "),t("p",[e._v("The middleware, the services and the components have separate ant build files ("),t("code",[e._v("build.xml")]),e._v("). The middleware and services are required for building the plugins (components). To build everything, a top-level build script is available in the "),t("code",[e._v("ARE")]),e._v(" folder.\nAlternatively, individual services or components can be built by selecting their associated "),t("code",[e._v("build.xml")]),e._v(" script from the corresponding subfolders.")]),e._v(" "),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" the ARE (plugins, services), enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE with "),t("strong",[e._v("remote debugging enabled")]),e._v(", enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run-debug\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h2",{attrs:{id:"eclipse-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eclipse-setup"}},[e._v("#")]),e._v(" Eclipse Setup")]),e._v(" "),t("p",[e._v("The AsTeRICS framework is not bound to a specific IDE, but "),t("a",{attrs:{href:"https://www.eclipse.org/downloads/packages/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Eclipse IDE for Enterprise Java Developers"),t("OutboundLink")],1),e._v(" is recommended. This will provide editing support for diverse file types (java, html, Js, CSS, xml). Alternately you can install "),t("em",[e._v("Eclipse IDE for Java Developers")]),e._v(" and later install addons for web development.")]),e._v(" "),t("h3",{attrs:{id:"java-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java-project"}},[e._v("#")]),e._v(" Java Project")]),e._v(" "),t("p",[e._v("You must create a "),t("code",[e._v("Java Project")]),e._v(" first:")]),e._v(" "),t("p",[e._v("Choose "),t("em",[e._v("File -> New -> JavaProject")]),e._v(" in the Eclipse main menu, disable the option "),t("em",[e._v("“Use default location”")]),e._v(" and browse to the "),t("em",[e._v("ARE")]),e._v(" subfolder:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(299),alt:""}})]),e._v(" "),t("p",[e._v("Then you should see something like this:\n"),t("img",{attrs:{src:a(300),alt:""}})]),e._v(" "),t("p",[e._v("Eclipse provides different views ("),t("em",[e._v("Window -> Show View")]),e._v("), where the "),t("em",[e._v("Navigator")]),e._v(" and the "),t("em",[e._v("Package Explorer")]),e._v(" are most useful for Java source code development.")]),e._v(" "),t("p",[e._v("Note that the “"),t("em",[e._v("Refresh")]),e._v("” command ("),t("em",[e._v("F5")]),e._v(") synchronizes the Navigator view with changes in the local file system.")]),e._v(" "),t("h3",{attrs:{id:"character-encoding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#character-encoding"}},[e._v("#")]),e._v(" Character encoding")]),e._v(" "),t("p",[e._v("Incorrect character encoding settings can cause problems with ANT-based builds in eclipse, especially if special characters like ö, ä, etc. are used in the source code. Be sure to use ISO-8859-1 as character encoding in "),t("em",[e._v("Configuations and Lauch")]),e._v(" settings (in the "),t("em",[e._v("Common")]),e._v(" tab) as shown in the screenshot (note that this is not the default setting in some versions of eclipse):")]),e._v(" "),t("p",[t("img",{attrs:{src:a(301),alt:""}})]),e._v(" "),t("h3",{attrs:{id:"editing-model-files-windows-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-model-files-windows-only"}},[e._v("#")]),e._v(" Editing Model Files (windows-only)")]),e._v(" "),t("p",[e._v("You can configure the Eclipse editor to open the "),t("em",[e._v("ACS")]),e._v(" editor for AsTeRICS model files ("),t("code",[e._v(".acs")]),e._v(").")]),e._v(" "),t("ol",[t("li",[e._v("Right click on a model file, select "),t("code",[e._v("Open with/Other")])]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("External programs")]),e._v(" and browse to "),t("code",[e._v("C:\\Program Files (x86)\\AsTeRICS\\ACS\\ACS.bat")]),e._v(" (Note: "),t("strong",[e._v("ACS.bat")]),e._v(")")]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("Use it for all `*.acs file")])]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Ok")])])]),e._v(" "),t("h3",{attrs:{id:"ant-within-eclipse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ant-within-eclipse"}},[e._v("#")]),e._v(" Ant within Eclipse")]),e._v(" "),t("p",[e._v("You can run the "),t("em",[e._v("ant")]),e._v(" targets of the AsTeRICS build system from within Eclipse.")]),e._v(" "),t("h4",{attrs:{id:"run-default-target"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-default-target"}},[e._v("#")]),e._v(" Run default target")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build")]),e._v(" (first entry)")])]),e._v(" "),t("h4",{attrs:{id:"run-selected-targets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-selected-targets"}},[e._v("#")]),e._v(" Run selected targets")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build...")]),e._v(" (second entry)")]),e._v(" "),t("li",[e._v("Click onto targets to run")]),e._v(" "),t("li",[e._v("Select order of execution at the bottom")]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Apply")]),e._v(" and "),t("code",[e._v("Run")])])]),e._v(" "),t("p",[e._v("The screenshot below shows the dialog for build target selection:\n"),t("img",{attrs:{src:a(302),alt:"Screenshot of ant build target selection"}})])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{297:function(e,t){e.exports="data:image/png;base64,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"},298:function(e,t){e.exports="data:image/png;base64,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"},299:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_33ee9963708d1fff.70ac87d7.png"},300:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_f830b9b181946728.4be74a14.png"},301:function(e,t,a){e.exports=a.p+"assets/img/DeveloperManual_html_d5be58f6ea0f5f1.b4ff3013.png"},302:function(e,t,a){e.exports=a.p+"assets/img/eclipse-ant-buildtarget.a52616ed.png"},983:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"development-environment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#development-environment"}},[e._v("#")]),e._v(" Development Environment")]),e._v(" "),t("h2",{attrs:{id:"repository-overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#repository-overview"}},[e._v("#")]),e._v(" Repository Overview")]),e._v(" "),t("p",[e._v("The source code repository is organised in the following subfolders:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(297),alt:""}})]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ACS")])]),e._v(" folder contains the AsTeRICS Configuration Suite source code.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Android")])]),e._v(" folder contains a server application for Android phones which allows interfacing with the AsTeRICS Android plugin to use phone functions in AsTeRICS models.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("ARE")])]),e._v(" folder contains the middleware and service layers and ARE components.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("bin")])]),e._v(" folder contains subfolders where ARE and ACS executable files are placed during the build flow. These folders contain additional configuration files or dependencies, for example the config.ini and loader.ini files which specify the modules which are loaded by the ARE at startup.")]),e._v(" "),t("p",[e._v("Additionally, the bin folder contains several resources which are useful, e.g. a pre-built ACS with demo models (in the ACS\\models folder) and the OSKA application.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("BNCIevaluationSuite")])]),e._v(" is a collection of matlab files for analysis and comparison of algorithms for Brain Computer Interfaces (contributed by Starlab).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("CIM")])]),e._v(" folder contains firmware for the microcontroller modules used to interface the system to the environment (maintained by IMA and FHTW).")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("Documentation")])]),e._v(" folder contains the User- and the Developer Manual, and OSKA manual and the licence information for the developed and all utilized source code and libraries.")]),e._v(" "),t("p",[e._v("The "),t("em",[t("strong",[e._v("NativeASAPI")])]),e._v(" folder contains C++ libraries for mobile-phone and GSM modem access, 3d-mouse and tremor reduction from own C++ projects.")]),e._v(" "),t("h2",{attrs:{id:"clone-repository"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clone-repository"}},[e._v("#")]),e._v(" Clone Repository")]),e._v(" "),t("p",[e._v("Install a "),t("a",{attrs:{href:"https://git-scm.com/downloads",target:"_blank",rel:"noopener noreferrer"}},[e._v("git"),t("OutboundLink")],1),e._v(" command line client and clone the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS.git",target:"_blank",rel:"noopener noreferrer"}},[e._v("repository"),t("OutboundLink")],1),e._v(" by entering:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" clone https://github.com/asterics/AsTeRICS.git\n")])])]),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("p",[e._v("You need:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Java Development Kit 8")]),e._v(": "),t("a",{attrs:{href:"https://www.azul.com/downloads/zulu-community/?version=java-8-lts&package=jdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("Zulu JDKs"),t("OutboundLink")],1),e._v(" are recommended, but you can also use "),t("a",{attrs:{href:"https://openjdk.java.net/install/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenJDK"),t("OutboundLink")],1),e._v(" or the "),t("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("Oracle JDK"),t("OutboundLink")],1),e._v(". If you are on Windows, be sure to select the 32-bit version of the JDK.")]),e._v(" "),t("li",[t("a",{attrs:{href:"http://ant.apache.org/bindownload.cgi",target:"_blank",rel:"noopener noreferrer"}},[e._v("apache ant build framework (version >= 1.9.1)"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Set "),t("a",{attrs:{href:"#environment-variables"}},[e._v("Environment Variables")]),e._v(".")])]),e._v(" "),t("h3",{attrs:{id:"environment-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[e._v("#")]),e._v(" Environment Variables")]),e._v(" "),t("ul",[t("li",[e._v("Ensure to set "),t("code",[e._v("JAVA_HOME")]),e._v(" to the folder where you installed the Java JDK and add the JDK bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")]),e._v(" "),t("li",[e._v("Ensure to set "),t("code",[e._v("ANT_HOME")]),e._v(" to the folder where you installed ant and add the ant bin path to the Environment Variable "),t("code",[e._v("Path")]),e._v(".")])]),e._v(" "),t("p",[e._v("See below an example of how to set the environment variable "),t("code",[e._v("JAVA_HOME")]),e._v(" on Windows 7.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(298),alt:"Setting Environment Variable JAVA_HOME on Windows 7"}})]),e._v(" "),t("h2",{attrs:{id:"build"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build"}},[e._v("#")]),e._v(" Build")]),e._v(" "),t("p",[e._v("AsTeRICS uses the build system "),t("code",[e._v("ant")]),e._v(".\nYou can simply build the framework from the command line:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h3",{attrs:{id:"building-are-middleware-services-and-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-are-middleware-services-and-plugins"}},[e._v("#")]),e._v(" Building ARE Middleware, Services and Plugins")]),e._v(" "),t("p",[e._v("In the "),t("code",[e._v("ARE")]),e._v(" subfolder the source code of the ARE middleware ("),t("code",[e._v("ARE/middleware")]),e._v("), ARE services ("),t("code",[e._v("ARE/services")]),e._v(") and plugins ("),t("code",[e._v("ARE/components")]),e._v(") can be found.")]),e._v(" "),t("p",[e._v("The middleware, the services and the components have separate ant build files ("),t("code",[e._v("build.xml")]),e._v("). The middleware and services are required for building the plugins (components). To build everything, a top-level build script is available in the "),t("code",[e._v("ARE")]),e._v(" folder.\nAlternatively, individual services or components can be built by selecting their associated "),t("code",[e._v("build.xml")]),e._v(" script from the corresponding subfolders.")]),e._v(" "),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" the ARE (plugins, services), enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run\n")])])]),t("p",[e._v("To "),t("strong",[e._v("build")]),e._v(" and "),t("strong",[e._v("start")]),e._v(" the ARE with "),t("strong",[e._v("remote debugging enabled")]),e._v(", enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant run-debug\n")])])]),t("p",[e._v("For other build targets and their meaning, enter:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("ant "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-projecthelp")]),e._v("\n")])])]),t("h2",{attrs:{id:"eclipse-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#eclipse-setup"}},[e._v("#")]),e._v(" Eclipse Setup")]),e._v(" "),t("p",[e._v("The AsTeRICS framework is not bound to a specific IDE, but "),t("a",{attrs:{href:"https://www.eclipse.org/downloads/packages/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Eclipse IDE for Enterprise Java Developers"),t("OutboundLink")],1),e._v(" is recommended. This will provide editing support for diverse file types (java, html, Js, CSS, xml). Alternately you can install "),t("em",[e._v("Eclipse IDE for Java Developers")]),e._v(" and later install addons for web development.")]),e._v(" "),t("h3",{attrs:{id:"java-project"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java-project"}},[e._v("#")]),e._v(" Java Project")]),e._v(" "),t("p",[e._v("You must create a "),t("code",[e._v("Java Project")]),e._v(" first:")]),e._v(" "),t("p",[e._v("Choose "),t("em",[e._v("File -> New -> JavaProject")]),e._v(" in the Eclipse main menu, disable the option "),t("em",[e._v("“Use default location”")]),e._v(" and browse to the "),t("em",[e._v("ARE")]),e._v(" subfolder:")]),e._v(" "),t("p",[t("img",{attrs:{src:a(299),alt:""}})]),e._v(" "),t("p",[e._v("Then you should see something like this:\n"),t("img",{attrs:{src:a(300),alt:""}})]),e._v(" "),t("p",[e._v("Eclipse provides different views ("),t("em",[e._v("Window -> Show View")]),e._v("), where the "),t("em",[e._v("Navigator")]),e._v(" and the "),t("em",[e._v("Package Explorer")]),e._v(" are most useful for Java source code development.")]),e._v(" "),t("p",[e._v("Note that the “"),t("em",[e._v("Refresh")]),e._v("” command ("),t("em",[e._v("F5")]),e._v(") synchronizes the Navigator view with changes in the local file system.")]),e._v(" "),t("h3",{attrs:{id:"character-encoding"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#character-encoding"}},[e._v("#")]),e._v(" Character encoding")]),e._v(" "),t("p",[e._v("Incorrect character encoding settings can cause problems with ANT-based builds in eclipse, especially if special characters like ö, ä, etc. are used in the source code. Be sure to use ISO-8859-1 as character encoding in "),t("em",[e._v("Configuations and Lauch")]),e._v(" settings (in the "),t("em",[e._v("Common")]),e._v(" tab) as shown in the screenshot (note that this is not the default setting in some versions of eclipse):")]),e._v(" "),t("p",[t("img",{attrs:{src:a(301),alt:""}})]),e._v(" "),t("h3",{attrs:{id:"editing-model-files-windows-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-model-files-windows-only"}},[e._v("#")]),e._v(" Editing Model Files (windows-only)")]),e._v(" "),t("p",[e._v("You can configure the Eclipse editor to open the "),t("em",[e._v("ACS")]),e._v(" editor for AsTeRICS model files ("),t("code",[e._v(".acs")]),e._v(").")]),e._v(" "),t("ol",[t("li",[e._v("Right click on a model file, select "),t("code",[e._v("Open with/Other")])]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("External programs")]),e._v(" and browse to "),t("code",[e._v("C:\\Program Files (x86)\\AsTeRICS\\ACS\\ACS.bat")]),e._v(" (Note: "),t("strong",[e._v("ACS.bat")]),e._v(")")]),e._v(" "),t("li",[e._v("Check "),t("code",[e._v("Use it for all `*.acs file")])]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Ok")])])]),e._v(" "),t("h3",{attrs:{id:"ant-within-eclipse"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ant-within-eclipse"}},[e._v("#")]),e._v(" Ant within Eclipse")]),e._v(" "),t("p",[e._v("You can run the "),t("em",[e._v("ant")]),e._v(" targets of the AsTeRICS build system from within Eclipse.")]),e._v(" "),t("h4",{attrs:{id:"run-default-target"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-default-target"}},[e._v("#")]),e._v(" Run default target")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build")]),e._v(" (first entry)")])]),e._v(" "),t("h4",{attrs:{id:"run-selected-targets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-selected-targets"}},[e._v("#")]),e._v(" Run selected targets")]),e._v(" "),t("ol",[t("li",[e._v("Right click onto file "),t("code",[e._v("build.xml")])]),e._v(" "),t("li",[e._v("Select "),t("code",[e._v("Run As/Ant Build...")]),e._v(" (second entry)")]),e._v(" "),t("li",[e._v("Click onto targets to run")]),e._v(" "),t("li",[e._v("Select order of execution at the bottom")]),e._v(" "),t("li",[e._v("Click onto "),t("code",[e._v("Apply")]),e._v(" and "),t("code",[e._v("Run")])])]),e._v(" "),t("p",[e._v("The screenshot below shows the dialog for build target selection:\n"),t("img",{attrs:{src:a(302),alt:"Screenshot of ant build target selection"}})])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/260.85089714.js b/assets/js/260.8cc984dd.js similarity index 98% rename from assets/js/260.85089714.js rename to assets/js/260.8cc984dd.js index b4bed182a1..38506f0748 100644 --- a/assets/js/260.85089714.js +++ b/assets/js/260.8cc984dd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[260],{1236:function(t,v,_){"use strict";_.r(v);var e=_(2),r=Object(e.a)({},(function(){var t=this,v=t._self._c;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"frontmatter-title"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),v("p",[t._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),t._v(" "),v("p",[t._v("This component provides access to keystrokes of a single key on the keyboard. The keystroke capture does not depend on a particular window or text field to have the input focus. For every keypress and release of the specified key an event gets fired. Possible applications include triggering functions by keyboard input, interfacing to speech recognition software or remapping keys to other keycodes.")]),t._v(" "),v("p",[v("img",{attrs:{src:_(807),alt:"Screenshot: KeyCapture plugin",title:"Screenshot: KeyCapture plugin"}})]),t._v(" "),v("p",[t._v("KeybCapture plugin")]),t._v(" "),v("h2",{attrs:{id:"requirements"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),v("p",[t._v("A keyboard which generates keystrokes or a software component which injects keystrokes into the operating system message queue.")]),t._v(" "),v("h2",{attrs:{id:"mapping-of-keycodes-to-actual-keys"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#mapping-of-keycodes-to-actual-keys"}},[t._v("#")]),t._v(" Mapping of keyCodes to actual keys")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Key")]),t._v(" "),v("th",[t._v("KeyCode")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("A")]),t._v(" "),v("td",[t._v("30")])]),t._v(" "),v("tr",[v("td",[t._v("B")]),t._v(" "),v("td",[t._v("48")])]),t._v(" "),v("tr",[v("td",[t._v("C")]),t._v(" "),v("td",[t._v("46")])]),t._v(" "),v("tr",[v("td",[t._v("D")]),t._v(" "),v("td",[t._v("32")])]),t._v(" "),v("tr",[v("td",[t._v("E")]),t._v(" "),v("td",[t._v("18")])]),t._v(" "),v("tr",[v("td",[t._v("F")]),t._v(" "),v("td",[t._v("33")])]),t._v(" "),v("tr",[v("td",[t._v("G")]),t._v(" "),v("td",[t._v("34")])]),t._v(" "),v("tr",[v("td",[t._v("H")]),t._v(" "),v("td",[t._v("35")])]),t._v(" "),v("tr",[v("td",[t._v("I")]),t._v(" "),v("td",[t._v("23")])]),t._v(" "),v("tr",[v("td",[t._v("J")]),t._v(" "),v("td",[t._v("36")])]),t._v(" "),v("tr",[v("td",[t._v("K")]),t._v(" "),v("td",[t._v("37")])]),t._v(" "),v("tr",[v("td",[t._v("L")]),t._v(" "),v("td",[t._v("38")])]),t._v(" "),v("tr",[v("td",[t._v("M")]),t._v(" "),v("td",[t._v("50")])]),t._v(" "),v("tr",[v("td",[t._v("N")]),t._v(" "),v("td",[t._v("49")])]),t._v(" "),v("tr",[v("td",[t._v("O")]),t._v(" "),v("td",[t._v("24")])]),t._v(" "),v("tr",[v("td",[t._v("P")]),t._v(" "),v("td",[t._v("25")])]),t._v(" "),v("tr",[v("td",[t._v("Q")]),t._v(" "),v("td",[t._v("16")])]),t._v(" "),v("tr",[v("td",[t._v("R")]),t._v(" "),v("td",[t._v("19")])]),t._v(" "),v("tr",[v("td",[t._v("S")]),t._v(" "),v("td",[t._v("31")])]),t._v(" "),v("tr",[v("td",[t._v("T")]),t._v(" "),v("td",[t._v("20")])]),t._v(" "),v("tr",[v("td",[t._v("U")]),t._v(" "),v("td",[t._v("22")])]),t._v(" "),v("tr",[v("td",[t._v("V")]),t._v(" "),v("td",[t._v("47")])]),t._v(" "),v("tr",[v("td",[t._v("W")]),t._v(" "),v("td",[t._v("17")])]),t._v(" "),v("tr",[v("td",[t._v("X")]),t._v(" "),v("td",[t._v("45")])]),t._v(" "),v("tr",[v("td",[t._v("Y")]),t._v(" "),v("td",[t._v("21")])]),t._v(" "),v("tr",[v("td",[t._v("Z")]),t._v(" "),v("td",[t._v("44")])]),t._v(" "),v("tr",[v("td",[t._v("0")]),t._v(" "),v("td",[t._v("11")])]),t._v(" "),v("tr",[v("td",[t._v("1")]),t._v(" "),v("td",[t._v("2")])]),t._v(" "),v("tr",[v("td",[t._v("2")]),t._v(" "),v("td",[t._v("3")])]),t._v(" "),v("tr",[v("td",[t._v("3")]),t._v(" "),v("td",[t._v("4")])]),t._v(" "),v("tr",[v("td",[t._v("4")]),t._v(" "),v("td",[t._v("5")])]),t._v(" "),v("tr",[v("td",[t._v("5")]),t._v(" "),v("td",[t._v("6")])]),t._v(" "),v("tr",[v("td",[t._v("6")]),t._v(" "),v("td",[t._v("7")])]),t._v(" "),v("tr",[v("td",[t._v("7")]),t._v(" "),v("td",[t._v("8")])]),t._v(" "),v("tr",[v("td",[t._v("8")]),t._v(" "),v("td",[t._v("9")])]),t._v(" "),v("tr",[v("td",[t._v("9")]),t._v(" "),v("td",[t._v("10")])]),t._v(" "),v("tr",[v("td",[t._v("F1")]),t._v(" "),v("td",[t._v("59")])]),t._v(" "),v("tr",[v("td",[t._v("F2")]),t._v(" "),v("td",[t._v("60")])]),t._v(" "),v("tr",[v("td",[t._v("F3")]),t._v(" "),v("td",[t._v("61")])]),t._v(" "),v("tr",[v("td",[t._v("F4")]),t._v(" "),v("td",[t._v("62")])]),t._v(" "),v("tr",[v("td",[t._v("F5")]),t._v(" "),v("td",[t._v("63")])]),t._v(" "),v("tr",[v("td",[t._v("F6")]),t._v(" "),v("td",[t._v("64")])]),t._v(" "),v("tr",[v("td",[t._v("F7")]),t._v(" "),v("td",[t._v("65")])]),t._v(" "),v("tr",[v("td",[t._v("F8")]),t._v(" "),v("td",[t._v("66")])]),t._v(" "),v("tr",[v("td",[t._v("F9")]),t._v(" "),v("td",[t._v("67")])]),t._v(" "),v("tr",[v("td",[t._v("F10")]),t._v(" "),v("td",[t._v("68")])]),t._v(" "),v("tr",[v("td",[t._v("F11")]),t._v(" "),v("td",[t._v("87")])]),t._v(" "),v("tr",[v("td",[t._v("F12")]),t._v(" "),v("td",[t._v("88")])]),t._v(" "),v("tr",[v("td",[t._v("F13")]),t._v(" "),v("td",[t._v("91")])]),t._v(" "),v("tr",[v("td",[t._v("F14")]),t._v(" "),v("td",[t._v("92")])]),t._v(" "),v("tr",[v("td",[t._v("F15")]),t._v(" "),v("td",[t._v("93")])]),t._v(" "),v("tr",[v("td",[t._v("F16")]),t._v(" "),v("td",[t._v("99")])]),t._v(" "),v("tr",[v("td",[t._v("F17")]),t._v(" "),v("td",[t._v("100")])]),t._v(" "),v("tr",[v("td",[t._v("F18")]),t._v(" "),v("td",[t._v("101")])]),t._v(" "),v("tr",[v("td",[t._v("F19")]),t._v(" "),v("td",[t._v("102")])]),t._v(" "),v("tr",[v("td",[t._v("F20")]),t._v(" "),v("td",[t._v("103")])]),t._v(" "),v("tr",[v("td",[t._v("F21")]),t._v(" "),v("td",[t._v("104")])]),t._v(" "),v("tr",[v("td",[t._v("F22")]),t._v(" "),v("td",[t._v("105")])]),t._v(" "),v("tr",[v("td",[t._v("F23")]),t._v(" "),v("td",[t._v("106")])]),t._v(" "),v("tr",[v("td",[t._v("F24")]),t._v(" "),v("td",[t._v("107")])]),t._v(" "),v("tr",[v("td",[t._v("ESC")]),t._v(" "),v("td",[t._v("1")])]),t._v(" "),v("tr",[v("td",[t._v("-")]),t._v(" "),v("td",[t._v("12")])]),t._v(" "),v("tr",[v("td",[t._v("=/+")]),t._v(" "),v("td",[t._v("13")])]),t._v(" "),v("tr",[v("td",[t._v("Backspace")]),t._v(" "),v("td",[t._v("14")])]),t._v(" "),v("tr",[v("td",[t._v("Tab")]),t._v(" "),v("td",[t._v("15")])]),t._v(" "),v("tr",[v("td",[t._v("Caps Lock")]),t._v(" "),v("td",[t._v("58")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Up")]),t._v(" "),v("td",[t._v("57416")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Left")]),t._v(" "),v("td",[t._v("57419")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Right")]),t._v(" "),v("td",[t._v("57421")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Down")]),t._v(" "),v("td",[t._v("57424")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 0")]),t._v(" "),v("td",[t._v("82")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 1")]),t._v(" "),v("td",[t._v("79")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 2")]),t._v(" "),v("td",[t._v("80")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 3")]),t._v(" "),v("td",[t._v("81")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 4")]),t._v(" "),v("td",[t._v("75")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 5")]),t._v(" "),v("td",[t._v("76")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 6")]),t._v(" "),v("td",[t._v("77")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 7")]),t._v(" "),v("td",[t._v("71")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 8")]),t._v(" "),v("td",[t._v("72")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 9")]),t._v(" "),v("td",[t._v("73")])]),t._v(" "),v("tr",[v("td",[t._v("Ctrl left")]),t._v(" "),v("td",[t._v("29")])]),t._v(" "),v("tr",[v("td",[t._v("Ctrl right")]),t._v(" "),v("td",[t._v("3613")])]),t._v(" "),v("tr",[v("td",[t._v("Alt left")]),t._v(" "),v("td",[t._v("56")])]),t._v(" "),v("tr",[v("td",[t._v("Alt right")]),t._v(" "),v("td",[t._v("3640")])]),t._v(" "),v("tr",[v("td",[t._v("Context Menu")]),t._v(" "),v("td",[t._v("3677")])]),t._v(" "),v("tr",[v("td",[t._v("Windows Key")]),t._v(" "),v("td",[t._v("3675 or 3676")])]),t._v(" "),v("tr",[v("td",[t._v("SPACE")]),t._v(" "),v("td",[t._v("57")])]),t._v(" "),v("tr",[v("td",[t._v("Print Screen")]),t._v(" "),v("td",[t._v("3639")])]),t._v(" "),v("tr",[v("td",[t._v("Scroll Lock")]),t._v(" "),v("td",[t._v("70")])]),t._v(" "),v("tr",[v("td",[t._v("Pause")]),t._v(" "),v("td",[t._v("3653")])]),t._v(" "),v("tr",[v("td",[t._v("Enter")]),t._v(" "),v("td",[t._v("28")])]),t._v(" "),v("tr",[v("td",[t._v("Page Up")]),t._v(" "),v("td",[t._v("3657")])]),t._v(" "),v("tr",[v("td",[t._v("Page Down")]),t._v(" "),v("td",[t._v("3665")])]),t._v(" "),v("tr",[v("td",[t._v(",")]),t._v(" "),v("td",[t._v("51")])]),t._v(" "),v("tr",[v("td",[t._v(".")]),t._v(" "),v("td",[t._v("52")])])])]),t._v(" "),v("p",[v("a",{attrs:{href:"https://github.com/kwhat/jnativehook/blob/master/src/java/org/jnativehook/keyboard/NativeKeyEvent.java",title:"Opens external link in new window",target:"_blank",rel:"noopener noreferrer"}},[t._v("Click here"),v("OutboundLink")],1),t._v(" to view a full list of keycodes.")]),t._v(" "),v("h2",{attrs:{id:"input-port-description"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("keyCode [integer]:")]),t._v(" The keycode of the key which should be captured. For a list of the mapping between keycodes and keys see the graphics above.")])]),t._v(" "),v("h2",{attrs:{id:"event-trigger-description"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("keyPressed:")]),t._v(" This event port fires an event if the key with the specified keyCode was pressed.")]),t._v(" "),v("li",[v("strong",[t._v("keyReleased:")]),t._v(" This event port fires an event if the key with the specified keyCode was released.")])]),t._v(" "),v("h2",{attrs:{id:"event-listener-description"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("enable:")]),t._v(" The keystate is captured and events get fired")]),t._v(" "),v("li",[v("strong",[t._v("disable:")]),t._v(" The plugin does not fire any event.")]),t._v(" "),v("li",[v("strong",[t._v("block:")]),t._v(" After this event, the keystroke of the key with the specified keyCode is not forwarded to the operating system.")]),t._v(" "),v("li",[v("strong",[t._v("unblock:")]),t._v(" After this event, the keystroke of the key with the specified keyCode is forwarded to the operating system.")])]),t._v(" "),v("h2",{attrs:{id:"properties"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("block [boolean]:")]),t._v(" If this property is set to true, no key press activities will be routed to the operating system")]),t._v(" "),v("li",[v("strong",[t._v("keyCode[integer]:")]),t._v(" The keycode of the key which should be captured. For a list of the mapping between keycodes and keys see the graphics above.")])])])}),[],!1,null,null,null);v.default=r.exports},807:function(t,v,_){t.exports=_.p+"assets/img/keycapture.23ab76be.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[260],{1239:function(t,v,_){"use strict";_.r(v);var e=_(2),r=Object(e.a)({},(function(){var t=this,v=t._self._c;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"frontmatter-title"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),v("p",[t._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),t._v(" "),v("p",[t._v("This component provides access to keystrokes of a single key on the keyboard. The keystroke capture does not depend on a particular window or text field to have the input focus. For every keypress and release of the specified key an event gets fired. Possible applications include triggering functions by keyboard input, interfacing to speech recognition software or remapping keys to other keycodes.")]),t._v(" "),v("p",[v("img",{attrs:{src:_(809),alt:"Screenshot: KeyCapture plugin",title:"Screenshot: KeyCapture plugin"}})]),t._v(" "),v("p",[t._v("KeybCapture plugin")]),t._v(" "),v("h2",{attrs:{id:"requirements"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),v("p",[t._v("A keyboard which generates keystrokes or a software component which injects keystrokes into the operating system message queue.")]),t._v(" "),v("h2",{attrs:{id:"mapping-of-keycodes-to-actual-keys"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#mapping-of-keycodes-to-actual-keys"}},[t._v("#")]),t._v(" Mapping of keyCodes to actual keys")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("Key")]),t._v(" "),v("th",[t._v("KeyCode")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("A")]),t._v(" "),v("td",[t._v("30")])]),t._v(" "),v("tr",[v("td",[t._v("B")]),t._v(" "),v("td",[t._v("48")])]),t._v(" "),v("tr",[v("td",[t._v("C")]),t._v(" "),v("td",[t._v("46")])]),t._v(" "),v("tr",[v("td",[t._v("D")]),t._v(" "),v("td",[t._v("32")])]),t._v(" "),v("tr",[v("td",[t._v("E")]),t._v(" "),v("td",[t._v("18")])]),t._v(" "),v("tr",[v("td",[t._v("F")]),t._v(" "),v("td",[t._v("33")])]),t._v(" "),v("tr",[v("td",[t._v("G")]),t._v(" "),v("td",[t._v("34")])]),t._v(" "),v("tr",[v("td",[t._v("H")]),t._v(" "),v("td",[t._v("35")])]),t._v(" "),v("tr",[v("td",[t._v("I")]),t._v(" "),v("td",[t._v("23")])]),t._v(" "),v("tr",[v("td",[t._v("J")]),t._v(" "),v("td",[t._v("36")])]),t._v(" "),v("tr",[v("td",[t._v("K")]),t._v(" "),v("td",[t._v("37")])]),t._v(" "),v("tr",[v("td",[t._v("L")]),t._v(" "),v("td",[t._v("38")])]),t._v(" "),v("tr",[v("td",[t._v("M")]),t._v(" "),v("td",[t._v("50")])]),t._v(" "),v("tr",[v("td",[t._v("N")]),t._v(" "),v("td",[t._v("49")])]),t._v(" "),v("tr",[v("td",[t._v("O")]),t._v(" "),v("td",[t._v("24")])]),t._v(" "),v("tr",[v("td",[t._v("P")]),t._v(" "),v("td",[t._v("25")])]),t._v(" "),v("tr",[v("td",[t._v("Q")]),t._v(" "),v("td",[t._v("16")])]),t._v(" "),v("tr",[v("td",[t._v("R")]),t._v(" "),v("td",[t._v("19")])]),t._v(" "),v("tr",[v("td",[t._v("S")]),t._v(" "),v("td",[t._v("31")])]),t._v(" "),v("tr",[v("td",[t._v("T")]),t._v(" "),v("td",[t._v("20")])]),t._v(" "),v("tr",[v("td",[t._v("U")]),t._v(" "),v("td",[t._v("22")])]),t._v(" "),v("tr",[v("td",[t._v("V")]),t._v(" "),v("td",[t._v("47")])]),t._v(" "),v("tr",[v("td",[t._v("W")]),t._v(" "),v("td",[t._v("17")])]),t._v(" "),v("tr",[v("td",[t._v("X")]),t._v(" "),v("td",[t._v("45")])]),t._v(" "),v("tr",[v("td",[t._v("Y")]),t._v(" "),v("td",[t._v("21")])]),t._v(" "),v("tr",[v("td",[t._v("Z")]),t._v(" "),v("td",[t._v("44")])]),t._v(" "),v("tr",[v("td",[t._v("0")]),t._v(" "),v("td",[t._v("11")])]),t._v(" "),v("tr",[v("td",[t._v("1")]),t._v(" "),v("td",[t._v("2")])]),t._v(" "),v("tr",[v("td",[t._v("2")]),t._v(" "),v("td",[t._v("3")])]),t._v(" "),v("tr",[v("td",[t._v("3")]),t._v(" "),v("td",[t._v("4")])]),t._v(" "),v("tr",[v("td",[t._v("4")]),t._v(" "),v("td",[t._v("5")])]),t._v(" "),v("tr",[v("td",[t._v("5")]),t._v(" "),v("td",[t._v("6")])]),t._v(" "),v("tr",[v("td",[t._v("6")]),t._v(" "),v("td",[t._v("7")])]),t._v(" "),v("tr",[v("td",[t._v("7")]),t._v(" "),v("td",[t._v("8")])]),t._v(" "),v("tr",[v("td",[t._v("8")]),t._v(" "),v("td",[t._v("9")])]),t._v(" "),v("tr",[v("td",[t._v("9")]),t._v(" "),v("td",[t._v("10")])]),t._v(" "),v("tr",[v("td",[t._v("F1")]),t._v(" "),v("td",[t._v("59")])]),t._v(" "),v("tr",[v("td",[t._v("F2")]),t._v(" "),v("td",[t._v("60")])]),t._v(" "),v("tr",[v("td",[t._v("F3")]),t._v(" "),v("td",[t._v("61")])]),t._v(" "),v("tr",[v("td",[t._v("F4")]),t._v(" "),v("td",[t._v("62")])]),t._v(" "),v("tr",[v("td",[t._v("F5")]),t._v(" "),v("td",[t._v("63")])]),t._v(" "),v("tr",[v("td",[t._v("F6")]),t._v(" "),v("td",[t._v("64")])]),t._v(" "),v("tr",[v("td",[t._v("F7")]),t._v(" "),v("td",[t._v("65")])]),t._v(" "),v("tr",[v("td",[t._v("F8")]),t._v(" "),v("td",[t._v("66")])]),t._v(" "),v("tr",[v("td",[t._v("F9")]),t._v(" "),v("td",[t._v("67")])]),t._v(" "),v("tr",[v("td",[t._v("F10")]),t._v(" "),v("td",[t._v("68")])]),t._v(" "),v("tr",[v("td",[t._v("F11")]),t._v(" "),v("td",[t._v("87")])]),t._v(" "),v("tr",[v("td",[t._v("F12")]),t._v(" "),v("td",[t._v("88")])]),t._v(" "),v("tr",[v("td",[t._v("F13")]),t._v(" "),v("td",[t._v("91")])]),t._v(" "),v("tr",[v("td",[t._v("F14")]),t._v(" "),v("td",[t._v("92")])]),t._v(" "),v("tr",[v("td",[t._v("F15")]),t._v(" "),v("td",[t._v("93")])]),t._v(" "),v("tr",[v("td",[t._v("F16")]),t._v(" "),v("td",[t._v("99")])]),t._v(" "),v("tr",[v("td",[t._v("F17")]),t._v(" "),v("td",[t._v("100")])]),t._v(" "),v("tr",[v("td",[t._v("F18")]),t._v(" "),v("td",[t._v("101")])]),t._v(" "),v("tr",[v("td",[t._v("F19")]),t._v(" "),v("td",[t._v("102")])]),t._v(" "),v("tr",[v("td",[t._v("F20")]),t._v(" "),v("td",[t._v("103")])]),t._v(" "),v("tr",[v("td",[t._v("F21")]),t._v(" "),v("td",[t._v("104")])]),t._v(" "),v("tr",[v("td",[t._v("F22")]),t._v(" "),v("td",[t._v("105")])]),t._v(" "),v("tr",[v("td",[t._v("F23")]),t._v(" "),v("td",[t._v("106")])]),t._v(" "),v("tr",[v("td",[t._v("F24")]),t._v(" "),v("td",[t._v("107")])]),t._v(" "),v("tr",[v("td",[t._v("ESC")]),t._v(" "),v("td",[t._v("1")])]),t._v(" "),v("tr",[v("td",[t._v("-")]),t._v(" "),v("td",[t._v("12")])]),t._v(" "),v("tr",[v("td",[t._v("=/+")]),t._v(" "),v("td",[t._v("13")])]),t._v(" "),v("tr",[v("td",[t._v("Backspace")]),t._v(" "),v("td",[t._v("14")])]),t._v(" "),v("tr",[v("td",[t._v("Tab")]),t._v(" "),v("td",[t._v("15")])]),t._v(" "),v("tr",[v("td",[t._v("Caps Lock")]),t._v(" "),v("td",[t._v("58")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Up")]),t._v(" "),v("td",[t._v("57416")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Left")]),t._v(" "),v("td",[t._v("57419")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Right")]),t._v(" "),v("td",[t._v("57421")])]),t._v(" "),v("tr",[v("td",[t._v("Cursor Down")]),t._v(" "),v("td",[t._v("57424")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 0")]),t._v(" "),v("td",[t._v("82")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 1")]),t._v(" "),v("td",[t._v("79")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 2")]),t._v(" "),v("td",[t._v("80")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 3")]),t._v(" "),v("td",[t._v("81")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 4")]),t._v(" "),v("td",[t._v("75")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 5")]),t._v(" "),v("td",[t._v("76")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 6")]),t._v(" "),v("td",[t._v("77")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 7")]),t._v(" "),v("td",[t._v("71")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 8")]),t._v(" "),v("td",[t._v("72")])]),t._v(" "),v("tr",[v("td",[t._v("NumPad 9")]),t._v(" "),v("td",[t._v("73")])]),t._v(" "),v("tr",[v("td",[t._v("Ctrl left")]),t._v(" "),v("td",[t._v("29")])]),t._v(" "),v("tr",[v("td",[t._v("Ctrl right")]),t._v(" "),v("td",[t._v("3613")])]),t._v(" "),v("tr",[v("td",[t._v("Alt left")]),t._v(" "),v("td",[t._v("56")])]),t._v(" "),v("tr",[v("td",[t._v("Alt right")]),t._v(" "),v("td",[t._v("3640")])]),t._v(" "),v("tr",[v("td",[t._v("Context Menu")]),t._v(" "),v("td",[t._v("3677")])]),t._v(" "),v("tr",[v("td",[t._v("Windows Key")]),t._v(" "),v("td",[t._v("3675 or 3676")])]),t._v(" "),v("tr",[v("td",[t._v("SPACE")]),t._v(" "),v("td",[t._v("57")])]),t._v(" "),v("tr",[v("td",[t._v("Print Screen")]),t._v(" "),v("td",[t._v("3639")])]),t._v(" "),v("tr",[v("td",[t._v("Scroll Lock")]),t._v(" "),v("td",[t._v("70")])]),t._v(" "),v("tr",[v("td",[t._v("Pause")]),t._v(" "),v("td",[t._v("3653")])]),t._v(" "),v("tr",[v("td",[t._v("Enter")]),t._v(" "),v("td",[t._v("28")])]),t._v(" "),v("tr",[v("td",[t._v("Page Up")]),t._v(" "),v("td",[t._v("3657")])]),t._v(" "),v("tr",[v("td",[t._v("Page Down")]),t._v(" "),v("td",[t._v("3665")])]),t._v(" "),v("tr",[v("td",[t._v(",")]),t._v(" "),v("td",[t._v("51")])]),t._v(" "),v("tr",[v("td",[t._v(".")]),t._v(" "),v("td",[t._v("52")])])])]),t._v(" "),v("p",[v("a",{attrs:{href:"https://github.com/kwhat/jnativehook/blob/master/src/java/org/jnativehook/keyboard/NativeKeyEvent.java",title:"Opens external link in new window",target:"_blank",rel:"noopener noreferrer"}},[t._v("Click here"),v("OutboundLink")],1),t._v(" to view a full list of keycodes.")]),t._v(" "),v("h2",{attrs:{id:"input-port-description"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("keyCode [integer]:")]),t._v(" The keycode of the key which should be captured. For a list of the mapping between keycodes and keys see the graphics above.")])]),t._v(" "),v("h2",{attrs:{id:"event-trigger-description"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("keyPressed:")]),t._v(" This event port fires an event if the key with the specified keyCode was pressed.")]),t._v(" "),v("li",[v("strong",[t._v("keyReleased:")]),t._v(" This event port fires an event if the key with the specified keyCode was released.")])]),t._v(" "),v("h2",{attrs:{id:"event-listener-description"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("enable:")]),t._v(" The keystate is captured and events get fired")]),t._v(" "),v("li",[v("strong",[t._v("disable:")]),t._v(" The plugin does not fire any event.")]),t._v(" "),v("li",[v("strong",[t._v("block:")]),t._v(" After this event, the keystroke of the key with the specified keyCode is not forwarded to the operating system.")]),t._v(" "),v("li",[v("strong",[t._v("unblock:")]),t._v(" After this event, the keystroke of the key with the specified keyCode is forwarded to the operating system.")])]),t._v(" "),v("h2",{attrs:{id:"properties"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),v("ul",[v("li",[v("strong",[t._v("block [boolean]:")]),t._v(" If this property is set to true, no key press activities will be routed to the operating system")]),t._v(" "),v("li",[v("strong",[t._v("keyCode[integer]:")]),t._v(" The keycode of the key which should be captured. For a list of the mapping between keycodes and keys see the graphics above.")])])])}),[],!1,null,null,null);v.default=r.exports},809:function(t,v,_){t.exports=_.p+"assets/img/keycapture.23ab76be.jpg"}}]); \ No newline at end of file diff --git a/assets/js/261.3daa9f49.js b/assets/js/261.de69b0f8.js similarity index 98% rename from assets/js/261.3daa9f49.js rename to assets/js/261.de69b0f8.js index d783aaded2..cccc6cae33 100644 --- a/assets/js/261.3daa9f49.js +++ b/assets/js/261.de69b0f8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[261],{1239:function(e,t,s){"use strict";s.r(t);var r=s(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),e._v(" "),t("p",[e._v("This component provides access to keystrokes input via a standard keyboard. The keystroke capture does not depend on a particular window or text field to have the input focus. The keycodes of the pressed keys and accumulated words (multiple keys separated by ) are provided at the output ports of this component. Possible applications include triggering functions by keyboard input, interfacing to speech recognition software or remapping keys to other keycodes.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(810),alt:"Screenshot: KeyboardCapture plugin",title:"Screenshot: KeyboardCapture plugin"}})]),e._v(" "),t("p",[e._v("KeyboardCapture plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A keyboard which generates keystrokes or a software component which injects keystrokes into the operating system message queue.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keyCode [integer]:")]),e._v(" This port sends the virtual keycode of the last pressed key as an integer value.")]),e._v(" "),t("li",[t("strong",[e._v("words [string]:")]),e._v(" This ports accumulates keystrokes and sends them as a string as soon as a blank separator (space key) appears in the key input stream.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("recognizedCommand1 - recognizedCommand10:")]),e._v(" These event ports fire an event if one of seven command strings has been detected in the current input stream of keys.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("blockEvents [boolean]:")]),e._v(" If this property is set to true, no key press activities will be routed to the operating system - they will not be processed by other applications and disappear. If the property value is set to false, keystrokes will be passed back to the operating system and processed as usual.")]),e._v(" "),t("li",[t("strong",[e._v("command1 [string] - command10 [string]:")]),e._v(" Seven string properties to specify command strings. The component looks for these command strings in the input stream of keystrokes. If a command string matches, the corresponding event trigger port is raised. This can be useful for example to define voice commands which should trigger certain actions in other ARE plugins.")])])])}),[],!1,null,null,null);t.default=o.exports},810:function(e,t,s){e.exports=s.p+"assets/img/keyboardcapture.483dae78.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[261],{1240:function(e,t,s){"use strict";s.r(t);var r=s(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),e._v(" "),t("p",[e._v("This component provides access to keystrokes input via a standard keyboard. The keystroke capture does not depend on a particular window or text field to have the input focus. The keycodes of the pressed keys and accumulated words (multiple keys separated by ) are provided at the output ports of this component. Possible applications include triggering functions by keyboard input, interfacing to speech recognition software or remapping keys to other keycodes.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(810),alt:"Screenshot: KeyboardCapture plugin",title:"Screenshot: KeyboardCapture plugin"}})]),e._v(" "),t("p",[e._v("KeyboardCapture plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A keyboard which generates keystrokes or a software component which injects keystrokes into the operating system message queue.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keyCode [integer]:")]),e._v(" This port sends the virtual keycode of the last pressed key as an integer value.")]),e._v(" "),t("li",[t("strong",[e._v("words [string]:")]),e._v(" This ports accumulates keystrokes and sends them as a string as soon as a blank separator (space key) appears in the key input stream.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("recognizedCommand1 - recognizedCommand10:")]),e._v(" These event ports fire an event if one of seven command strings has been detected in the current input stream of keys.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("blockEvents [boolean]:")]),e._v(" If this property is set to true, no key press activities will be routed to the operating system - they will not be processed by other applications and disappear. If the property value is set to false, keystrokes will be passed back to the operating system and processed as usual.")]),e._v(" "),t("li",[t("strong",[e._v("command1 [string] - command10 [string]:")]),e._v(" Seven string properties to specify command strings. The component looks for these command strings in the input stream of keystrokes. If a command string matches, the corresponding event trigger port is raised. This can be useful for example to define voice commands which should trigger certain actions in other ARE plugins.")])])])}),[],!1,null,null,null);t.default=o.exports},810:function(e,t,s){e.exports=s.p+"assets/img/keyboardcapture.483dae78.jpg"}}]); \ No newline at end of file diff --git a/assets/js/262.5d2767ec.js b/assets/js/262.96562ab5.js similarity index 95% rename from assets/js/262.5d2767ec.js rename to assets/js/262.96562ab5.js index 153474ca51..892156e460 100644 --- a/assets/js/262.5d2767ec.js +++ b/assets/js/262.96562ab5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[262],{1238:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"kinect"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kinect"}},[e._v("#")]),e._v(" Kinect")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Visions)")]),e._v(" "),t("p",[e._v("The Kinect component interfaces to the Microsoft Kinect camera over the OpenNI library. It provides the skeleton Data of exactly one person in front of the kinect camera.")]),e._v(" "),t("p",[e._v("For the installation of the OpenNI framework and the drivers see for example "),t("a",{attrs:{href:"http://studentguru.gr/b/vangos/archive/2011/01/20/how-to-successfully-install-kinect-windows-openni-nite.aspx",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:o(809),alt:"Screenshot: Kinect plugin",title:"Screenshot: Kinect plugin"}})]),e._v(" "),t("p",[e._v("Kinect plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A Microsoft Kinect must be connected to the system.")]),e._v(" "),t("li",[e._v("The installed drivers must be compatible to the framework. e.g. The SensorKinect drivers work perfectly.")]),e._v(" "),t("li",[e._v("The OpenNI Framework must be installed.")]),e._v(" "),t("li",[e._v("The Nite Middleware must be installed")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("p",[e._v("The range of the coordinates is 0 - 640 for the x coordinates and 0 - 480 for the y coordinates if centerZeroPoint is set false and -320 - 320 for the x coordinate and -240 - 240 for the y coordinate when set to true.")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("HeadX [double]:")]),e._v(" The X position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadY [double]:")]),e._v(" The Y position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadZ [double]:")]),e._v(" The Z position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("leftHandX [double]:")]),e._v(" The X position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("leftHandY [double]:")]),e._v(" The Y position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("leftHandZ [double]:")]),e._v(" The Z position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightHandX [double]:")]),e._v(" The X position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightHandY [double]:")]),e._v(" The Y position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightHandZ [double]:")]),e._v(" The Z position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightFootX [double]:")]),e._v(" The X position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("rightFootY [double]:")]),e._v(" The Y position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("rightFootZ [double]:")]),e._v(" The Z position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("leftFootX [double]:")]),e._v(" The X position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("leftFootY [double]:")]),e._v(" The Y position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("leftFootZ [double]:")]),e._v(" The Z position of the left Foot")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("visualize [boolean]:")]),e._v(" When set to true a windows is displayed which shows the tracked skeleton. While the window is simply grey, no skeleton has been found yet.")]),e._v(" "),t("li",[t("strong",[e._v("centerZeroPoint [boolean]:")]),e._v(" Specifies wether the 0,0 point is at the top left corner (centerZeroPoint=false) or in the middle of the frame (centerZeroPoint=true)")])])])}),[],!1,null,null,null);t.default=n.exports},809:function(e,t,o){e.exports=o.p+"assets/img/kinect.b78672d6.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[262],{1241:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"kinect"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kinect"}},[e._v("#")]),e._v(" Kinect")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Visions)")]),e._v(" "),t("p",[e._v("The Kinect component interfaces to the Microsoft Kinect camera over the OpenNI library. It provides the skeleton Data of exactly one person in front of the kinect camera.")]),e._v(" "),t("p",[e._v("For the installation of the OpenNI framework and the drivers see for example "),t("a",{attrs:{href:"http://studentguru.gr/b/vangos/archive/2011/01/20/how-to-successfully-install-kinect-windows-openni-nite.aspx",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:o(811),alt:"Screenshot: Kinect plugin",title:"Screenshot: Kinect plugin"}})]),e._v(" "),t("p",[e._v("Kinect plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A Microsoft Kinect must be connected to the system.")]),e._v(" "),t("li",[e._v("The installed drivers must be compatible to the framework. e.g. The SensorKinect drivers work perfectly.")]),e._v(" "),t("li",[e._v("The OpenNI Framework must be installed.")]),e._v(" "),t("li",[e._v("The Nite Middleware must be installed")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("p",[e._v("The range of the coordinates is 0 - 640 for the x coordinates and 0 - 480 for the y coordinates if centerZeroPoint is set false and -320 - 320 for the x coordinate and -240 - 240 for the y coordinate when set to true.")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("HeadX [double]:")]),e._v(" The X position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadY [double]:")]),e._v(" The Y position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadZ [double]:")]),e._v(" The Z position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("leftHandX [double]:")]),e._v(" The X position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("leftHandY [double]:")]),e._v(" The Y position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("leftHandZ [double]:")]),e._v(" The Z position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightHandX [double]:")]),e._v(" The X position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightHandY [double]:")]),e._v(" The Y position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightHandZ [double]:")]),e._v(" The Z position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("rightFootX [double]:")]),e._v(" The X position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("rightFootY [double]:")]),e._v(" The Y position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("rightFootZ [double]:")]),e._v(" The Z position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("leftFootX [double]:")]),e._v(" The X position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("leftFootY [double]:")]),e._v(" The Y position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("leftFootZ [double]:")]),e._v(" The Z position of the left Foot")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("visualize [boolean]:")]),e._v(" When set to true a windows is displayed which shows the tracked skeleton. While the window is simply grey, no skeleton has been found yet.")]),e._v(" "),t("li",[t("strong",[e._v("centerZeroPoint [boolean]:")]),e._v(" Specifies wether the 0,0 point is at the top left corner (centerZeroPoint=false) or in the middle of the frame (centerZeroPoint=true)")])])])}),[],!1,null,null,null);t.default=n.exports},811:function(e,t,o){e.exports=o.p+"assets/img/kinect.b78672d6.jpg"}}]); \ No newline at end of file diff --git a/assets/js/263.7bf898d1.js b/assets/js/263.c8dd13d1.js similarity index 97% rename from assets/js/263.7bf898d1.js rename to assets/js/263.c8dd13d1.js index cc3bda8a34..2b2f98890b 100644 --- a/assets/js/263.7bf898d1.js +++ b/assets/js/263.c8dd13d1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[263],{1240:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"kinectj4k"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kinectj4k"}},[e._v("#")]),e._v(" KinectJ4K")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Visions)")]),e._v(" "),t("p",[e._v("The Kinect component interfaces to the Microsoft Kinect v1 camera over the "),t("a",{attrs:{href:"http://research.dwi.ufl.edu/ufdw/j4k/J4KSDK.php",target:"_blank",rel:"noopener noreferrer"}},[e._v("J4K library"),t("OutboundLink")],1),e._v(". It provides the skeleton data of exactly one person in front of the kinect v1 camera.")]),e._v(" "),t("p",[e._v("For the installation the SDK from Microsoft is needed. The plugin was tested with the SDK-Version 1.5 (see "),t("a",{attrs:{href:"http://www.microsoft.com/en-us/download/details.aspx?id=29866",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(").")]),e._v(" "),t("p",[t("img",{attrs:{src:o(811),alt:"Screenshot: KinectJ4K plugin",title:"Screenshot: KinectJ4K plugin"}})]),e._v(" "),t("p",[e._v("KinectJ4K plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A Microsoft Kinect v1 must be connected to the system.")]),e._v(" "),t("li",[e._v("The drivers from Microsoft (usually installed with the SDK) are required.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("p",[e._v("You can find more information about the Coordinate Spaces "),t("a",{attrs:{href:"http://www.microsoft.com/en-us/download/details.aspx?id=29866",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("FootLeftX [double]:")]),e._v(" The X position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootLeftY [double]:")]),e._v(" The Y position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootLeftZ [double]:")]),e._v(" The Z position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootRightX [double]:")]),e._v(" The X position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootRightY [double]:")]),e._v(" The Y position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootRightZ [double]:")]),e._v(" The Z position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("AnkleLeftX [double]:")]),e._v(" The X position of the left Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleLeftY [double]:")]),e._v(" The Y position of the left Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleLeftZ [double]:")]),e._v(" The Z position of the left Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleRightX [double]:")]),e._v(" The X position of the right Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleRightY [double]:")]),e._v(" The Y position of the right Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleRightZ [double]:")]),e._v(" The Z position of the right Ankle")]),e._v(" "),t("li",[t("strong",[e._v("KneeLeftX [double]:")]),e._v(" The X position of the left Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeLeftY [double]:")]),e._v(" The Y position of the left Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeLeftZ [double]:")]),e._v(" The Z position of the left Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeRightX [double]:")]),e._v(" The X position of the right Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeRightY [double]:")]),e._v(" The Y position of the right Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeRightZ [double]:")]),e._v(" The Z position of the right Knee")]),e._v(" "),t("li",[t("strong",[e._v("HipLeftX [double]:")]),e._v(" The X position of the left side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipLeftY [double]:")]),e._v(" The Y position of the left side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipLeftZ [double]:")]),e._v(" The Z position of the left side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipCenterX [double]:")]),e._v(" The X position of the center of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipCenterY [double]:")]),e._v(" The Y position of the center of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipCenterZ [double]:")]),e._v(" The Z position of the center of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipRightX [double]:")]),e._v(" The X position of the right side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipRightY [double]:")]),e._v(" The Y position of the right side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipRightZ [double]:")]),e._v(" The Z position of the right side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("SpineX [double]:")]),e._v(" The X position of the Spine")]),e._v(" "),t("li",[t("strong",[e._v("SpineY [double]:")]),e._v(" The Y position of the Spine")]),e._v(" "),t("li",[t("strong",[e._v("SpineZ [double]:")]),e._v(" The Z position of the Spine")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderLeftX [double]:")]),e._v(" The X position of the left Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderLeftY [double]:")]),e._v(" The Y position of the left Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderLeftZ [double]:")]),e._v(" The Z position of the left Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderCenterX [double]:")]),e._v(" The X position of the area between the Shoulders")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderCenterY [double]:")]),e._v(" The Y position of the area between the Shoulders")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderCenterZ [double]:")]),e._v(" The Z position of the area between the Shoulders")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderRightX [double]:")]),e._v(" The X position of the right Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderRightY [double]:")]),e._v(" The Y position of the right Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderRightZ [double]:")]),e._v(" The Z position of the right Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ElbowLeftX [double]:")]),e._v(" The X position of the left Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowLeftY [double]:")]),e._v(" The Y position of the left Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowLeftZ [double]:")]),e._v(" The Z position of the left Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowRightX [double]:")]),e._v(" The X position of the right Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowRightY [double]:")]),e._v(" The Y position of the right Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowRightZ [double]:")]),e._v(" The Z position of the right Elbow")]),e._v(" "),t("li",[t("strong",[e._v("WristLeftX [double]:")]),e._v(" The X position of the left Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristLeftY [double]:")]),e._v(" The Y position of the left Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristLeftZ [double]:")]),e._v(" The Z position of the left Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristRightX [double]:")]),e._v(" The X position of the right Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristRightY [double]:")]),e._v(" The Y position of the right Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristRightZ [double]:")]),e._v(" The Z position of the right Wrist")]),e._v(" "),t("li",[t("strong",[e._v("HandLeftX [double]:")]),e._v(" The X position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandLeftY [double]:")]),e._v(" The Y position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandLeftZ [double]:")]),e._v(" The Z position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandRightX [double]:")]),e._v(" The X position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandRightY [double]:")]),e._v(" The Y position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandRightZ [double]:")]),e._v(" The Z position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("HeadX [double]:")]),e._v(" The X position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadY [double]:")]),e._v(" The Y position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadZ [double]:")]),e._v(" The Z position of the Head")])])])}),[],!1,null,null,null);t.default=n.exports},811:function(e,t,o){e.exports=o.p+"assets/img/kinectj4k.519d9582.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[263],{1242:function(e,t,o){"use strict";o.r(t);var i=o(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"kinectj4k"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kinectj4k"}},[e._v("#")]),e._v(" KinectJ4K")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Visions)")]),e._v(" "),t("p",[e._v("The Kinect component interfaces to the Microsoft Kinect v1 camera over the "),t("a",{attrs:{href:"http://research.dwi.ufl.edu/ufdw/j4k/J4KSDK.php",target:"_blank",rel:"noopener noreferrer"}},[e._v("J4K library"),t("OutboundLink")],1),e._v(". It provides the skeleton data of exactly one person in front of the kinect v1 camera.")]),e._v(" "),t("p",[e._v("For the installation the SDK from Microsoft is needed. The plugin was tested with the SDK-Version 1.5 (see "),t("a",{attrs:{href:"http://www.microsoft.com/en-us/download/details.aspx?id=29866",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(").")]),e._v(" "),t("p",[t("img",{attrs:{src:o(812),alt:"Screenshot: KinectJ4K plugin",title:"Screenshot: KinectJ4K plugin"}})]),e._v(" "),t("p",[e._v("KinectJ4K plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A Microsoft Kinect v1 must be connected to the system.")]),e._v(" "),t("li",[e._v("The drivers from Microsoft (usually installed with the SDK) are required.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("p",[e._v("You can find more information about the Coordinate Spaces "),t("a",{attrs:{href:"http://www.microsoft.com/en-us/download/details.aspx?id=29866",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("FootLeftX [double]:")]),e._v(" The X position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootLeftY [double]:")]),e._v(" The Y position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootLeftZ [double]:")]),e._v(" The Z position of the left Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootRightX [double]:")]),e._v(" The X position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootRightY [double]:")]),e._v(" The Y position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("FootRightZ [double]:")]),e._v(" The Z position of the right Foot")]),e._v(" "),t("li",[t("strong",[e._v("AnkleLeftX [double]:")]),e._v(" The X position of the left Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleLeftY [double]:")]),e._v(" The Y position of the left Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleLeftZ [double]:")]),e._v(" The Z position of the left Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleRightX [double]:")]),e._v(" The X position of the right Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleRightY [double]:")]),e._v(" The Y position of the right Ankle")]),e._v(" "),t("li",[t("strong",[e._v("AnkleRightZ [double]:")]),e._v(" The Z position of the right Ankle")]),e._v(" "),t("li",[t("strong",[e._v("KneeLeftX [double]:")]),e._v(" The X position of the left Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeLeftY [double]:")]),e._v(" The Y position of the left Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeLeftZ [double]:")]),e._v(" The Z position of the left Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeRightX [double]:")]),e._v(" The X position of the right Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeRightY [double]:")]),e._v(" The Y position of the right Knee")]),e._v(" "),t("li",[t("strong",[e._v("KneeRightZ [double]:")]),e._v(" The Z position of the right Knee")]),e._v(" "),t("li",[t("strong",[e._v("HipLeftX [double]:")]),e._v(" The X position of the left side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipLeftY [double]:")]),e._v(" The Y position of the left side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipLeftZ [double]:")]),e._v(" The Z position of the left side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipCenterX [double]:")]),e._v(" The X position of the center of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipCenterY [double]:")]),e._v(" The Y position of the center of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipCenterZ [double]:")]),e._v(" The Z position of the center of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipRightX [double]:")]),e._v(" The X position of the right side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipRightY [double]:")]),e._v(" The Y position of the right side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("HipRightZ [double]:")]),e._v(" The Z position of the right side of the Hip")]),e._v(" "),t("li",[t("strong",[e._v("SpineX [double]:")]),e._v(" The X position of the Spine")]),e._v(" "),t("li",[t("strong",[e._v("SpineY [double]:")]),e._v(" The Y position of the Spine")]),e._v(" "),t("li",[t("strong",[e._v("SpineZ [double]:")]),e._v(" The Z position of the Spine")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderLeftX [double]:")]),e._v(" The X position of the left Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderLeftY [double]:")]),e._v(" The Y position of the left Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderLeftZ [double]:")]),e._v(" The Z position of the left Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderCenterX [double]:")]),e._v(" The X position of the area between the Shoulders")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderCenterY [double]:")]),e._v(" The Y position of the area between the Shoulders")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderCenterZ [double]:")]),e._v(" The Z position of the area between the Shoulders")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderRightX [double]:")]),e._v(" The X position of the right Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderRightY [double]:")]),e._v(" The Y position of the right Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ShoulderRightZ [double]:")]),e._v(" The Z position of the right Shoulder")]),e._v(" "),t("li",[t("strong",[e._v("ElbowLeftX [double]:")]),e._v(" The X position of the left Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowLeftY [double]:")]),e._v(" The Y position of the left Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowLeftZ [double]:")]),e._v(" The Z position of the left Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowRightX [double]:")]),e._v(" The X position of the right Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowRightY [double]:")]),e._v(" The Y position of the right Elbow")]),e._v(" "),t("li",[t("strong",[e._v("ElbowRightZ [double]:")]),e._v(" The Z position of the right Elbow")]),e._v(" "),t("li",[t("strong",[e._v("WristLeftX [double]:")]),e._v(" The X position of the left Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristLeftY [double]:")]),e._v(" The Y position of the left Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristLeftZ [double]:")]),e._v(" The Z position of the left Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristRightX [double]:")]),e._v(" The X position of the right Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristRightY [double]:")]),e._v(" The Y position of the right Wrist")]),e._v(" "),t("li",[t("strong",[e._v("WristRightZ [double]:")]),e._v(" The Z position of the right Wrist")]),e._v(" "),t("li",[t("strong",[e._v("HandLeftX [double]:")]),e._v(" The X position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandLeftY [double]:")]),e._v(" The Y position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandLeftZ [double]:")]),e._v(" The Z position of the left Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandRightX [double]:")]),e._v(" The X position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandRightY [double]:")]),e._v(" The Y position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("HandRightZ [double]:")]),e._v(" The Z position of the right Hand")]),e._v(" "),t("li",[t("strong",[e._v("HeadX [double]:")]),e._v(" The X position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadY [double]:")]),e._v(" The Y position of the Head")]),e._v(" "),t("li",[t("strong",[e._v("HeadZ [double]:")]),e._v(" The Z position of the Head")])])])}),[],!1,null,null,null);t.default=n.exports},812:function(e,t,o){e.exports=o.p+"assets/img/kinectj4k.519d9582.png"}}]); \ No newline at end of file diff --git a/assets/js/264.49cfa089.js b/assets/js/264.20773c9f.js similarity index 95% rename from assets/js/264.49cfa089.js rename to assets/js/264.20773c9f.js index e50922b9a7..cd9e64fc06 100644 --- a/assets/js/264.49cfa089.js +++ b/assets/js/264.20773c9f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[264],{1243:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"lightscore"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#lightscore"}},[t._v("#")]),t._v(" Lightscore")]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),t._v(" "),e("p",[t._v("The Lightscore plugin provides the data output of the 9DOF IMU and RGB-color sensor "),e("a",{attrs:{href:"https://allesoderlicht.com/Archive/projects/lightscores",target:"_blank",rel:"noopener noreferrer"}},[t._v("lightscores"),e("OutboundLink")],1),t._v(". Additionally to the raw data, calculated euler values of the orentation (picht, yaw, roll) are provided. Please note that this in an early version of the product and the installation process is thus a bit demanding …")]),t._v(" "),e("p",[e("img",{attrs:{src:r(816),alt:"Screenshot: Lightscore plugin",title:"Screenshot: Lightscore plugin"}})]),t._v(" "),e("p",[t._v("Lightscore plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This plugin requires a lightscroes BLE sensor module connected to the AsTeRICS platform, please contact "),e("a",{attrs:{href:"https://allesoderlicht.com/contact",target:"_blank",rel:"noopener noreferrer"}},[t._v("AllesOderLicht"),e("OutboundLink")],1),t._v(" for cooperation or details about the hardware.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("led1 [double]:")]),t._v(" light intensity for led1. [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("led2 [double]:")]),t._v(" light intensity for led2. [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("led3 [double]:")]),t._v(" light intensity for led3. [currently not used]")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("start:")]),t._v(" start data transfer [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("stop:")]),t._v(" stop data transfer [currently not used]")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("red [double]:")]),t._v(" Red light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("green [double]:")]),t._v(" Green light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("blue double]:")]),t._v(" Blue light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("white [double]:")]),t._v(" White / total light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("accX [double]:")]),t._v(" Acceleration X axis.")]),t._v(" "),e("li",[e("strong",[t._v("accY [double]:")]),t._v(" Acceleration Y axis.")]),t._v(" "),e("li",[e("strong",[t._v("accZ [double]:")]),t._v(" Acceleration Z axis.")]),t._v(" "),e("li",[e("strong",[t._v("magX [double]:")]),t._v(" Magnetometer X axis.")]),t._v(" "),e("li",[e("strong",[t._v("magY [double]:")]),t._v(" Magnetometer Y axis.")]),t._v(" "),e("li",[e("strong",[t._v("magZ [double]:")]),t._v(" Magnetometer Z axis.")]),t._v(" "),e("li",[e("strong",[t._v("gyrX [double]:")]),t._v(" Gyroscope X axis.")]),t._v(" "),e("li",[e("strong",[t._v("gyrY [double]:")]),t._v(" Gyroscope Y axis.")]),t._v(" "),e("li",[e("strong",[t._v("gyrZ [double]:")]),t._v(" Gyroscope Z axis.")]),t._v(" "),e("li",[e("strong",[t._v("yaw [double]:")]),t._v(" Yaw value in euler degrees.")]),t._v(" "),e("li",[e("strong",[t._v("pitch [double]:")]),t._v(" Pitch value in euler degrees.")]),t._v(" "),e("li",[e("strong",[t._v("roll [double]:")]),t._v(" Roll value in euler degrees.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("autostart [Boolean]:")]),t._v(" Start data transmission automatically after model start. [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("id [String]:")]),t._v(" ID number of the lichtscores sensor. [currently not used]")])])])}),[],!1,null,null,null);e.default=s.exports},816:function(t,e,r){t.exports=r.p+"assets/img/lightscore.c0b77e36.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[264],{1244:function(t,e,r){"use strict";r.r(e);var o=r(2),s=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"lightscore"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#lightscore"}},[t._v("#")]),t._v(" Lightscore")]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),t._v(" "),e("p",[t._v("The Lightscore plugin provides the data output of the 9DOF IMU and RGB-color sensor "),e("a",{attrs:{href:"https://allesoderlicht.com/Archive/projects/lightscores",target:"_blank",rel:"noopener noreferrer"}},[t._v("lightscores"),e("OutboundLink")],1),t._v(". Additionally to the raw data, calculated euler values of the orentation (picht, yaw, roll) are provided. Please note that this in an early version of the product and the installation process is thus a bit demanding …")]),t._v(" "),e("p",[e("img",{attrs:{src:r(815),alt:"Screenshot: Lightscore plugin",title:"Screenshot: Lightscore plugin"}})]),t._v(" "),e("p",[t._v("Lightscore plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This plugin requires a lightscroes BLE sensor module connected to the AsTeRICS platform, please contact "),e("a",{attrs:{href:"https://allesoderlicht.com/contact",target:"_blank",rel:"noopener noreferrer"}},[t._v("AllesOderLicht"),e("OutboundLink")],1),t._v(" for cooperation or details about the hardware.")]),t._v(" "),e("h2",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("led1 [double]:")]),t._v(" light intensity for led1. [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("led2 [double]:")]),t._v(" light intensity for led2. [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("led3 [double]:")]),t._v(" light intensity for led3. [currently not used]")])]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("start:")]),t._v(" start data transfer [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("stop:")]),t._v(" stop data transfer [currently not used]")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("red [double]:")]),t._v(" Red light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("green [double]:")]),t._v(" Green light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("blue double]:")]),t._v(" Blue light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("white [double]:")]),t._v(" White / total light intensity.")]),t._v(" "),e("li",[e("strong",[t._v("accX [double]:")]),t._v(" Acceleration X axis.")]),t._v(" "),e("li",[e("strong",[t._v("accY [double]:")]),t._v(" Acceleration Y axis.")]),t._v(" "),e("li",[e("strong",[t._v("accZ [double]:")]),t._v(" Acceleration Z axis.")]),t._v(" "),e("li",[e("strong",[t._v("magX [double]:")]),t._v(" Magnetometer X axis.")]),t._v(" "),e("li",[e("strong",[t._v("magY [double]:")]),t._v(" Magnetometer Y axis.")]),t._v(" "),e("li",[e("strong",[t._v("magZ [double]:")]),t._v(" Magnetometer Z axis.")]),t._v(" "),e("li",[e("strong",[t._v("gyrX [double]:")]),t._v(" Gyroscope X axis.")]),t._v(" "),e("li",[e("strong",[t._v("gyrY [double]:")]),t._v(" Gyroscope Y axis.")]),t._v(" "),e("li",[e("strong",[t._v("gyrZ [double]:")]),t._v(" Gyroscope Z axis.")]),t._v(" "),e("li",[e("strong",[t._v("yaw [double]:")]),t._v(" Yaw value in euler degrees.")]),t._v(" "),e("li",[e("strong",[t._v("pitch [double]:")]),t._v(" Pitch value in euler degrees.")]),t._v(" "),e("li",[e("strong",[t._v("roll [double]:")]),t._v(" Roll value in euler degrees.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("autostart [Boolean]:")]),t._v(" Start data transmission automatically after model start. [currently not used]")]),t._v(" "),e("li",[e("strong",[t._v("id [String]:")]),t._v(" ID number of the lichtscores sensor. [currently not used]")])])])}),[],!1,null,null,null);e.default=s.exports},815:function(t,e,r){t.exports=r.p+"assets/img/lightscore.c0b77e36.jpg"}}]); \ No newline at end of file diff --git a/assets/js/265.4b157215.js b/assets/js/265.62cad889.js similarity index 93% rename from assets/js/265.4b157215.js rename to assets/js/265.62cad889.js index 6c0bbecb74..06748dc370 100644 --- a/assets/js/265.4b157215.js +++ b/assets/js/265.62cad889.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[265],{1244:function(e,t,r){"use strict";r.r(t);var i=r(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"linereader"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linereader"}},[e._v("#")]),e._v(" LineReader")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This component reads lines from a text file and sends them to an output port. The line reading can be triggered by an incoming event.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(817),alt:"Screenshot: LineReader plugin",title:"Screenshot: LineReader plugin"}})]),e._v(" "),t("p",[e._v("ButtonGrid plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("skipLines (integer):")]),e._v(" When an integer number is received at this port, the component tries to skip this number of lines. The next line will be read from the resulting position.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("actLine (string):")]),e._v(" A line of text which has been read from the file (as line termination character, the “enter”-key (\\n) is used.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("readNextLine:")]),e._v(" When this event is triggered, the component tries to read one line of text from the file and sends it to the output port.")]),e._v(" "),t("li",[t("strong",[e._v("resetToFirstLine:")]),e._v(" When this event is triggered, the internal file pointer is reset ot the beginning of the file.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("endOfFile:")]),e._v(" This event is fired when no line can be read from the file (file end or other error occurred)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("fileName [string]:")]),e._v(" The full path and file name of the text file to read. The path can be given as absolute path or relative to the ARE executable’s directory")])])])}),[],!1,null,null,null);t.default=n.exports},817:function(e,t,r){e.exports=r.p+"assets/img/linereader.11a07801.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[265],{1245:function(e,t,r){"use strict";r.r(t);var i=r(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"linereader"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#linereader"}},[e._v("#")]),e._v(" LineReader")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: File System)")]),e._v(" "),t("p",[e._v("This component reads lines from a text file and sends them to an output port. The line reading can be triggered by an incoming event.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(816),alt:"Screenshot: LineReader plugin",title:"Screenshot: LineReader plugin"}})]),e._v(" "),t("p",[e._v("ButtonGrid plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("skipLines (integer):")]),e._v(" When an integer number is received at this port, the component tries to skip this number of lines. The next line will be read from the resulting position.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("actLine (string):")]),e._v(" A line of text which has been read from the file (as line termination character, the “enter”-key (\\n) is used.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("readNextLine:")]),e._v(" When this event is triggered, the component tries to read one line of text from the file and sends it to the output port.")]),e._v(" "),t("li",[t("strong",[e._v("resetToFirstLine:")]),e._v(" When this event is triggered, the internal file pointer is reset ot the beginning of the file.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("endOfFile:")]),e._v(" This event is fired when no line can be read from the file (file end or other error occurred)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("fileName [string]:")]),e._v(" The full path and file name of the text file to read. The path can be given as absolute path or relative to the ARE executable’s directory")])])])}),[],!1,null,null,null);t.default=n.exports},816:function(e,t,r){e.exports=r.p+"assets/img/linereader.11a07801.jpg"}}]); \ No newline at end of file diff --git a/assets/js/266.234b9c2e.js b/assets/js/266.afe8cf81.js similarity index 97% rename from assets/js/266.234b9c2e.js rename to assets/js/266.afe8cf81.js index bc476f12db..fb3bdee806 100644 --- a/assets/js/266.234b9c2e.js +++ b/assets/js/266.afe8cf81.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[266],{1249:function(e,t,s){"use strict";s.r(t);var i=s(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"lipmouseir"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#lipmouseir"}},[e._v("#")]),e._v(" LipmouseIR")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),e._v(" "),t("p",[e._v("This component provides signals from the Lipmouse module, which allows computer control via a mouthpiece. The user can create input signals with 3 degrees of freedom by interacting with the mouthpiece: left/right, up/down and sip/puff. The horizontal and vertical movements are measured via force sensors inside the lipmouse module. The sip/puff actions are measured via a pressure sensor. The lipmouse can be adjusted to very low force that it can be used by persons with severly reduced motor capabilites (e.g. late stage musculuar dystrophy or quadraplegia up to C1/C2 lesions). Additionally the Lipmouse has an infrared interface which enables it to control electronic devices."),t("br"),e._v("\nThrough a receiver it is possible to record commands from existing remote controls and store the codes to a database. When needed, the IR signal is reconstructed and transmitted to the device to be controlled.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(824),alt:"Screenshot: LipmouseIR plugin",title:"Screenshot: LipmouseIR plugin"}})]),e._v(" "),t("p",[e._v("The LipmouseIR sensor plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The LipmouseIR module must be connected to a USB port. Firmware for the lipmouseIR sensor can be found in the folder CIMs/Lipmouse_CIM. The free “teensy loader” tool can be used to update the firmware of the lipmouseIR module. Detailed design documentation will be provided in the future.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("DeviceType [string]:")]),e._v(" Type of the device to be controlled via IR (e.g.: TV)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceName [string]:")]),e._v(" Name of the device to be controlled via IR (e.g.: Sony, Samsung, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceFunction [string]:")]),e._v(" Name of function of the device (e.g.: On, Off, VolumeUp, etc.)")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("X [integer]:")]),e._v(" the force applied to the Lipmouse mouthpiece in x-direction")]),e._v(" "),t("li",[t("strong",[e._v("Y [integer]:")]),e._v(" the force applied to the Lipmouse mouthpiece in y-direction")]),e._v(" "),t("li",[t("strong",[e._v("pressure [integer]:")]),e._v(" the pressure value applied to the sip/puff - sensor")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("SendIRCode:")]),e._v(" Send an IR Code to the Lipmouse")]),e._v(" "),t("li",[t("strong",[e._v("RecordIRCode:")]),e._v(" Record an IR Code through the Lipmouse")]),e._v(" "),t("li",[t("strong",[e._v("calibration:")]),e._v(" if this event is received, the x/y force value is set to 0 (removing any drift of the sensor values)")]),e._v(" "),t("li",[t("strong",[e._v("setLed1:")]),e._v(" if this event is received, Led1 will be turned on")]),e._v(" "),t("li",[t("strong",[e._v("clearLed1:")]),e._v(" if this event is received, Led1 will be turned off")]),e._v(" "),t("li",[t("strong",[e._v("setLed2:")]),e._v(" if this event is received, Led2 will be turned on")]),e._v(" "),t("li",[t("strong",[e._v("clearLed2:")]),e._v(" if this event is received, Led2 will be turned off")]),e._v(" "),t("li",[t("strong",[e._v("setLed3:")]),e._v(" if this event is received, Led3 will be turned on")]),e._v(" "),t("li",[t("strong",[e._v("clearLed3:")]),e._v(" if this event is received, Led3 will be turned off")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("StartRecord:")]),e._v(" will be triggered when Lipmouse is recording")]),e._v(" "),t("li",[t("strong",[e._v("StopRecord:")]),e._v(" will be triggered when Lipmouse has finished recording")]),e._v(" "),t("li",[t("strong",[e._v("sip:")]),e._v(" will be triggered when pressure decreases under the selected sip treshold and increses back before the selected sipTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("longSip:")]),e._v(" will be triggered when pressure decreases under the selected sip treshold and increases back after the selected sipTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("sipStart:")]),e._v(" will be triggered at the moment when pressure decreases under the selected sip treshold")]),e._v(" "),t("li",[t("strong",[e._v("sipEnd:")]),e._v(" will be triggered at the moment when pressure increases above the selected sip treshold")]),e._v(" "),t("li",[t("strong",[e._v("puff:")]),e._v(" will be triggered when pressure increases above the selected puff treshold and decreases back before the selected puffTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("longPuff:")]),e._v(" will be triggered when pressure increases above the selected puff treshold and decreases back after the selected puffTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("puffStart:")]),e._v(" will be triggered at the moment when pressure increases above the selected puff treshold")]),e._v(" "),t("li",[t("strong",[e._v("puffEnd:")]),e._v(" will be triggered at the moment when pressure decreases under the selected puff treshold")]),e._v(" "),t("li",[t("strong",[e._v("button1Pressed:")]),e._v(" will be triggered when button1 of the lipmouse is pressed")]),e._v(" "),t("li",[t("strong",[e._v("button1Released:")]),e._v(" will be triggered when button1 of the lipmouse is released")]),e._v(" "),t("li",[t("strong",[e._v("button2Pressed:")]),e._v(" will be triggered when button2 of the lipmouse is pressed")]),e._v(" "),t("li",[t("strong",[e._v("button2Released:")]),e._v(" will be triggered when button2 of the lipmouse is released")]),e._v(" "),t("li",[t("strong",[e._v("button3Pressed:")]),e._v(" will be triggered when button3 of the lipmouse is pressed")]),e._v(" "),t("li",[t("strong",[e._v("button3Released:")]),e._v(" will be triggered when button3 of the lipmouse is released")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("uniqueID [integer]:")]),e._v(" a unique identifier, useful if more then one lipmouse modules are used (dynamic property).")]),e._v(" "),t("li",[t("strong",[e._v("periodicADCUpdate [integer]:")]),e._v(" the update rate for force and pressure values in milliseconds.")]),e._v(" "),t("li",[t("strong",[e._v("sipThreshold [integer]:")]),e._v(" threshold value for sip actions.")]),e._v(" "),t("li",[t("strong",[e._v("sipTime [integer]:")]),e._v(" threshold time for sip/longSip events.")]),e._v(" "),t("li",[t("strong",[e._v("puffThreshold [integer]:")]),e._v(" threshold value for puff actions.")]),e._v(" "),t("li",[t("strong",[e._v("puffTime [integer]:")]),e._v(" threshold time for puff/longPuff events.")]),e._v(" "),t("li",[t("strong",[e._v("IRCodeFilePath [string]:")]),e._v(" Filepath to the file, where the IR Codes are stored.")])]),e._v(" "),t("h2",{attrs:{id:"ir-code-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ir-code-database"}},[e._v("#")]),e._v(" IR Code Database")]),e._v(" "),t("p",[e._v("The database which contains the IR codes as well as the information about the type and name of the device and the specific function is a comma separated value file. The first value is the type, the second one is the name and the third one is the function. The following 512 values are the IR code. This database is automatically generated and maintained if new IR codes are recorded with the Lipmouse with IR functions.")])])}),[],!1,null,null,null);t.default=r.exports},824:function(e,t,s){e.exports=s.p+"assets/img/lipmouseir.135b0f05.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[266],{1248:function(e,t,s){"use strict";s.r(t);var i=s(2),r=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"lipmouseir"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#lipmouseir"}},[e._v("#")]),e._v(" LipmouseIR")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Sensor Modules)")]),e._v(" "),t("p",[e._v("This component provides signals from the Lipmouse module, which allows computer control via a mouthpiece. The user can create input signals with 3 degrees of freedom by interacting with the mouthpiece: left/right, up/down and sip/puff. The horizontal and vertical movements are measured via force sensors inside the lipmouse module. The sip/puff actions are measured via a pressure sensor. The lipmouse can be adjusted to very low force that it can be used by persons with severly reduced motor capabilites (e.g. late stage musculuar dystrophy or quadraplegia up to C1/C2 lesions). Additionally the Lipmouse has an infrared interface which enables it to control electronic devices."),t("br"),e._v("\nThrough a receiver it is possible to record commands from existing remote controls and store the codes to a database. When needed, the IR signal is reconstructed and transmitted to the device to be controlled.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(820),alt:"Screenshot: LipmouseIR plugin",title:"Screenshot: LipmouseIR plugin"}})]),e._v(" "),t("p",[e._v("The LipmouseIR sensor plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("The LipmouseIR module must be connected to a USB port. Firmware for the lipmouseIR sensor can be found in the folder CIMs/Lipmouse_CIM. The free “teensy loader” tool can be used to update the firmware of the lipmouseIR module. Detailed design documentation will be provided in the future.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("DeviceType [string]:")]),e._v(" Type of the device to be controlled via IR (e.g.: TV)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceName [string]:")]),e._v(" Name of the device to be controlled via IR (e.g.: Sony, Samsung, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("DeviceFunction [string]:")]),e._v(" Name of function of the device (e.g.: On, Off, VolumeUp, etc.)")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("X [integer]:")]),e._v(" the force applied to the Lipmouse mouthpiece in x-direction")]),e._v(" "),t("li",[t("strong",[e._v("Y [integer]:")]),e._v(" the force applied to the Lipmouse mouthpiece in y-direction")]),e._v(" "),t("li",[t("strong",[e._v("pressure [integer]:")]),e._v(" the pressure value applied to the sip/puff - sensor")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("SendIRCode:")]),e._v(" Send an IR Code to the Lipmouse")]),e._v(" "),t("li",[t("strong",[e._v("RecordIRCode:")]),e._v(" Record an IR Code through the Lipmouse")]),e._v(" "),t("li",[t("strong",[e._v("calibration:")]),e._v(" if this event is received, the x/y force value is set to 0 (removing any drift of the sensor values)")]),e._v(" "),t("li",[t("strong",[e._v("setLed1:")]),e._v(" if this event is received, Led1 will be turned on")]),e._v(" "),t("li",[t("strong",[e._v("clearLed1:")]),e._v(" if this event is received, Led1 will be turned off")]),e._v(" "),t("li",[t("strong",[e._v("setLed2:")]),e._v(" if this event is received, Led2 will be turned on")]),e._v(" "),t("li",[t("strong",[e._v("clearLed2:")]),e._v(" if this event is received, Led2 will be turned off")]),e._v(" "),t("li",[t("strong",[e._v("setLed3:")]),e._v(" if this event is received, Led3 will be turned on")]),e._v(" "),t("li",[t("strong",[e._v("clearLed3:")]),e._v(" if this event is received, Led3 will be turned off")])]),e._v(" "),t("h2",{attrs:{id:"event-triggerer-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-triggerer-description"}},[e._v("#")]),e._v(" Event Triggerer Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("StartRecord:")]),e._v(" will be triggered when Lipmouse is recording")]),e._v(" "),t("li",[t("strong",[e._v("StopRecord:")]),e._v(" will be triggered when Lipmouse has finished recording")]),e._v(" "),t("li",[t("strong",[e._v("sip:")]),e._v(" will be triggered when pressure decreases under the selected sip treshold and increses back before the selected sipTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("longSip:")]),e._v(" will be triggered when pressure decreases under the selected sip treshold and increases back after the selected sipTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("sipStart:")]),e._v(" will be triggered at the moment when pressure decreases under the selected sip treshold")]),e._v(" "),t("li",[t("strong",[e._v("sipEnd:")]),e._v(" will be triggered at the moment when pressure increases above the selected sip treshold")]),e._v(" "),t("li",[t("strong",[e._v("puff:")]),e._v(" will be triggered when pressure increases above the selected puff treshold and decreases back before the selected puffTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("longPuff:")]),e._v(" will be triggered when pressure increases above the selected puff treshold and decreases back after the selected puffTime has passed")]),e._v(" "),t("li",[t("strong",[e._v("puffStart:")]),e._v(" will be triggered at the moment when pressure increases above the selected puff treshold")]),e._v(" "),t("li",[t("strong",[e._v("puffEnd:")]),e._v(" will be triggered at the moment when pressure decreases under the selected puff treshold")]),e._v(" "),t("li",[t("strong",[e._v("button1Pressed:")]),e._v(" will be triggered when button1 of the lipmouse is pressed")]),e._v(" "),t("li",[t("strong",[e._v("button1Released:")]),e._v(" will be triggered when button1 of the lipmouse is released")]),e._v(" "),t("li",[t("strong",[e._v("button2Pressed:")]),e._v(" will be triggered when button2 of the lipmouse is pressed")]),e._v(" "),t("li",[t("strong",[e._v("button2Released:")]),e._v(" will be triggered when button2 of the lipmouse is released")]),e._v(" "),t("li",[t("strong",[e._v("button3Pressed:")]),e._v(" will be triggered when button3 of the lipmouse is pressed")]),e._v(" "),t("li",[t("strong",[e._v("button3Released:")]),e._v(" will be triggered when button3 of the lipmouse is released")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("uniqueID [integer]:")]),e._v(" a unique identifier, useful if more then one lipmouse modules are used (dynamic property).")]),e._v(" "),t("li",[t("strong",[e._v("periodicADCUpdate [integer]:")]),e._v(" the update rate for force and pressure values in milliseconds.")]),e._v(" "),t("li",[t("strong",[e._v("sipThreshold [integer]:")]),e._v(" threshold value for sip actions.")]),e._v(" "),t("li",[t("strong",[e._v("sipTime [integer]:")]),e._v(" threshold time for sip/longSip events.")]),e._v(" "),t("li",[t("strong",[e._v("puffThreshold [integer]:")]),e._v(" threshold value for puff actions.")]),e._v(" "),t("li",[t("strong",[e._v("puffTime [integer]:")]),e._v(" threshold time for puff/longPuff events.")]),e._v(" "),t("li",[t("strong",[e._v("IRCodeFilePath [string]:")]),e._v(" Filepath to the file, where the IR Codes are stored.")])]),e._v(" "),t("h2",{attrs:{id:"ir-code-database"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ir-code-database"}},[e._v("#")]),e._v(" IR Code Database")]),e._v(" "),t("p",[e._v("The database which contains the IR codes as well as the information about the type and name of the device and the specific function is a comma separated value file. The first value is the type, the second one is the name and the third one is the function. The following 512 values are the IR code. This database is automatically generated and maintained if new IR codes are recorded with the Lipmouse with IR functions.")])])}),[],!1,null,null,null);t.default=r.exports},820:function(e,t,s){e.exports=s.p+"assets/img/lipmouseir.135b0f05.png"}}]); \ No newline at end of file diff --git a/assets/js/267.64a8ede7.js b/assets/js/267.a74c44ed.js similarity index 97% rename from assets/js/267.64a8ede7.js rename to assets/js/267.a74c44ed.js index e1544837b7..9288a64f0a 100644 --- a/assets/js/267.64a8ede7.js +++ b/assets/js/267.a74c44ed.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[267],{1246:function(e,t,s){"use strict";s.r(t);var i=s(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"micgpi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#micgpi"}},[e._v("#")]),e._v(" MicGPI")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Generic Control Input)")]),e._v(" "),t("p",[e._v("This component reads the input from the microphone or line-in of a computer’s sound device. The averaged amplitude / sound pressure level and the dominant frequency can be calculated and used for control purposes. It is highly recommended to use a headset microphone to avoid unwanted detections from ambient noise. The sampling rate can be set (300-44100 Hz), the other device properties are mono (1 channel) and 8 bit resoltion.")]),e._v(" "),t("p",[e._v("It is possible to attach a momentary switch via standard 3.5mm jack plug to the mic/line input of the soundcard (or a cheap USB soundcard) and use this component for detection of switch presses.")]),e._v(" "),t("p",[t("strong",[e._v("Disclaimer:")]),e._v(" Attaching a switch to mic/line input does not work with all sound cards. Although we are not aware of a permanent damage to a sound card, you do this on your own risk !")]),e._v(" "),t("p",[t("img",{attrs:{src:s(820),alt:"Screenshot: MicGPI plugin",title:"Screenshot: MicGPI plugin"}})]),e._v(" "),t("p",[e._v("MicGPI plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A internal or external sound device with mic or line input is required. If the component is utilized as switch input, a momentary switch must be attached to the line-in or microphone input jack. No additional input circuit is required. Any sort of filtering of the signal like background noise cancelling must be disabled.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("thresholdLow [int]:")]),e._v(" This input port sets the low threshold below a signal must move that a inLow event gets triggered.")]),e._v(" "),t("li",[t("strong",[e._v("thresholdHigh [int]:")]),e._v(" This input port sets the high threshold above a signal must move that a inHigh event gets triggered.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pressure [double]:")]),e._v(" This port outputs the sound amplitude or pressure level of the mic input signal (the values depend on the selected calculation mode).")]),e._v(" "),t("li",[t("strong",[e._v("frequency [integer]:")]),e._v(" In case frequency calculation is enabled, this port outputs the dominant frequency of the spectrum (in Hz).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("inLow:")]),e._v(" This event is fired if the calculated level goes below the low threshold (can be used to detect switch press/release or sound pressure level).")]),e._v(" "),t("li",[t("strong",[e._v("inHigh:")]),e._v(" This event is fired if the calculated level goes above the high threshold (can be used to detect switch press/release or sound pressure level).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("samplingRate [int]:")]),e._v(" Defines the sampling rate in Hz (allowed values are in the rang of 300 - 44100 Hz)")]),e._v(" "),t("li",[t("strong",[e._v("sampleSize [int]:")]),e._v(" Defines the size of the sample buffer. Must be a power of 2. The values 32/64/128/256/512/1024/2048 can be selected from a combobox. This buffer size determines the calculation-interval on the output ports.")]),e._v(" "),t("li",[t("strong",[e._v("mode [int, combobox selection]:")]),e._v(" Defines the way how the output signal (which is also compared to the threshold values) is calculated. The calculation is applied on a block of samples of the selected size. Available options are: average sample values, average absolute sample values, min value, max value and max absolute value")]),e._v(" "),t("li",[t("strong",[e._v("thresholdLow [int]:")]),e._v(" This property sets the low threshold below a signal must move that a inLow event gets triggered.")]),e._v(" "),t("li",[t("strong",[e._v("thresholdHigh [int]:")]),e._v(" This property sets the high threshold above a signal must move that a inHigh event gets triggered.")]),e._v(" "),t("li",[t("strong",[e._v("noiseLevel [double]:")]),e._v(" This property defines a minimum level fo a valid sound signal. All noise which is below this level will be attenauted to avoid unwanted detections.")]),e._v(" "),t("li",[t("strong",[e._v("calculateFrequency [boolean]:")]),e._v(" If true, an FFT will be performed to calculate the frequency spectrum and output the dominant frequency to the associated port.")]),e._v(" "),t("li",[t("strong",[e._v("printSpectrum [boolean]:")]),e._v(" If this property is set to true and frequency calculation is enabled, the FFT spectrum will be printed to the console (only reasonable in debug mode).")]),e._v(" "),t("li",[t("strong",[e._v("captureDevice: [string]:")]),e._v(" This property defines the sound card from which the audio samples should be analysed. (dynamic property, values are suggested when ARE is in synced state)")])])])}),[],!1,null,null,null);t.default=o.exports},820:function(e,t,s){e.exports=s.p+"assets/img/micgpi.c3fe15a9.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[267],{1246:function(e,t,s){"use strict";s.r(t);var i=s(2),o=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"micgpi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#micgpi"}},[e._v("#")]),e._v(" MicGPI")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Generic Control Input)")]),e._v(" "),t("p",[e._v("This component reads the input from the microphone or line-in of a computer’s sound device. The averaged amplitude / sound pressure level and the dominant frequency can be calculated and used for control purposes. It is highly recommended to use a headset microphone to avoid unwanted detections from ambient noise. The sampling rate can be set (300-44100 Hz), the other device properties are mono (1 channel) and 8 bit resoltion.")]),e._v(" "),t("p",[e._v("It is possible to attach a momentary switch via standard 3.5mm jack plug to the mic/line input of the soundcard (or a cheap USB soundcard) and use this component for detection of switch presses.")]),e._v(" "),t("p",[t("strong",[e._v("Disclaimer:")]),e._v(" Attaching a switch to mic/line input does not work with all sound cards. Although we are not aware of a permanent damage to a sound card, you do this on your own risk !")]),e._v(" "),t("p",[t("img",{attrs:{src:s(817),alt:"Screenshot: MicGPI plugin",title:"Screenshot: MicGPI plugin"}})]),e._v(" "),t("p",[e._v("MicGPI plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A internal or external sound device with mic or line input is required. If the component is utilized as switch input, a momentary switch must be attached to the line-in or microphone input jack. No additional input circuit is required. Any sort of filtering of the signal like background noise cancelling must be disabled.")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("thresholdLow [int]:")]),e._v(" This input port sets the low threshold below a signal must move that a inLow event gets triggered.")]),e._v(" "),t("li",[t("strong",[e._v("thresholdHigh [int]:")]),e._v(" This input port sets the high threshold above a signal must move that a inHigh event gets triggered.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("pressure [double]:")]),e._v(" This port outputs the sound amplitude or pressure level of the mic input signal (the values depend on the selected calculation mode).")]),e._v(" "),t("li",[t("strong",[e._v("frequency [integer]:")]),e._v(" In case frequency calculation is enabled, this port outputs the dominant frequency of the spectrum (in Hz).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("inLow:")]),e._v(" This event is fired if the calculated level goes below the low threshold (can be used to detect switch press/release or sound pressure level).")]),e._v(" "),t("li",[t("strong",[e._v("inHigh:")]),e._v(" This event is fired if the calculated level goes above the high threshold (can be used to detect switch press/release or sound pressure level).")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("samplingRate [int]:")]),e._v(" Defines the sampling rate in Hz (allowed values are in the rang of 300 - 44100 Hz)")]),e._v(" "),t("li",[t("strong",[e._v("sampleSize [int]:")]),e._v(" Defines the size of the sample buffer. Must be a power of 2. The values 32/64/128/256/512/1024/2048 can be selected from a combobox. This buffer size determines the calculation-interval on the output ports.")]),e._v(" "),t("li",[t("strong",[e._v("mode [int, combobox selection]:")]),e._v(" Defines the way how the output signal (which is also compared to the threshold values) is calculated. The calculation is applied on a block of samples of the selected size. Available options are: average sample values, average absolute sample values, min value, max value and max absolute value")]),e._v(" "),t("li",[t("strong",[e._v("thresholdLow [int]:")]),e._v(" This property sets the low threshold below a signal must move that a inLow event gets triggered.")]),e._v(" "),t("li",[t("strong",[e._v("thresholdHigh [int]:")]),e._v(" This property sets the high threshold above a signal must move that a inHigh event gets triggered.")]),e._v(" "),t("li",[t("strong",[e._v("noiseLevel [double]:")]),e._v(" This property defines a minimum level fo a valid sound signal. All noise which is below this level will be attenauted to avoid unwanted detections.")]),e._v(" "),t("li",[t("strong",[e._v("calculateFrequency [boolean]:")]),e._v(" If true, an FFT will be performed to calculate the frequency spectrum and output the dominant frequency to the associated port.")]),e._v(" "),t("li",[t("strong",[e._v("printSpectrum [boolean]:")]),e._v(" If this property is set to true and frequency calculation is enabled, the FFT spectrum will be printed to the console (only reasonable in debug mode).")]),e._v(" "),t("li",[t("strong",[e._v("captureDevice: [string]:")]),e._v(" This property defines the sound card from which the audio samples should be analysed. (dynamic property, values are suggested when ARE is in synced state)")])])])}),[],!1,null,null,null);t.default=o.exports},817:function(e,t,s){e.exports=s.p+"assets/img/micgpi.c3fe15a9.png"}}]); \ No newline at end of file diff --git a/assets/js/268.dc466a9c.js b/assets/js/268.3e340c0d.js similarity index 97% rename from assets/js/268.dc466a9c.js rename to assets/js/268.3e340c0d.js index 63c2c2cfd2..76b20593b2 100644 --- a/assets/js/268.dc466a9c.js +++ b/assets/js/268.3e340c0d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[268],{1253:function(e,t,s){"use strict";s.r(t);var o=s(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),e._v(" "),t("p",[e._v("This component provides access to mouse input activities of connected a standard mouse, like mouse x/y movement or button press/release activities. Mouse wheel and third mouse button are supported.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(829),alt:"Screenshot: MouseCapture plugin",title:"Screenshot: MouseCapture plugin"}})]),e._v(" "),t("p",[e._v("MouseCapture plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A mouse or mouse-equivalent must be connected to the computer/personal platform.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mouseX [integer]:")]),e._v(" This port provides current absolute mouse X-position or relative mouse X-movement as integer value (depending on the mode of operation).")]),e._v(" "),t("li",[t("strong",[e._v("mouseY [integer]:")]),e._v(" This port provides current absolute mouse Y-position or relative mouse Y-movement as integer value (depending on the mode of operation).")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("blockEvents:")]),e._v(" After this incoming event no mouse activities will be routed to the operating system.")]),e._v(" "),t("li",[t("strong",[e._v("forwardEvents:")]),e._v(" After this incoming event all mouse activities will also be forwarded to the operating system.")]),e._v(" "),t("li",[t("strong",[e._v("toggleBlock:")]),e._v(" An incoming event toggles the current blockEvents. If the mouse activities were forwarded they will now be kept and vica versa.")]),e._v(" "),t("li",[t("strong",[e._v("pollMousePosition:")]),e._v(" Retrieves the current mouse position (x/y) values and sends them to the output ports. Useful for tracking the mouse if it is moved programmatically.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("leftButtonPressed:")]),e._v(" This port fires an event as the left mouse button is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("leftButtonReleased:")]),e._v(" This port fires an event as the left mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("rightButtonPressed:")]),e._v(" This port fires an event as the right mouse button is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("rightButtonReleased:")]),e._v(" This port fires an event as the right mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("middleButtonPressed:")]),e._v(" This port fires an event as the middle mouse button is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("middleButtonReleased:")]),e._v(" This port fires an event as the middle mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("wheelUp:")]),e._v(" This port fires an event as the mouse wheel is turned one step away from the user.")]),e._v(" "),t("li",[t("strong",[e._v("wheelDown:")]),e._v(" This port fires an event as the mouse wheel is turned one step towards the user.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("blockEvents [boolean]:")]),e._v(" This property defines the mode of operation of the mousehook component. If this property is set to true, no mouse activities will be routed to the operating system - they will not be processed by other applications, the mouse cursor will not move and no clicks will be actually performed by the operation system. This can be useful if the mouse activity shall be transferred e.g. from the AsTeRICS personal platform to another system (via the HID actuator) or the mouse should be trapped to control a particular GUI or menu structure. In this case, the mouse component outputs only relative mouse movements in X and Y axis at the corresponding output ports. If the property value is set to false, mouse activities will be passed back to the operating system and will be processed as usual. In this case, the mousehook component provides the absolute mouse positions at the component?s output ports.")])])])}),[],!1,null,null,null);t.default=r.exports},829:function(e,t,s){e.exports=s.p+"assets/img/mousecapture.9a78212a.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[268],{1253:function(e,t,s){"use strict";s.r(t);var o=s(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Standard Input Devices)")]),e._v(" "),t("p",[e._v("This component provides access to mouse input activities of connected a standard mouse, like mouse x/y movement or button press/release activities. Mouse wheel and third mouse button are supported.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(828),alt:"Screenshot: MouseCapture plugin",title:"Screenshot: MouseCapture plugin"}})]),e._v(" "),t("p",[e._v("MouseCapture plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A mouse or mouse-equivalent must be connected to the computer/personal platform.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mouseX [integer]:")]),e._v(" This port provides current absolute mouse X-position or relative mouse X-movement as integer value (depending on the mode of operation).")]),e._v(" "),t("li",[t("strong",[e._v("mouseY [integer]:")]),e._v(" This port provides current absolute mouse Y-position or relative mouse Y-movement as integer value (depending on the mode of operation).")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("blockEvents:")]),e._v(" After this incoming event no mouse activities will be routed to the operating system.")]),e._v(" "),t("li",[t("strong",[e._v("forwardEvents:")]),e._v(" After this incoming event all mouse activities will also be forwarded to the operating system.")]),e._v(" "),t("li",[t("strong",[e._v("toggleBlock:")]),e._v(" An incoming event toggles the current blockEvents. If the mouse activities were forwarded they will now be kept and vica versa.")]),e._v(" "),t("li",[t("strong",[e._v("pollMousePosition:")]),e._v(" Retrieves the current mouse position (x/y) values and sends them to the output ports. Useful for tracking the mouse if it is moved programmatically.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("leftButtonPressed:")]),e._v(" This port fires an event as the left mouse button is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("leftButtonReleased:")]),e._v(" This port fires an event as the left mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("rightButtonPressed:")]),e._v(" This port fires an event as the right mouse button is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("rightButtonReleased:")]),e._v(" This port fires an event as the right mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("middleButtonPressed:")]),e._v(" This port fires an event as the middle mouse button is pressed.")]),e._v(" "),t("li",[t("strong",[e._v("middleButtonReleased:")]),e._v(" This port fires an event as the middle mouse button is released.")]),e._v(" "),t("li",[t("strong",[e._v("wheelUp:")]),e._v(" This port fires an event as the mouse wheel is turned one step away from the user.")]),e._v(" "),t("li",[t("strong",[e._v("wheelDown:")]),e._v(" This port fires an event as the mouse wheel is turned one step towards the user.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("blockEvents [boolean]:")]),e._v(" This property defines the mode of operation of the mousehook component. If this property is set to true, no mouse activities will be routed to the operating system - they will not be processed by other applications, the mouse cursor will not move and no clicks will be actually performed by the operation system. This can be useful if the mouse activity shall be transferred e.g. from the AsTeRICS personal platform to another system (via the HID actuator) or the mouse should be trapped to control a particular GUI or menu structure. In this case, the mouse component outputs only relative mouse movements in X and Y axis at the corresponding output ports. If the property value is set to false, mouse activities will be passed back to the operating system and will be processed as usual. In this case, the mousehook component provides the absolute mouse positions at the component?s output ports.")])])])}),[],!1,null,null,null);t.default=r.exports},828:function(e,t,s){e.exports=s.p+"assets/img/mousecapture.9a78212a.jpg"}}]); \ No newline at end of file diff --git a/assets/js/269.e42dda26.js b/assets/js/269.7a100324.js similarity index 97% rename from assets/js/269.e42dda26.js rename to assets/js/269.7a100324.js index 888c7a3824..63796dd597 100644 --- a/assets/js/269.e42dda26.js +++ b/assets/js/269.7a100324.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[269],{1248:function(e,t,r){"use strict";r.r(t);var o=r(2),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"openbci"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#openbci"}},[e._v("#")]),e._v(" OpenBCI")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Bioelectric Measurement)")]),e._v(" "),t("p",[e._v("This component provides an interface to bioelectric amplifiers which are compatible to the openBCI packet fromat. For more information please refer to the "),t("a",{attrs:{href:"http://www.openbci.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenBCI"),t("OutboundLink")],1),e._v(" website. The COM Port number where the device is connected must be specified in the plugin properties.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(823),alt:"Screenshot: OpenBCI plugin",title:"Screenshot: OpenBCI plugin"}})]),e._v(" "),t("p",[e._v("OpenBCI plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an Open BCI compatible device connected to a COM Port, which sends packet protocol for channel data.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Channel1 to Channel8 [integer]:")]),e._v(" Each output corresponds to the sampled data from its corresponding channel. A calibration procedure to obtain the factor for calculation of microvolts must be performed with the amplifier device.")]),e._v(" "),t("li",[t("strong",[e._v("AccX, AccY, AccZ [integer]:")]),e._v(" The current values of the 3 axis of the acceleration sensor.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [String]:")]),e._v(" The name of the COM port, for example COM2 or COM17.")]),e._v(" "),t("li",[t("strong",[e._v("Baudrate [Integer]:")]),e._v(" The baud rate for the transmission. Standard is 115200.")])])])}),[],!1,null,null,null);t.default=n.exports},823:function(e,t,r){e.exports=r.p+"assets/img/openbci.36c1b739.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[269],{1250:function(e,t,r){"use strict";r.r(t);var o=r(2),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"openbci"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#openbci"}},[e._v("#")]),e._v(" OpenBCI")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Bioelectric Measurement)")]),e._v(" "),t("p",[e._v("This component provides an interface to bioelectric amplifiers which are compatible to the openBCI packet fromat. For more information please refer to the "),t("a",{attrs:{href:"http://www.openbci.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenBCI"),t("OutboundLink")],1),e._v(" website. The COM Port number where the device is connected must be specified in the plugin properties.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(823),alt:"Screenshot: OpenBCI plugin",title:"Screenshot: OpenBCI plugin"}})]),e._v(" "),t("p",[e._v("OpenBCI plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an Open BCI compatible device connected to a COM Port, which sends packet protocol for channel data.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Channel1 to Channel8 [integer]:")]),e._v(" Each output corresponds to the sampled data from its corresponding channel. A calibration procedure to obtain the factor for calculation of microvolts must be performed with the amplifier device.")]),e._v(" "),t("li",[t("strong",[e._v("AccX, AccY, AccZ [integer]:")]),e._v(" The current values of the 3 axis of the acceleration sensor.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [String]:")]),e._v(" The name of the COM port, for example COM2 or COM17.")]),e._v(" "),t("li",[t("strong",[e._v("Baudrate [Integer]:")]),e._v(" The baud rate for the transmission. Standard is 115200.")])])])}),[],!1,null,null,null);t.default=n.exports},823:function(e,t,r){e.exports=r.p+"assets/img/openbci.36c1b739.jpg"}}]); \ No newline at end of file diff --git a/assets/js/27.f2c190b1.js b/assets/js/27.730f0b1c.js similarity index 90% rename from assets/js/27.f2c190b1.js rename to assets/js/27.730f0b1c.js index 5f1bbf9723..893a5203a6 100644 --- a/assets/js/27.f2c190b1.js +++ b/assets/js/27.730f0b1c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{1037:function(e,t,n){"use strict";n.r(t);var s=n(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"keyboard-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-control"}},[e._v("#")]),e._v(" Keyboard Control")]),e._v(" "),t("p",[e._v("The WebACS is fully accessible via keyboard. The following sections describe the usage in the different parts of the ACS.")]),e._v(" "),t("h2",{attrs:{id:"shortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#shortcuts"}},[e._v("#")]),e._v(" Shortcuts")]),e._v(" "),t("p",[e._v("The shortcut menu right at the top of the screen (see picture below) gives the user the chance to jump directly to one of the subsections of the page, thus making keyboard navigation much faster.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(483),alt:"Screenshot: Shortcut menu",title:"Screenshot: Shortcut menu"}})]),e._v(" "),t("p",[e._v("WebACS shortcut menu")]),e._v(" "),t("h2",{attrs:{id:"menu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#menu"}},[e._v("#")]),e._v(" Menu")]),e._v(" "),t("p",[e._v("After jumping to the menu with "),t("em",[e._v("CTRL-0")]),e._v(", the menu tabs can be switched by using the "),t("em",[e._v("arrow")]),e._v(" keys. Once the desired tab is active, the menu items can be reached via the "),t("em",[e._v("Tab")]),e._v(" key. When one of the component menus in the Components tab is selected, it can also be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(484),alt:"Screenshot: The menu after opening a components submenu",title:"Screenshot: The menu after opening a components submenu"}})]),e._v(" "),t("p",[e._v("The menu after opening a components submenu")]),e._v(" "),t("h2",{attrs:{id:"model-panel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-panel"}},[e._v("#")]),e._v(" Model Panel")]),e._v(" "),t("p",[e._v("After jumping to the model panel with "),t("em",[e._v("CTRL-1")]),e._v(", the "),t("em",[e._v("arrow")]),e._v(" keys can be used to switch between the models.")]),e._v(" "),t("h2",{attrs:{id:"model-designer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-designer"}},[e._v("#")]),e._v(" Model Designer")]),e._v(" "),t("p",[e._v("After jumping to the model designer with "),t("em",[e._v("CTRL-2")]),e._v(", the user can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Now the components can be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys or moved by using "),t("em",[e._v("Shift-Arrow")]),e._v("."),t("br"),e._v("\nPressing the "),t("em",[e._v("Space")]),e._v(" bar activates port mode, thus enabling the user to navigate the ports of the selected component via the "),t("em",[e._v("arrow")]),e._v(" keys. Pressing "),t("em",[e._v("Shift-Space")]),e._v(" on an output port starts drawing a new channel. The user must then navigate to a matching input port on another component and press "),t("em",[e._v("Shift-Space")]),e._v(" there to complete the channel. "),t("em",[e._v("Esc")]),e._v(" ends port mode."),t("br"),e._v("\nWhen in port mode, the user can activate channel mode by pressing the "),t("em",[e._v("Space")]),e._v(" bar again. Now the channels connected to the selected port can be navigated using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends channel mode.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(485),alt:"Screenshot: The Model Designer in port mode",title:"Screenshot: The Model Designer in port mode"}})]),e._v(" "),t("p",[e._v("The Model Designer in port mode")]),e._v(" "),t("h2",{attrs:{id:"gui-designer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gui-designer"}},[e._v("#")]),e._v(" GUI Designer")]),e._v(" "),t("p",[e._v("After jumping to the GUI Designer with "),t("em",[e._v("CTRL-3")]),e._v(", the user can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Then the user can navigate the elements by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Shift-arrow")]),e._v(" keys moves the selected element, "),t("em",[e._v("Alt-arrow")]),e._v(" keys resizes the selected element.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(486),alt:"Screenshot: The GUI Designer in keyboard mode",title:"Screenshot: The GUI Designer in keyboard mode"}})]),e._v(" "),t("p",[e._v("The GUI Designer in keyboard mode")]),e._v(" "),t("h2",{attrs:{id:"list-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-view"}},[e._v("#")]),e._v(" List View")]),e._v(" "),t("p",[e._v("After jumping to the List View with "),t("em",[e._v("CTRL-4")]),e._v(", the user can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Then the user can navigate the elements by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Space")]),e._v(" activates port mode, so that the ports of the selected components can be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends port mode."),t("br"),e._v("\nWhen in port mode, the user can activate channel mode by pressing the "),t("em",[e._v("Space")]),e._v(" bar again. Now the channels connected to the selected port can be navigated using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends channel mode.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(487),alt:"Screenshot: List View in channel mode",title:"Screenshot: List View in channel mode"}})]),e._v(" "),t("p",[e._v("List View in channel mode")]),e._v(" "),t("h2",{attrs:{id:"property-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#property-editor"}},[e._v("#")]),e._v(" Property Editor")]),e._v(" "),t("p",[e._v("After jumping to the Property Editor with "),t("em",[e._v("CTRL-5")]),e._v(", the user can switch the tabs of the Property Editor by using the "),t("em",[e._v("arrow")]),e._v(" keys. All other elements can be reached by using the "),t("em",[e._v("Tab")]),e._v(" key in the same way as on any website.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(488),alt:"Screenshot: Property Editor with open dropdown",title:"Screenshot: Property Editor with open dropdown"}})]),e._v(" "),t("p",[e._v("Property Editor with open dropdown")])])}),[],!1,null,null,null);t.default=r.exports},483:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyUAAAAUCAYAAACTWpIKAAAHKklEQVR4nO1dO3LjMAzVgVzoMKo8uYfr5BY5gGd8hT2BZ3KCdFt7Ju3W3EKf8AOCACVLkPWKV8RZgxDeIwiQVLb5eXy7pmncz+Mb8ICYIMYAOAdsAjo6LsC9XYAbQItYMw31IYCYIMYAOAesAjo6LsC9XYAbQAs0JZWBAhBjAJwDNgAdHRfg3i7ADaAFmpLKQAGIMQDOARuAjo4LcG8X4AbQAk1JZaAAxBgA54ANQEfHBbi3C3ADaFHVlNzOjWuaHu37n/7z+8W1/s9zcb+49vy5vY1MoPaDP+6j/eWraU7u4059HnE68Bn8borlp3sLfubx9X6abLxdjcX42hX9mrQk+XfPhNiH7TmX+vsSnEvtWdeXMQ3560zpO4vrCNyb4b5UU2S59+OqibG2bliVv+25CfxoL+6rhhvrWLB2TODnjFg7Txt3e90E+ZyZL/qm5NpND9QXm8PDLdqUDIGaRc4SNvKB2gfSxBFwRnA6fRZPlmDxVYjxfnHtaJsaZ+sYv1xTYoBzz9YhGtElClNTMKAhbuG2oiNw/3TuybGl3Ffl7GXrhpfjJhj3VZuSJ2sgmzOeNa4F3cifbVZTEnw+NiXt76544MDwMGmX1D9Ye+6GIubkWr9zGwLp77ZPdqOA9Z1Y525x90fZyAZaFijq2d/OXTDmR263JxeLMYZTLCTPyvhfaAJUYgyaTrkY+5gPfhYWiVViHOlgtBdrIcdN4jvhl+9HsDswJgWOZ6kPhjmPd1c2n1dLc15rj8tB0VhZ+7XaSfJs526WNUTogNvw4nRUiiWZU8G9Ce6D9UPLPXNSQnNB1w29vbio8n7OFG6k7cnmEI/p2bzfW+fmfnFt27m3uScl7NpJaJbTeGEdrq8/4+dkYlWz/ky8ZLT3MnO6/7eSDYJYM4LrW+NkipwZC5HhM/YUheq2uATgB8u3xS0qsY3Ih9s5JX5u8RQ+++9YbGFOPBsXQ01TItllEouxskOmFvpccbF0jEm9RbEamwZyR5bgJteUhFr1xgo0puc564Nhzqcj6A3m1Sqcz7RH5iCGW8q+WjtUnrWsIaU/WR0puBI1JeB+Pe6vXbEhYbnPNSUcF9yObuCPV2Rx18TYmyUn17aEPkxz08dnKqIXaErItZPSLJfjOVvauRFpgJ1nbHz9GyKSnMHXrMX4WNZNfA2M0U1FUxIGlm88/MnoJ5ehy8t2W5QoiOSkaUqiXRBJx6adXLmTF18U8Q5N4A8TQ/5ZaSwhRt/HeBdji6ZEHmNab8nvkqsCPDfFZBRoO41jiecqH4xx/kPEdp15tQ7n1fa4HOSNxdmv1o76dNOWhmrfK5DEUtOUgPsVuWd4EOWQbLPA1QLcNROvEfEblIQ/nofp350/3e3sNyJ83C1w8/V+GgrK5ZoSeu1MfWLrSMaWfm7EGoh4I56ZG0Oeg0p1b6lutqsbboOmpBnlX99KRVHblIQOPqMpCcfuA1zehamaXBG5afGUEcjCTYn4vnOpQ05ElBdjMDnbi7stfX1LHOPaApXnRtOUBPZUxYXSB2Ocl3Zu9s55tb3ItyAHLVaY5sam8qxxDcW7nwzsNCXgfrH8IfRd35QwXBTuvt/OTdhMkPzlNRB/329OijrfnJvhKlNcfCt2vbP8JFynvM9rSjRzI9VAz8/FfbS0FrkxntmU7HNO83NM3ZRkd74FBTX5O4koiCOjdMxx90N2fYs7Xps9uZjiKfajfAWF+l70rFn/l3vBKfye/tjud3ep8kX3GTEuN3f0pBO9DzMWTsRVQH+ujJNUeiJW9MEy54pkuGfOa+0VfRQc96u1Q+VZ0xqirlVU6EgcyyingvvNuM9u5mi5zzUlbD1SeCH32g3FuffsjG2yIPW/f7+4tj2xJ8KWuOF8qc3v9DV6QrMC/ZO2tHOD0sBgT7qhzK0j865vMXWzYd2wa3VBM7p3SnwRsAH0SY2PTOmOb7oeRr2k7gXXv0bWBk1JwUbi60rFUxKLNLnlYph9Vtb/3J+C04kxFGCkgTiepCBj3teMcThu9qUzATfZIoV6wc4/+jx3olNFsQ/GOd9+Xj2R81p7XA4ikz9hv1Y7qkVsew1R1yEWf9Gdy6ngfsP8EY5fe3WPOynJcvFI6wbSN+JdB4kG0hfc45+tc8PEQTkv2bUzdxKQy/GsLeXcIDUg2CQRzv3yH9tokuYqXdP2Pae5RibWDP7zxJrJBRw3xpIrVcBrcb42BPfNjw6xjvYWy735a5l7wBY3S66dT1+HFdelgFlAU1IZKAAx/nl8oyk5IufPhn/CJtwtPjpKu+W7ieXe/DUA5BC7eIWm5PeUQ/4OMlAPNCWVgQIQYwCcAzYAHR0X4N4uwA2gBZqSykABiDEAzgEbgI6OC3BvF+AG0AJNSWWgAMQYAOeADUBHxwW4twtwA2iRNCXxm/QAAAAAAAAAAACr4u/jnwMAAAAAAAAAANgK/wGtcr01fHxEMAAAAABJRU5ErkJggg=="},484:function(e,t,n){e.exports=n.p+"assets/img/menu_open_components.7be82a1c.png"},485:function(e,t,n){e.exports=n.p+"assets/img/model_designer_in_port_mode.b0d664ff.png"},486:function(e,t,n){e.exports=n.p+"assets/img/gui_designer_in_keyboard_mode.9e46d348.png"},487:function(e,t,n){e.exports=n.p+"assets/img/list_view_in_channel_mode.3427773e.png"},488:function(e,t,n){e.exports=n.p+"assets/img/property_editor_with_open_dropdown.ce0c4b62.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{1041:function(e,t,n){"use strict";n.r(t);var s=n(2),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"keyboard-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-control"}},[e._v("#")]),e._v(" Keyboard Control")]),e._v(" "),t("p",[e._v("The WebACS is fully accessible via keyboard. The following sections describe the usage in the different parts of the ACS.")]),e._v(" "),t("h2",{attrs:{id:"shortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#shortcuts"}},[e._v("#")]),e._v(" Shortcuts")]),e._v(" "),t("p",[e._v("The shortcut menu right at the top of the screen (see picture below) gives the user the chance to jump directly to one of the subsections of the page, thus making keyboard navigation much faster.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(488),alt:"Screenshot: Shortcut menu",title:"Screenshot: Shortcut menu"}})]),e._v(" "),t("p",[e._v("WebACS shortcut menu")]),e._v(" "),t("h2",{attrs:{id:"menu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#menu"}},[e._v("#")]),e._v(" Menu")]),e._v(" "),t("p",[e._v("After jumping to the menu with "),t("em",[e._v("CTRL-0")]),e._v(", the menu tabs can be switched by using the "),t("em",[e._v("arrow")]),e._v(" keys. Once the desired tab is active, the menu items can be reached via the "),t("em",[e._v("Tab")]),e._v(" key. When one of the component menus in the Components tab is selected, it can also be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(489),alt:"Screenshot: The menu after opening a components submenu",title:"Screenshot: The menu after opening a components submenu"}})]),e._v(" "),t("p",[e._v("The menu after opening a components submenu")]),e._v(" "),t("h2",{attrs:{id:"model-panel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-panel"}},[e._v("#")]),e._v(" Model Panel")]),e._v(" "),t("p",[e._v("After jumping to the model panel with "),t("em",[e._v("CTRL-1")]),e._v(", the "),t("em",[e._v("arrow")]),e._v(" keys can be used to switch between the models.")]),e._v(" "),t("h2",{attrs:{id:"model-designer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-designer"}},[e._v("#")]),e._v(" Model Designer")]),e._v(" "),t("p",[e._v("After jumping to the model designer with "),t("em",[e._v("CTRL-2")]),e._v(", the user can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Now the components can be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys or moved by using "),t("em",[e._v("Shift-Arrow")]),e._v("."),t("br"),e._v("\nPressing the "),t("em",[e._v("Space")]),e._v(" bar activates port mode, thus enabling the user to navigate the ports of the selected component via the "),t("em",[e._v("arrow")]),e._v(" keys. Pressing "),t("em",[e._v("Shift-Space")]),e._v(" on an output port starts drawing a new channel. The user must then navigate to a matching input port on another component and press "),t("em",[e._v("Shift-Space")]),e._v(" there to complete the channel. "),t("em",[e._v("Esc")]),e._v(" ends port mode."),t("br"),e._v("\nWhen in port mode, the user can activate channel mode by pressing the "),t("em",[e._v("Space")]),e._v(" bar again. Now the channels connected to the selected port can be navigated using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends channel mode.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(490),alt:"Screenshot: The Model Designer in port mode",title:"Screenshot: The Model Designer in port mode"}})]),e._v(" "),t("p",[e._v("The Model Designer in port mode")]),e._v(" "),t("h2",{attrs:{id:"gui-designer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gui-designer"}},[e._v("#")]),e._v(" GUI Designer")]),e._v(" "),t("p",[e._v("After jumping to the GUI Designer with "),t("em",[e._v("CTRL-3")]),e._v(", the user can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Then the user can navigate the elements by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Shift-arrow")]),e._v(" keys moves the selected element, "),t("em",[e._v("Alt-arrow")]),e._v(" keys resizes the selected element.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(491),alt:"Screenshot: The GUI Designer in keyboard mode",title:"Screenshot: The GUI Designer in keyboard mode"}})]),e._v(" "),t("p",[e._v("The GUI Designer in keyboard mode")]),e._v(" "),t("h2",{attrs:{id:"list-view"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-view"}},[e._v("#")]),e._v(" List View")]),e._v(" "),t("p",[e._v("After jumping to the List View with "),t("em",[e._v("CTRL-4")]),e._v(", the user can enter keyboard mode by pressing "),t("em",[e._v("Enter")]),e._v(". Then the user can navigate the elements by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Space")]),e._v(" activates port mode, so that the ports of the selected components can be navigated by using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends port mode."),t("br"),e._v("\nWhen in port mode, the user can activate channel mode by pressing the "),t("em",[e._v("Space")]),e._v(" bar again. Now the channels connected to the selected port can be navigated using the "),t("em",[e._v("arrow")]),e._v(" keys. "),t("em",[e._v("Esc")]),e._v(" ends channel mode.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(492),alt:"Screenshot: List View in channel mode",title:"Screenshot: List View in channel mode"}})]),e._v(" "),t("p",[e._v("List View in channel mode")]),e._v(" "),t("h2",{attrs:{id:"property-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#property-editor"}},[e._v("#")]),e._v(" Property Editor")]),e._v(" "),t("p",[e._v("After jumping to the Property Editor with "),t("em",[e._v("CTRL-5")]),e._v(", the user can switch the tabs of the Property Editor by using the "),t("em",[e._v("arrow")]),e._v(" keys. All other elements can be reached by using the "),t("em",[e._v("Tab")]),e._v(" key in the same way as on any website.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(493),alt:"Screenshot: Property Editor with open dropdown",title:"Screenshot: Property Editor with open dropdown"}})]),e._v(" "),t("p",[e._v("Property Editor with open dropdown")])])}),[],!1,null,null,null);t.default=r.exports},488:function(e,t){e.exports="data:image/png;base64,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"},489:function(e,t,n){e.exports=n.p+"assets/img/menu_open_components.7be82a1c.png"},490:function(e,t,n){e.exports=n.p+"assets/img/model_designer_in_port_mode.b0d664ff.png"},491:function(e,t,n){e.exports=n.p+"assets/img/gui_designer_in_keyboard_mode.9e46d348.png"},492:function(e,t,n){e.exports=n.p+"assets/img/list_view_in_channel_mode.3427773e.png"},493:function(e,t,n){e.exports=n.p+"assets/img/property_editor_with_open_dropdown.ce0c4b62.png"}}]); \ No newline at end of file diff --git a/assets/js/270.8d270c18.js b/assets/js/270.82525729.js similarity index 92% rename from assets/js/270.8d270c18.js rename to assets/js/270.82525729.js index 2eea526ee3..2362feec88 100644 --- a/assets/js/270.8d270c18.js +++ b/assets/js/270.82525729.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[270],{1250:function(e,t,r){"use strict";r.r(t);var o=r(2),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"p2parser"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#p2parser"}},[e._v("#")]),e._v(" P2Parser")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Bioelectric Measurement)")]),e._v(" "),t("p",[e._v("This component provides an interface to bioelectric amplifiers which are compatible to the openEEG P2 packet fromat (e.g. the ModualarEEG or the SMTEEG by Olimex). For more information please refer to the "),t("a",{attrs:{href:"http://openeeg.sf.net",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenEEG"),t("OutboundLink")],1),e._v(" website.The COM Port number where the device is connected must be specified in the plugin properties.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(825),alt:"Screenshot: OpenEEG P2Parser plugin",title:"Screenshot: OpenEEG P2Parser plugin"}})]),e._v(" "),t("p",[e._v("OpenEEG P2 Parser plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an OpenEEG compatible device connected to a COM Port, which sends the P2 packet protocol for channel data.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Channel1 to Channel6 [integer]:")]),e._v(" Each output corresponds to the sampled data from its corresponding channel. The values range for -512 to 512. A calibration procedure to obtain the factor for calculation of microvolts must be performed with the amplifier device.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [String]:")]),e._v(" The name of the COM port, for example COM2 or COM17.")]),e._v(" "),t("li",[t("strong",[e._v("Baudrate [Integer]:")]),e._v(" The baud rate for the transmission. Standard is 57600.")])])])}),[],!1,null,null,null);t.default=a.exports},825:function(e,t,r){e.exports=r.p+"assets/img/p2parser.8b47904f.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[270],{1255:function(e,t,r){"use strict";r.r(t);var o=r(2),a=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"p2parser"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#p2parser"}},[e._v("#")]),e._v(" P2Parser")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Bioelectric Measurement)")]),e._v(" "),t("p",[e._v("This component provides an interface to bioelectric amplifiers which are compatible to the openEEG P2 packet fromat (e.g. the ModualarEEG or the SMTEEG by Olimex). For more information please refer to the "),t("a",{attrs:{href:"http://openeeg.sf.net",target:"_blank",rel:"noopener noreferrer"}},[e._v("OpenEEG"),t("OutboundLink")],1),e._v(" website.The COM Port number where the device is connected must be specified in the plugin properties.")]),e._v(" "),t("p",[t("img",{attrs:{src:r(830),alt:"Screenshot: OpenEEG P2Parser plugin",title:"Screenshot: OpenEEG P2Parser plugin"}})]),e._v(" "),t("p",[e._v("OpenEEG P2 Parser plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This software component requires an OpenEEG compatible device connected to a COM Port, which sends the P2 packet protocol for channel data.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("Channel1 to Channel6 [integer]:")]),e._v(" Each output corresponds to the sampled data from its corresponding channel. The values range for -512 to 512. A calibration procedure to obtain the factor for calculation of microvolts must be performed with the amplifier device.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("COMPort [String]:")]),e._v(" The name of the COM port, for example COM2 or COM17.")]),e._v(" "),t("li",[t("strong",[e._v("Baudrate [Integer]:")]),e._v(" The baud rate for the transmission. Standard is 57600.")])])])}),[],!1,null,null,null);t.default=a.exports},830:function(e,t,r){e.exports=r.p+"assets/img/p2parser.8b47904f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/271.da400853.js b/assets/js/271.d0c6e513.js similarity index 97% rename from assets/js/271.da400853.js rename to assets/js/271.d0c6e513.js index e299c651c6..95eb6be2e7 100644 --- a/assets/js/271.da400853.js +++ b/assets/js/271.d0c6e513.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[271],{1251:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"philipshuesensor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#philipshuesensor"}},[e._v("#")]),e._v(" PhilipsHueSensor")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Home Control)")]),e._v(" "),t("p",[e._v("The PhilipsHueSensor component provides an interface to the motion sensor and dimmer switch of the "),t("a",{attrs:{href:"https://www2.meethue.com/en-us",target:"_blank",rel:"noopener noreferrer"}},[e._v("Philips Hue smart lighting system"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("One instance of this plugin can fire events for one specified Philips Hue sensor.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(826),alt:"Screenshot: PhilipsHue plugin",title:"Screenshot: PhilipsHue plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A Philips Hue hardware Bridge")]),e._v(" "),t("li",[e._v("A Philips Hue Sensor (a dimmer switch or a motion sensor)")])]),e._v(" "),t("h2",{attrs:{id:"initial-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#initial-setup"}},[e._v("#")]),e._v(" Initial Setup")]),e._v(" "),t("p",[e._v("See the PhilipsHue actuator plugin documentation for detailed instructions.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("currentState [string]:")]),e._v(" This port periodically returns the state the target sensor. The polling rate can be set via the updateRate property (in milliseconds).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("statusChanged:")]),e._v(" fires when the configure sensor changes its status (buttons pressed, motion detected, battery charge, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("tick:")]),e._v(" fires for each tick (depends on updateRate property)")]),e._v(" "),t("li",[t("strong",[e._v("motionDetected:")]),e._v(" fires once presence is detected (motion sensor only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonOn:")]),e._v(" fires if the first button is pressed (dimmer switch only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonBrighter:")]),e._v(" fires if the second button is pressed (dimmer switch only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonDarker:")]),e._v(" fires if the third button is pressed (dimmer switch only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonOff:")]),e._v(" fires if the last button is pressed (dimmer switch only)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("apiKey [string]:")]),e._v(" API key for the REST API of the bridge")]),e._v(" "),t("li",[t("strong",[e._v("ip [string]:")]),e._v(" IP address of the bridge")]),e._v(" "),t("li",[t("strong",[e._v("target [string]:")]),e._v(" sensor that should be used as input in the form "),t("code",[e._v("/sensors/")])]),e._v(" "),t("li",[t("strong",[e._v("updateRate [integer]:")]),e._v(" polling rate for "),t("strong",[e._v("currentState")]),e._v(" and the event triggers\n"),t("ul",[t("li",[e._v("value in milliseconds")]),e._v(" "),t("li",[e._v("the lower this value is, the faster you will be notified of changes")]),e._v(" "),t("li",[e._v("don’t set this too low or the bridge might slow down (500 milliseconds is a good compromise)")])])])])])}),[],!1,null,null,null);t.default=s.exports},826:function(e,t){e.exports="data:image/png;base64,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"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[271],{1254:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"philipshuesensor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#philipshuesensor"}},[e._v("#")]),e._v(" PhilipsHueSensor")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Home Control)")]),e._v(" "),t("p",[e._v("The PhilipsHueSensor component provides an interface to the motion sensor and dimmer switch of the "),t("a",{attrs:{href:"https://www2.meethue.com/en-us",target:"_blank",rel:"noopener noreferrer"}},[e._v("Philips Hue smart lighting system"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("One instance of this plugin can fire events for one specified Philips Hue sensor.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(829),alt:"Screenshot: PhilipsHue plugin",title:"Screenshot: PhilipsHue plugin"}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("A Philips Hue hardware Bridge")]),e._v(" "),t("li",[e._v("A Philips Hue Sensor (a dimmer switch or a motion sensor)")])]),e._v(" "),t("h2",{attrs:{id:"initial-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#initial-setup"}},[e._v("#")]),e._v(" Initial Setup")]),e._v(" "),t("p",[e._v("See the PhilipsHue actuator plugin documentation for detailed instructions.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("currentState [string]:")]),e._v(" This port periodically returns the state the target sensor. The polling rate can be set via the updateRate property (in milliseconds).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("statusChanged:")]),e._v(" fires when the configure sensor changes its status (buttons pressed, motion detected, battery charge, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("tick:")]),e._v(" fires for each tick (depends on updateRate property)")]),e._v(" "),t("li",[t("strong",[e._v("motionDetected:")]),e._v(" fires once presence is detected (motion sensor only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonOn:")]),e._v(" fires if the first button is pressed (dimmer switch only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonBrighter:")]),e._v(" fires if the second button is pressed (dimmer switch only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonDarker:")]),e._v(" fires if the third button is pressed (dimmer switch only)")]),e._v(" "),t("li",[t("strong",[e._v("dimmerButtonOff:")]),e._v(" fires if the last button is pressed (dimmer switch only)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("apiKey [string]:")]),e._v(" API key for the REST API of the bridge")]),e._v(" "),t("li",[t("strong",[e._v("ip [string]:")]),e._v(" IP address of the bridge")]),e._v(" "),t("li",[t("strong",[e._v("target [string]:")]),e._v(" sensor that should be used as input in the form "),t("code",[e._v("/sensors/")])]),e._v(" "),t("li",[t("strong",[e._v("updateRate [integer]:")]),e._v(" polling rate for "),t("strong",[e._v("currentState")]),e._v(" and the event triggers\n"),t("ul",[t("li",[e._v("value in milliseconds")]),e._v(" "),t("li",[e._v("the lower this value is, the faster you will be notified of changes")]),e._v(" "),t("li",[e._v("don’t set this too low or the bridge might slow down (500 milliseconds is a good compromise)")])])])])])}),[],!1,null,null,null);t.default=s.exports},829:function(e,t){e.exports="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/272.024b082b.js b/assets/js/272.59279dbe.js similarity index 94% rename from assets/js/272.024b082b.js rename to assets/js/272.59279dbe.js index e0cf3dffc6..b96b676467 100644 --- a/assets/js/272.024b082b.js +++ b/assets/js/272.59279dbe.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[272],{1254:function(e,t,o){"use strict";o.r(t);var n=o(2),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"platform-analog-in"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#platform-analog-in"}},[e._v("#")]),e._v(" Platform Analog In")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Personal Platform)")]),e._v(" "),t("p",[e._v("The PlatformAnalogIn component is a sensor which is used in combination with the analog inputs of the personal platform. The component provides two output ports which correlate to the inputs IN1 and IN2 of the platform. The component can be set up to sample the inputs periodically or upon an incoming event. Both inputs can be used for voltage and resistance measurement.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(830),alt:"Screenshot: PlatformAnalogIn plugin",title:"Screenshot: PlatformAnalogIn plugin"}})]),e._v(" "),t("p",[e._v("Platform AnalogIn plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This component requires the Core CIM (CIM Id: 0x0602) of the AsTeRICS Personal Platform.")]),e._v(" "),t("p",[e._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),e._v(" "),t("p",[e._v("The AsteRICS Personal Platform")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1 to in2 [integer]:")]),e._v(" Each of these output port corresponds to one input of the ADC CIM. The measured values are forwarded directly from the CIM thus corresponding to the description given in the CIM specification. Depending on the type of connected sensor the values either correspond to a voltage or a resistive value.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("adcSampleTrigger:")]),e._v(" An incoming event on this port will cause the ADC CIM to sample data on its inputs. This event will only take effect if the periodic_update property is set to 0.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("periodicUpdate [integer]:")]),e._v(" This property defines the time between data sampling requests to the ADC CIM (in milliseconds). The software component will send requests to the CIM in the given intervals. Due to current limitations of the ADC CIM it is recommended to use time intervals not lower than 50 milliseconds (20 samples per second).")]),e._v(" "),t("li",[t("strong",[e._v("activateInput1 to activateInput2 [Boolean]:")]),e._v(" These properties correspond the CIM’s ADC inputs IN1 to IN8, if the property is true, the corresponding output port of the software component will send the sampled data.")])])])}),[],!1,null,null,null);t.default=r.exports},830:function(e,t,o){e.exports=o.p+"assets/img/platformanalogin.b5aea034.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[272],{1257:function(e,t,o){"use strict";o.r(t);var n=o(2),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"platform-analog-in"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#platform-analog-in"}},[e._v("#")]),e._v(" Platform Analog In")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Personal Platform)")]),e._v(" "),t("p",[e._v("The PlatformAnalogIn component is a sensor which is used in combination with the analog inputs of the personal platform. The component provides two output ports which correlate to the inputs IN1 and IN2 of the platform. The component can be set up to sample the inputs periodically or upon an incoming event. Both inputs can be used for voltage and resistance measurement.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(833),alt:"Screenshot: PlatformAnalogIn plugin",title:"Screenshot: PlatformAnalogIn plugin"}})]),e._v(" "),t("p",[e._v("Platform AnalogIn plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("This component requires the Core CIM (CIM Id: 0x0602) of the AsTeRICS Personal Platform.")]),e._v(" "),t("p",[e._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),e._v(" "),t("p",[e._v("The AsteRICS Personal Platform")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("in1 to in2 [integer]:")]),e._v(" Each of these output port corresponds to one input of the ADC CIM. The measured values are forwarded directly from the CIM thus corresponding to the description given in the CIM specification. Depending on the type of connected sensor the values either correspond to a voltage or a resistive value.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("adcSampleTrigger:")]),e._v(" An incoming event on this port will cause the ADC CIM to sample data on its inputs. This event will only take effect if the periodic_update property is set to 0.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("periodicUpdate [integer]:")]),e._v(" This property defines the time between data sampling requests to the ADC CIM (in milliseconds). The software component will send requests to the CIM in the given intervals. Due to current limitations of the ADC CIM it is recommended to use time intervals not lower than 50 milliseconds (20 samples per second).")]),e._v(" "),t("li",[t("strong",[e._v("activateInput1 to activateInput2 [Boolean]:")]),e._v(" These properties correspond the CIM’s ADC inputs IN1 to IN8, if the property is true, the corresponding output port of the software component will send the sampled data.")])])])}),[],!1,null,null,null);t.default=r.exports},833:function(e,t,o){e.exports=o.p+"assets/img/platformanalogin.b5aea034.jpg"}}]); \ No newline at end of file diff --git a/assets/js/273.1f543121.js b/assets/js/273.6891dd84.js similarity index 93% rename from assets/js/273.1f543121.js rename to assets/js/273.6891dd84.js index 9f2faa87b7..e6b52b242b 100644 --- a/assets/js/273.1f543121.js +++ b/assets/js/273.6891dd84.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[273],{1255:function(t,e,i){"use strict";i.r(e);var n=i(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"platform-digital-in"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-digital-in"}},[t._v("#")]),t._v(" Platform Digital In")]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Personal Platform)")]),t._v(" "),e("p",[t._v("The PlatformDigitalIn component provides an interface to read the digital inputs of the AsTeRICS Personal Platform. On state changes of the connected signals (transitions to high or low level), the component generates corresponding trigger events.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(831),alt:"Screenshot: PlatformDigitalIn plugin",title:"Screenshot: PlatformDigitalIn plugin"}})]),t._v(" "),e("p",[t._v("PlatformDigitalIn plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the Core CIM (CIM Id: 0x0602) of the AsTeRICS Personal Platform.")]),t._v(" "),e("p",[t._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),t._v(" "),e("p",[t._v("The AsteRICS Personal Platform")]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in1High to in3High:")]),t._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to high level, an event will be raised on the corresponding port.")]),t._v(" "),e("li",[e("strong",[t._v("in1Low to in3Low:")]),t._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to low level, an event will be raised on the corresponding port.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("activateEventIn1 to activateEventIn3 [Boolean]:")]),t._v(" These properties declare for each port whether or not a signal transition on the actual input port should result in an event being triggered in the ARE. If a property is set true for one input, it will raise events on signal transitions, if it is set to false it will not.")])])])}),[],!1,null,null,null);e.default=r.exports},831:function(t,e,i){t.exports=i.p+"assets/img/platformdigitalin.f8f31a4b.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[273],{1258:function(t,e,i){"use strict";i.r(e);var n=i(2),r=Object(n.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"platform-digital-in"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#platform-digital-in"}},[t._v("#")]),t._v(" Platform Digital In")]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: Personal Platform)")]),t._v(" "),e("p",[t._v("The PlatformDigitalIn component provides an interface to read the digital inputs of the AsTeRICS Personal Platform. On state changes of the connected signals (transitions to high or low level), the component generates corresponding trigger events.")]),t._v(" "),e("p",[e("img",{attrs:{src:i(834),alt:"Screenshot: PlatformDigitalIn plugin",title:"Screenshot: PlatformDigitalIn plugin"}})]),t._v(" "),e("p",[t._v("PlatformDigitalIn plugin")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("This component requires the Core CIM (CIM Id: 0x0602) of the AsTeRICS Personal Platform.")]),t._v(" "),e("p",[t._v("![The AsteRICS Personal Platform (./preliminary version)](./img/personalplatform.jpg “The AsteRICS Personal Platform (preliminary version)”)")]),t._v(" "),e("p",[t._v("The AsteRICS Personal Platform")]),t._v(" "),e("h2",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("in1High to in3High:")]),t._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to high level, an event will be raised on the corresponding port.")]),t._v(" "),e("li",[e("strong",[t._v("in1Low to in3Low:")]),t._v(" Each of these event ports is linked to one input port, if the device connection to this input port delivers a signal which changes to low level, an event will be raised on the corresponding port.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("activateEventIn1 to activateEventIn3 [Boolean]:")]),t._v(" These properties declare for each port whether or not a signal transition on the actual input port should result in an event being triggered in the ARE. If a property is set true for one input, it will raise events on signal transitions, if it is set to false it will not.")])])])}),[],!1,null,null,null);e.default=r.exports},834:function(t,e,i){t.exports=i.p+"assets/img/platformdigitalin.f8f31a4b.jpg"}}]); \ No newline at end of file diff --git a/assets/js/274.2270b991.js b/assets/js/274.f6c7c4e9.js similarity index 97% rename from assets/js/274.2270b991.js rename to assets/js/274.f6c7c4e9.js index ae99a40c5a..3ff2d1cb38 100644 --- a/assets/js/274.2270b991.js +++ b/assets/js/274.f6c7c4e9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[274],{1260:function(t,e,s){"use strict";s.r(e);var r=s(2),i=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This plugin reads a whole .csv file and sends the seperate lines as strings to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(838),alt:"Screenshot: ReadCSV plugin",title:"Screenshot: ReadCSV plugin"}})]),t._v(" "),e("p",[t._v("ReadCSV")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("read:")]),t._v(" Opens a file-chooser menu to select a csv-file which should be opened and read. The file is read immideately after selection (attention: this blocks the ARE model execution until the file contents are read completely !)")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Output[string]:")]),t._v(" The port sends the individual lines of the file as strings. An example for the string is: “data1;data2;data3”. To seperate the string into individual strin values, the StringSplitter can be used.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FilePath[string]:")]),t._v(" Defines the default Path were the file is located. (TBD: add property for default FileName and line-by-line read option)")])])])}),[],!1,null,null,null);e.default=i.exports},838:function(t,e,s){t.exports=s.p+"assets/img/readcsv.fc76a472.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[274],{1262:function(t,e,s){"use strict";s.r(e);var r=s(2),i=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This plugin reads a whole .csv file and sends the seperate lines as strings to the output port.")]),t._v(" "),e("p",[e("img",{attrs:{src:s(838),alt:"Screenshot: ReadCSV plugin",title:"Screenshot: ReadCSV plugin"}})]),t._v(" "),e("p",[t._v("ReadCSV")]),t._v(" "),e("h2",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("read:")]),t._v(" Opens a file-chooser menu to select a csv-file which should be opened and read. The file is read immideately after selection (attention: this blocks the ARE model execution until the file contents are read completely !)")])]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Output[string]:")]),t._v(" The port sends the individual lines of the file as strings. An example for the string is: “data1;data2;data3”. To seperate the string into individual strin values, the StringSplitter can be used.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FilePath[string]:")]),t._v(" Defines the default Path were the file is located. (TBD: add property for default FileName and line-by-line read option)")])])])}),[],!1,null,null,null);e.default=i.exports},838:function(t,e,s){t.exports=s.p+"assets/img/readcsv.fc76a472.png"}}]); \ No newline at end of file diff --git a/assets/js/275.71353893.js b/assets/js/275.ce2fe009.js similarity index 91% rename from assets/js/275.71353893.js rename to assets/js/275.ce2fe009.js index 253f9186eb..53a97858d0 100644 --- a/assets/js/275.71353893.js +++ b/assets/js/275.ce2fe009.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[275],{1261:function(t,e,s){"use strict";s.r(e);var r=s(2),a=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This plugin reads an .edf file and sends the data to its output ports")]),t._v(" "),e("p",[e("img",{attrs:{src:s(839),alt:"Screenshot: ReadEDF plugin",title:"Screenshot: ReadEDF plugin"}})]),t._v(" "),e("p",[t._v("ReadEDF")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("CH1 - CH8[double]:")]),t._v(" these ports send the samples of the recorded signals.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FileName[string]:")]),t._v(" specifies the name of the file, in which the data has been recorded "),e("strong",[t._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);e.default=a.exports},839:function(t,e,s){t.exports=s.p+"assets/img/readedf.a50c4602.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[275],{1261:function(t,e,s){"use strict";s.r(e);var r=s(2),a=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"frontmatter-title"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[t._v("#")]),t._v(" "+t._s(t.$frontmatter.title))]),t._v(" "),e("p",[t._v("Component Type: Sensor (Subcategory: File System)")]),t._v(" "),e("p",[t._v("This plugin reads an .edf file and sends the data to its output ports")]),t._v(" "),e("p",[e("img",{attrs:{src:s(837),alt:"Screenshot: ReadEDF plugin",title:"Screenshot: ReadEDF plugin"}})]),t._v(" "),e("p",[t._v("ReadEDF")]),t._v(" "),e("h2",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("CH1 - CH8[double]:")]),t._v(" these ports send the samples of the recorded signals.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("FileName[string]:")]),t._v(" specifies the name of the file, in which the data has been recorded "),e("strong",[t._v("Supports value suggestions from ARE (dynamic property)")])])])])}),[],!1,null,null,null);e.default=a.exports},837:function(t,e,s){t.exports=s.p+"assets/img/readedf.a50c4602.png"}}]); \ No newline at end of file diff --git a/assets/js/276.8c380b15.js b/assets/js/276.2f59e433.js similarity index 92% rename from assets/js/276.8c380b15.js rename to assets/js/276.2f59e433.js index a94760b6b7..075df4e41b 100644 --- a/assets/js/276.8c380b15.js +++ b/assets/js/276.2f59e433.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[276],{1262:function(e,t,o){"use strict";o.r(t);var r=o(2),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Simulation)")]),e._v(" "),t("p",[e._v("The SignalGenerator component can generate several output waveforms for component tests or other purposes like timing or event generation. Available waveforms are sine, sawtooth, rectangle and random signal data.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(840),alt:"Screenshot: SignalGenerator plugin",title:"Screenshot: SignalGenerator plugin"}})]),e._v(" "),t("p",[e._v("SignalGenerator plugin")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("out [double]:")]),e._v(" The generated waveform is provided at this port.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendInterval [integer]:")]),e._v(" This value specifies the output rate in milliseconds. Please note that the output rate has to be fast enough to assemble the selected output frequency. For example if a frequency of 2 Hz is set, the send_interval should not be greater than 125 milliseconds according to the sample theorem.")]),e._v(" "),t("li",[t("strong",[e._v("waveForm [integer]:")]),e._v(" The waveform types random, sine, sawtooth and rectangle can be selected.")]),e._v(" "),t("li",[t("strong",[e._v("frequency [double]:")]),e._v(" The frequency of the output signal in Hertz.")]),e._v(" "),t("li",[t("strong",[e._v("amplitude [double]:")]),e._v(" The amplitude of the output signal.")]),e._v(" "),t("li",[t("strong",[e._v("phaseShift [double]:")]),e._v(" The output signal is phase-shifted by this value (in milliseconds).")]),e._v(" "),t("li",[t("strong",[e._v("offset [double]:")]),e._v(" Amplitude-offset of the output signal (this value is added to each generated waveform value).")])])])}),[],!1,null,null,null);t.default=a.exports},840:function(e,t,o){e.exports=o.p+"assets/img/signalgenerator.3806148b.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[276],{1265:function(e,t,o){"use strict";o.r(t);var r=o(2),a=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Simulation)")]),e._v(" "),t("p",[e._v("The SignalGenerator component can generate several output waveforms for component tests or other purposes like timing or event generation. Available waveforms are sine, sawtooth, rectangle and random signal data.")]),e._v(" "),t("p",[t("img",{attrs:{src:o(843),alt:"Screenshot: SignalGenerator plugin",title:"Screenshot: SignalGenerator plugin"}})]),e._v(" "),t("p",[e._v("SignalGenerator plugin")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("out [double]:")]),e._v(" The generated waveform is provided at this port.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("sendInterval [integer]:")]),e._v(" This value specifies the output rate in milliseconds. Please note that the output rate has to be fast enough to assemble the selected output frequency. For example if a frequency of 2 Hz is set, the send_interval should not be greater than 125 milliseconds according to the sample theorem.")]),e._v(" "),t("li",[t("strong",[e._v("waveForm [integer]:")]),e._v(" The waveform types random, sine, sawtooth and rectangle can be selected.")]),e._v(" "),t("li",[t("strong",[e._v("frequency [double]:")]),e._v(" The frequency of the output signal in Hertz.")]),e._v(" "),t("li",[t("strong",[e._v("amplitude [double]:")]),e._v(" The amplitude of the output signal.")]),e._v(" "),t("li",[t("strong",[e._v("phaseShift [double]:")]),e._v(" The output signal is phase-shifted by this value (in milliseconds).")]),e._v(" "),t("li",[t("strong",[e._v("offset [double]:")]),e._v(" Amplitude-offset of the output signal (this value is added to each generated waveform value).")])])])}),[],!1,null,null,null);t.default=a.exports},843:function(e,t,o){e.exports=o.p+"assets/img/signalgenerator.3806148b.jpg"}}]); \ No newline at end of file diff --git a/assets/js/277.7bd0b69e.js b/assets/js/277.ba1f5b1a.js similarity index 94% rename from assets/js/277.7bd0b69e.js rename to assets/js/277.ba1f5b1a.js index 8667df3bc3..2a361db876 100644 --- a/assets/js/277.7bd0b69e.js +++ b/assets/js/277.ba1f5b1a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[277],{1264:function(e,t,i){"use strict";i.r(t);var o=i(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"slider"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#slider"}},[e._v("#")]),e._v(" Slider")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("The Slider component generates a slider with adjustable range of values and size on the ARE desktop. This slider can be used to change important parameters of the model during runtime. Furthermore, an incoming signal can be adjusted by the slider component, using a gain factor property.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(843),alt:"Screenshot: Slider plugin",title:"Screenshot: Slider plugin"}})]),e._v(" "),t("p",[e._v("Slider plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("setValue [integer]:")]),e._v(" Sets the slider position to the incoming value. Note that this value is not propagated to the output port (to avoid loops).")]),e._v(" "),t("li",[t("strong",[e._v("in [double]:")]),e._v(" input port for an incoming signal which can be amplified by the slider component")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("value [integer]:")]),e._v(" This port provides the currently selected slider value (position). Only integer values are possible.")]),e._v(" "),t("li",[t("strong",[e._v("out [double]:")]),e._v(" The amplified (or attenuated) input signal (out = in * gain * slider value)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("min [integer]:")]),e._v(" The minimum value of the slider range")]),e._v(" "),t("li",[t("strong",[e._v("max [integer]:")]),e._v(" The maximum value of the slider range")]),e._v(" "),t("li",[t("strong",[e._v("default [integer]:")]),e._v(" The defualt position of the slider at model startup (this value is not automatically sent to the port at model startup.")]),e._v(" "),t("li",[t("strong",[e._v("gain [double]:")]),e._v(" The amplification value for an (optional) incoming signal (out = in * gain * slider value)")]),e._v(" "),t("li",[t("strong",[e._v("caption [string]:")]),e._v(" A label for the slider")]),e._v(" "),t("li",[t("strong",[e._v("majorTickspacing [integer]:")]),e._v(" Coarse sections for the slider value captions")]),e._v(" "),t("li",[t("strong",[e._v("minorTickspacing [integer]:")]),e._v(" Fine sections for the slider value captions")]),e._v(" "),t("li",[t("strong",[e._v("alignment [integer, combobox selection]:")]),e._v(" Slider orientation in the GUI, can be horizontal or vertical")]),e._v(" "),t("li",[t("strong",[e._v("fontSize [integer]:")]),e._v(" Font size of the caption")]),e._v(" "),t("li",[t("strong",[e._v("storeValue [boolean]:")]),e._v(" if the storeValue property is enabled, the current value of the slider position is stored and restored when the model is started next time. Note that this overrides the defaultValue property.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=r.exports},843:function(e,t,i){e.exports=i.p+"assets/img/slider.5dd042d2.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[277],{1267:function(e,t,i){"use strict";i.r(t);var o=i(2),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"slider"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#slider"}},[e._v("#")]),e._v(" Slider")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("The Slider component generates a slider with adjustable range of values and size on the ARE desktop. This slider can be used to change important parameters of the model during runtime. Furthermore, an incoming signal can be adjusted by the slider component, using a gain factor property.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(846),alt:"Screenshot: Slider plugin",title:"Screenshot: Slider plugin"}})]),e._v(" "),t("p",[e._v("Slider plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("setValue [integer]:")]),e._v(" Sets the slider position to the incoming value. Note that this value is not propagated to the output port (to avoid loops).")]),e._v(" "),t("li",[t("strong",[e._v("in [double]:")]),e._v(" input port for an incoming signal which can be amplified by the slider component")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("value [integer]:")]),e._v(" This port provides the currently selected slider value (position). Only integer values are possible.")]),e._v(" "),t("li",[t("strong",[e._v("out [double]:")]),e._v(" The amplified (or attenuated) input signal (out = in * gain * slider value)")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("min [integer]:")]),e._v(" The minimum value of the slider range")]),e._v(" "),t("li",[t("strong",[e._v("max [integer]:")]),e._v(" The maximum value of the slider range")]),e._v(" "),t("li",[t("strong",[e._v("default [integer]:")]),e._v(" The defualt position of the slider at model startup (this value is not automatically sent to the port at model startup.")]),e._v(" "),t("li",[t("strong",[e._v("gain [double]:")]),e._v(" The amplification value for an (optional) incoming signal (out = in * gain * slider value)")]),e._v(" "),t("li",[t("strong",[e._v("caption [string]:")]),e._v(" A label for the slider")]),e._v(" "),t("li",[t("strong",[e._v("majorTickspacing [integer]:")]),e._v(" Coarse sections for the slider value captions")]),e._v(" "),t("li",[t("strong",[e._v("minorTickspacing [integer]:")]),e._v(" Fine sections for the slider value captions")]),e._v(" "),t("li",[t("strong",[e._v("alignment [integer, combobox selection]:")]),e._v(" Slider orientation in the GUI, can be horizontal or vertical")]),e._v(" "),t("li",[t("strong",[e._v("fontSize [integer]:")]),e._v(" Font size of the caption")]),e._v(" "),t("li",[t("strong",[e._v("storeValue [boolean]:")]),e._v(" if the storeValue property is enabled, the current value of the slider position is stored and restored when the model is started next time. Note that this overrides the defaultValue property.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=r.exports},846:function(e,t,i){e.exports=i.p+"assets/img/slider.5dd042d2.jpg"}}]); \ No newline at end of file diff --git a/assets/js/278.770a4467.js b/assets/js/278.5d09ebce.js similarity index 94% rename from assets/js/278.770a4467.js rename to assets/js/278.5d09ebce.js index a8308eaa18..3c99da0df1 100644 --- a/assets/js/278.770a4467.js +++ b/assets/js/278.5d09ebce.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[278],{1268:function(e,t,s){"use strict";s.r(t);var r=s(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("Similar to the Keyboard Hook component, this component provides access to keystrokes coming from a standard keyboard or injected via software. The difference to the Keyboard Hook is that the Text Field Reader opens a GUI element with a text input filed and processes key input only from this text field. The keycodes of the pressed keys and accumulated words (multiple keys separated by ) are provided at the output ports of this component. Possible applications include triggering functions by keyboard input or remapping keys to other keycodes.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(849),alt:"Screenshot: TextfieldReader plugin",title:"Screenshot: TextfieldReader plugin"}})]),e._v(" "),t("p",[e._v("TextfieldReader plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A keyboard which generates keystrokes or a software component which injects keystrokes into the operating system?s message queue.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keys [integer]:")]),e._v(" This port sends the virtual keycode of the last pressed key as an integer value.")]),e._v(" "),t("li",[t("strong",[e._v("words [string]:")]),e._v(" This ports accumulates keystrokes and sends them as a string as soon as a blank separator (space key) appears in the key input stream.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("recognizedCommand1 - recognizedCommand7:")]),e._v(" These event ports fire an event if one of seven command strings has been detected in the current input stream of keys.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("command1 [string] - command7 [string]:")]),e._v(" Seven string properties to specify command strings. The component looks for these command strings in the input stream of keystrokes. If a command string matches, the corresponding event trigger port is raised. This can be useful for example to define voice commands which should trigger certain actions in other ARE plugins.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=o.exports},849:function(e,t,s){e.exports=s.p+"assets/img/textfieldreader.3a481d00.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[278],{1269:function(e,t,s){"use strict";s.r(t);var r=s(2),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"frontmatter-title"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#frontmatter-title"}},[e._v("#")]),e._v(" "+e._s(e.$frontmatter.title))]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Graphical User Interface)")]),e._v(" "),t("p",[e._v("Similar to the Keyboard Hook component, this component provides access to keystrokes coming from a standard keyboard or injected via software. The difference to the Keyboard Hook is that the Text Field Reader opens a GUI element with a text input filed and processes key input only from this text field. The keycodes of the pressed keys and accumulated words (multiple keys separated by ) are provided at the output ports of this component. Possible applications include triggering functions by keyboard input or remapping keys to other keycodes.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(848),alt:"Screenshot: TextfieldReader plugin",title:"Screenshot: TextfieldReader plugin"}})]),e._v(" "),t("p",[e._v("TextfieldReader plugin")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A keyboard which generates keystrokes or a software component which injects keystrokes into the operating system?s message queue.")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("keys [integer]:")]),e._v(" This port sends the virtual keycode of the last pressed key as an integer value.")]),e._v(" "),t("li",[t("strong",[e._v("words [string]:")]),e._v(" This ports accumulates keystrokes and sends them as a string as soon as a blank separator (space key) appears in the key input stream.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("recognizedCommand1 - recognizedCommand7:")]),e._v(" These event ports fire an event if one of seven command strings has been detected in the current input stream of keys.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("command1 [string] - command7 [string]:")]),e._v(" Seven string properties to specify command strings. The component looks for these command strings in the input stream of keystrokes. If a command string matches, the corresponding event trigger port is raised. This can be useful for example to define voice commands which should trigger certain actions in other ARE plugins.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" If selected, the GUI of this component will be displayed - if not, the GUI will be hidden and disabled.")])])])}),[],!1,null,null,null);t.default=o.exports},848:function(e,t,s){e.exports=s.p+"assets/img/textfieldreader.3a481d00.jpg"}}]); \ No newline at end of file diff --git a/assets/js/279.cabaa4bf.js b/assets/js/279.3d06e9ea.js similarity index 96% rename from assets/js/279.cabaa4bf.js rename to assets/js/279.3d06e9ea.js index da47943340..9de2ac5791 100644 --- a/assets/js/279.cabaa4bf.js +++ b/assets/js/279.3d06e9ea.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[279],{1267:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"timer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#timer"}},[e._v("#")]),e._v(" Timer")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Simulation)")]),e._v(" "),t("p",[e._v("The timer component can measure time in milliseconds, provide current time on an output port and trigger events when a specified time period has passed. It can be used to influence other features (e.g. to provide acceleration) or to enable dwell selection, for example clicking when a certain time has passed.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(848),alt:"Screenshot: Timer plugin",title:"Screenshot: Timer plugin"}})]),e._v(" "),t("p",[e._v("Timer plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("period [integer]:")]),e._v(" The number of milliseconds the timer period property is set to.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("time [integer]:")]),e._v(" The number of milliseconds which have passed since the timer has been started.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" An incoming event starts the timer.")]),e._v(" "),t("li",[t("strong",[e._v("stop:")]),e._v(" An incoming event stops the timer (pause, the current time value is not reset to 0).")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" An incoming event resets the time value to 0 (but does not stop the timer).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("periodFinished:")]),e._v(" This event is triggered when the given time has passed.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mode [integer]:")]),e._v(" This property selects one of several possible modes of operation of the timer:\n"),t("ul",[t("li",[t("em",[e._v("“one shot”:")]),e._v(" The timer runs once from 0 to the specified time, and then stops.")]),e._v(" "),t("li",[t("em",[e._v("“repeat n times”:")]),e._v(" The timer completes the time period several times (the number is selected with the repeat counter property).")]),e._v(" "),t("li",[t("em",[e._v("“endless loop”:")]),e._v(" the timer completes the time period until it is stopped by an event at the stop listener port.")]),e._v(" "),t("li",[t("em",[e._v("“once and continue time output”:")]),e._v(" The time period is completed once, the timer is not stopped but continues to send the last time value (this is useful to generate increasing values with persisting maximum value, e.g. for utilization as accelerated speed value).")]),e._v(" "),t("li",[t("em",[e._v("“measure time between start and stop”:")]),e._v(" The timer sends the time passed from start to stop events to the output port (when stop was received).")])])]),e._v(" "),t("li",[t("strong",[e._v("repeatCounter [integer]:")]),e._v(' The number of periods to finish for the "repeat n times " mode.')]),e._v(" "),t("li",[t("strong",[e._v("timePeriod (ms) [integer]:")]),e._v(" The time period covered by this counter in milliseconds.")]),e._v(" "),t("li",[t("strong",[e._v("resolution (ms) [integer]:")]),e._v(" The update rate of the timer in milliseconds. This value defines how often the current time value is updated and sent to the output port. It thereby defines the accuracy for the timer.")]),e._v(" "),t("li",[t("strong",[e._v("waitPeriod (ms) [integer]:")]),e._v(" This value specifies how long the timer is bypassed before it actually starts (after receiving a start event).")]),e._v(" "),t("li",[t("strong",[e._v("autostart [boolean]:")]),e._v(" This property defines if the timer will be started automatically together with the model (true) or if it will be started by an event (false).")])])])}),[],!1,null,null,null);t.default=s.exports},848:function(e,t,i){e.exports=i.p+"assets/img/timer.1ce9db2c.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[279],{1268:function(e,t,i){"use strict";i.r(t);var r=i(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"timer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#timer"}},[e._v("#")]),e._v(" Timer")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Simulation)")]),e._v(" "),t("p",[e._v("The timer component can measure time in milliseconds, provide current time on an output port and trigger events when a specified time period has passed. It can be used to influence other features (e.g. to provide acceleration) or to enable dwell selection, for example clicking when a certain time has passed.")]),e._v(" "),t("p",[t("img",{attrs:{src:i(847),alt:"Screenshot: Timer plugin",title:"Screenshot: Timer plugin"}})]),e._v(" "),t("p",[e._v("Timer plugin")]),e._v(" "),t("h2",{attrs:{id:"input-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[e._v("#")]),e._v(" Input Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("period [integer]:")]),e._v(" The number of milliseconds the timer period property is set to.")])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("time [integer]:")]),e._v(" The number of milliseconds which have passed since the timer has been started.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("start:")]),e._v(" An incoming event starts the timer.")]),e._v(" "),t("li",[t("strong",[e._v("stop:")]),e._v(" An incoming event stops the timer (pause, the current time value is not reset to 0).")]),e._v(" "),t("li",[t("strong",[e._v("reset:")]),e._v(" An incoming event resets the time value to 0 (but does not stop the timer).")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("periodFinished:")]),e._v(" This event is triggered when the given time has passed.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("mode [integer]:")]),e._v(" This property selects one of several possible modes of operation of the timer:\n"),t("ul",[t("li",[t("em",[e._v("“one shot”:")]),e._v(" The timer runs once from 0 to the specified time, and then stops.")]),e._v(" "),t("li",[t("em",[e._v("“repeat n times”:")]),e._v(" The timer completes the time period several times (the number is selected with the repeat counter property).")]),e._v(" "),t("li",[t("em",[e._v("“endless loop”:")]),e._v(" the timer completes the time period until it is stopped by an event at the stop listener port.")]),e._v(" "),t("li",[t("em",[e._v("“once and continue time output”:")]),e._v(" The time period is completed once, the timer is not stopped but continues to send the last time value (this is useful to generate increasing values with persisting maximum value, e.g. for utilization as accelerated speed value).")]),e._v(" "),t("li",[t("em",[e._v("“measure time between start and stop”:")]),e._v(" The timer sends the time passed from start to stop events to the output port (when stop was received).")])])]),e._v(" "),t("li",[t("strong",[e._v("repeatCounter [integer]:")]),e._v(' The number of periods to finish for the "repeat n times " mode.')]),e._v(" "),t("li",[t("strong",[e._v("timePeriod (ms) [integer]:")]),e._v(" The time period covered by this counter in milliseconds.")]),e._v(" "),t("li",[t("strong",[e._v("resolution (ms) [integer]:")]),e._v(" The update rate of the timer in milliseconds. This value defines how often the current time value is updated and sent to the output port. It thereby defines the accuracy for the timer.")]),e._v(" "),t("li",[t("strong",[e._v("waitPeriod (ms) [integer]:")]),e._v(" This value specifies how long the timer is bypassed before it actually starts (after receiving a start event).")]),e._v(" "),t("li",[t("strong",[e._v("autostart [boolean]:")]),e._v(" This property defines if the timer will be started automatically together with the model (true) or if it will be started by an event (false).")])])])}),[],!1,null,null,null);t.default=s.exports},847:function(e,t,i){e.exports=i.p+"assets/img/timer.1ce9db2c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/28.a5924173.js b/assets/js/28.fb4e1471.js similarity index 99% rename from assets/js/28.a5924173.js rename to assets/js/28.fb4e1471.js index de8c69312f..f8a382a4fe 100644 --- a/assets/js/28.a5924173.js +++ b/assets/js/28.fb4e1471.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{1050:function(e,t,i){"use strict";i.r(t);var a=i(2),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"grid-appearance-and-layout"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grid-appearance-and-layout"}},[e._v("#")]),e._v(" Grid appearance and layout")]),e._v(" "),t("p",[t("strong",[e._v("Videos on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Iw605fb85bs&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=12&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Layout options"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=X6YrWJW2ZoM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=21&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Collect elements"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=t0FWZcM9TMg&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=22&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Prediction elements"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("This chapter is about a grid’s layout and appearance and how to edit it:")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html#adding-elements-and-layout-options"}},[e._v("Adding elements and change the layout")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html#editing-grid-elements"}},[e._v("Editing grid elements menu")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html#edit-grid-item-modal"}},[e._v("Edit modal")]),e._v(": changing label and image")],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"adding-elements-and-layout-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-elements-and-layout-options"}},[e._v("#")]),e._v(" Adding elements and layout options")]),e._v(" "),t("p",[e._v("In the "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#edit-view"}},[e._v("Edit view (“Editing on”)")]),e._v(" the following menu opens on a click on “more”:")],1),e._v(" "),t("p",[t("img",{attrs:{src:i(509),alt:"edit view - more menu"}}),e._v(" "),t("em",[e._v("Fig. 1: Edit view - menu “more”")])]),e._v(" "),t("p",[e._v("These are the actions to select in the menu:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("New → New Element")]),e._v(": creates a normal new element, opening a dialog where label and image can be defined")]),e._v(" "),t("li",[t("strong",[e._v("New → Many new elements")]),e._v(": creates multiple new normal elements at once, opening a dialog where multiple elements can be defined and inserted into the grid")]),e._v(" "),t("li",[t("strong",[e._v("New → New collect element")]),e._v(": creates a new collect element, see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#grid-element"}},[e._v("Terms")])],1),e._v(" "),t("li",[t("strong",[e._v("New → New prediction element")]),e._v(": creates a new prediction element, see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#grid-element"}},[e._v("Terms")])],1),e._v(" "),t("li",[t("strong",[e._v("New → New YouTube Player")]),e._v(": creates a new YouTube Player element")]),e._v(" "),t("li",[t("strong",[e._v("Delete all elements")]),e._v(": removes all grid elements from the grid")]),e._v(" "),t("li",[t("strong",[e._v("Change grid dimensions")]),e._v(": set grid size (number of rows and minimum number of columns)")]),e._v(" "),t("li",[t("strong",[e._v("Translate grid")]),e._v(": select which grid(s) to translate and in which language the texts shall be translated")]),e._v(" "),t("li",[t("strong",[e._v("Fill gaps")]),e._v(": moves all grid elements as far left as possible, closing gaps as the following image shows:\n"),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{staticStyle:{"margin-left":"2em"},attrs:{src:i(510),alt:"fill gaps",width:"130"}})])]),e._v(" "),t("li",[t("strong",[e._v("Edit global grid")]),e._v(": directly go to the page, where the global grid can be edited (otherwise go to "),t("em",[e._v("Manage grids → Edit global Grid")]),e._v(" (at the bottom))")])]),e._v(" "),t("h2",{attrs:{id:"editing-grid-elements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-grid-elements"}},[e._v("#")]),e._v(" Editing grid elements")]),e._v(" "),t("p",[e._v("A right click (or long tap) on a grid element in "),t("strong",[e._v("edit view (“editing on”)")]),e._v(" opens the following menu:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(511),alt:"edit view - element menu"}}),e._v(" "),t("em",[e._v("Fig. 2: Grid element menu in “Editing on” - view")])]),e._v(" "),t("p",[e._v("These are the options to select:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Edit")]),e._v(": opens a dialog to edit the label and the image of this element (“Edit modal”)")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": deletes this element")]),e._v(" "),t("li",[t("strong",[e._v("More → Clone")]),e._v(": inserts a copy of this element to the grid")]),e._v(" "),t("li",[t("strong",[e._v("More → Do element action")]),e._v(": performs the actions that are assigned to this grid element, e.g. speaking the label or navigating to another grid")]),e._v(" "),t("li",[t("strong",[e._v("More → Move element to other grid")]),e._v(": moves the element to another grid which can be selected")])]),e._v(" "),t("h2",{attrs:{id:"edit-grid-item-modal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#edit-grid-item-modal"}},[e._v("#")]),e._v(" “Edit grid item” modal")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=KWwWgCgidXM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=13&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Add and edit elements"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The “Edit”-modal is opened by a right click (or long tap) on a grid element in "),t("strong",[e._v("edit view (“editing on”)")]),e._v(" and subsequent clicking on “Edit”. The “Edit”-modal has three tabs (General, Image and Actions):")]),e._v(" "),t("h4",{attrs:{id:"tab-general"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tab-general"}},[e._v("#")]),e._v(" Tab “General”")]),e._v(" "),t("p",[e._v("Clicking on “Edit” in the grid element menu (Fig. 2) opens the following modal (Tab "),t("em",[e._v("General")]),e._v(") shown in Figure 3:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(512),alt:"edit grid element general"}}),e._v(" "),t("em",[e._v("Fig. 3: “Edit grid item” modal - Tab “General”")])]),e._v(" "),t("p",[e._v("These are the elements in the modal of Figure 3 (Edit grid item - Tab "),t("em",[e._v("General")]),e._v("):")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Label")]),e._v(": change the label of the element shown under the image, can be empty")]),e._v(" "),t("li",[t("strong",[e._v("Color category")]),e._v(": choose the color category (Noun, Verb, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("Search for images")]),e._v(": change to the "),t("em",[e._v("Image")]),e._v("-Tab.")]),e._v(" "),t("li",[t("strong",[e._v("Costum background color")]),e._v(": choose a different backgroud color")]),e._v(" "),t("li",[t("strong",[e._v("Hide element")]),e._v(": the element will only be visible in the “Editing on”-view. After clicking “Editing off”, it will not be visible.")]),e._v(" "),t("li",[t("strong",[e._v("Cancel")]),e._v(": discard all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK")]),e._v(": save all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit previous")]),e._v(": save all changes, edit the previous grid element in the “Edit grid item” modal - Tab “General”")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit next")]),e._v(": save all changes, edit the next grid element in the “Edit grid item” modal - Tab “General”")])]),e._v(" "),t("h4",{attrs:{id:"tab-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tab-image"}},[e._v("#")]),e._v(" Tab “Image”")]),e._v(" "),t("p",[t("img",{attrs:{src:i(513),alt:"edit grid element image"}}),e._v(" "),t("em",[e._v("Fig. 4: “Edit grid item” modal - Tab “Image”")])]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Choose file")]),e._v(": opens a file dialog to choose a different image")]),e._v(" "),t("li",[t("strong",[e._v("Search by label")]),e._v(": image search is done by label")]),e._v(" "),t("li",[t("strong",[e._v("Clear image")]),e._v(": deletes the currently chosen image")]),e._v(" "),t("li",[t("strong",[e._v("Drop area")]),e._v(": drag and drop image files in this area to select them. It’s possible to drag and drop files from a file explorer or also other programs like e.g. METACOM MetaSearch*.\n![fill gaps](file://C:\\Users\\Agnes Scheibenreif\\OneDrive - FH Technikum Wien\\Projekte\\WBT\\Github codes\\AsTeRICS-Grid\\docs\\documentation_user\\img\\drag_metacom.gif)")]),e._v(" "),t("li",[t("strong",[e._v("Image Search")]),e._v(": type in the name of which images shall be looked for")]),e._v(" "),t("li",[t("strong",[e._v("Search Provider")]),e._v(": select the provider for the image search")]),e._v(" "),t("li",[t("strong",[e._v("Settings for image search")]),e._v(": select additional settings like Plural or Color (skin color, hair color,…)")])]),e._v(" "),t("h4",{attrs:{id:"tab-actions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tab-actions"}},[e._v("#")]),e._v(" Tab “Actions”")]),e._v(" "),t("p",[t("img",{attrs:{src:i(313),alt:"edit grid element actions"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 5: “Edit grid item” modal - Tab “Actions”")])]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("New Action")]),e._v(": select type of new action in the combobox (e.g. Speak label, Navigate to other grid)")]),e._v(" "),t("li",[t("strong",[e._v("Add action")]),e._v(": add the selected type of action to the grid")]),e._v(" "),t("li",[t("strong",[e._v("Current actions")]),e._v(": actions currently assigned to the current grid element are shown here")]),e._v(" "),t("li",[t("strong",[e._v("Edit")]),e._v(": open additional drop down menus to edit and configure the particular action")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": delete this action from the current grid element")]),e._v(" "),t("li",[t("strong",[e._v("Test")]),e._v(": tests the action, e.g. speaks the label. This button is not available for all types of actions.")]),e._v(" "),t("li",[t("strong",[e._v("Cancel")]),e._v(": discard all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK")]),e._v(": save all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit previous")]),e._v(": save all changes, edit the previous grid element in the “Edit grid item” modal - Tab “Actions”")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit next")]),e._v(": save all changes, edit the next grid element in the “Edit grid item” modal - Tab “Actions”")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.metacom-symbole.de/",target:"_blank"}},[e._v("*METACOM and MetaSearch")]),e._v(" © Annette Kitzinger")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=n.exports},313:function(e,t,i){e.exports=i.p+"assets/img/edit_grid_element_actions_en.8cb3125d.jpg"},509:function(e,t,i){e.exports=i.p+"assets/img/edit_moremenu_en.619098c5.jpg"},510:function(e,t,i){e.exports=i.p+"assets/img/fill_gaps.cc2b28c6.gif"},511:function(e,t,i){e.exports=i.p+"assets/img/edit_element_menu_en.41b988c2.jpg"},512:function(e,t,i){e.exports=i.p+"assets/img/edit_grid_element_general_en.c0b2582a.jpg"},513:function(e,t,i){e.exports=i.p+"assets/img/edit_grid_element_image_en.d78a5e47.jpg"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{1051:function(e,t,i){"use strict";i.r(t);var a=i(2),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"grid-appearance-and-layout"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#grid-appearance-and-layout"}},[e._v("#")]),e._v(" Grid appearance and layout")]),e._v(" "),t("p",[t("strong",[e._v("Videos on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=Iw605fb85bs&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=12&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Layout options"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=X6YrWJW2ZoM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=21&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Collect elements"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=t0FWZcM9TMg&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=22&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Prediction elements"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("This chapter is about a grid’s layout and appearance and how to edit it:")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html#adding-elements-and-layout-options"}},[e._v("Adding elements and change the layout")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html#editing-grid-elements"}},[e._v("Editing grid elements menu")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/03_appearance_layout.html#edit-grid-item-modal"}},[e._v("Edit modal")]),e._v(": changing label and image")],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"adding-elements-and-layout-options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adding-elements-and-layout-options"}},[e._v("#")]),e._v(" Adding elements and layout options")]),e._v(" "),t("p",[e._v("In the "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html#edit-view"}},[e._v("Edit view (“Editing on”)")]),e._v(" the following menu opens on a click on “more”:")],1),e._v(" "),t("p",[t("img",{attrs:{src:i(509),alt:"edit view - more menu"}}),e._v(" "),t("em",[e._v("Fig. 1: Edit view - menu “more”")])]),e._v(" "),t("p",[e._v("These are the actions to select in the menu:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("New → New Element")]),e._v(": creates a normal new element, opening a dialog where label and image can be defined")]),e._v(" "),t("li",[t("strong",[e._v("New → Many new elements")]),e._v(": creates multiple new normal elements at once, opening a dialog where multiple elements can be defined and inserted into the grid")]),e._v(" "),t("li",[t("strong",[e._v("New → New collect element")]),e._v(": creates a new collect element, see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#grid-element"}},[e._v("Terms")])],1),e._v(" "),t("li",[t("strong",[e._v("New → New prediction element")]),e._v(": creates a new prediction element, see "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/01_terms.html#grid-element"}},[e._v("Terms")])],1),e._v(" "),t("li",[t("strong",[e._v("New → New YouTube Player")]),e._v(": creates a new YouTube Player element")]),e._v(" "),t("li",[t("strong",[e._v("Delete all elements")]),e._v(": removes all grid elements from the grid")]),e._v(" "),t("li",[t("strong",[e._v("Change grid dimensions")]),e._v(": set grid size (number of rows and minimum number of columns)")]),e._v(" "),t("li",[t("strong",[e._v("Translate grid")]),e._v(": select which grid(s) to translate and in which language the texts shall be translated")]),e._v(" "),t("li",[t("strong",[e._v("Fill gaps")]),e._v(": moves all grid elements as far left as possible, closing gaps as the following image shows:\n"),t("div",{staticStyle:{"margin-left":"2em"}},[t("img",{staticStyle:{"margin-left":"2em"},attrs:{src:i(510),alt:"fill gaps",width:"130"}})])]),e._v(" "),t("li",[t("strong",[e._v("Edit global grid")]),e._v(": directly go to the page, where the global grid can be edited (otherwise go to "),t("em",[e._v("Manage grids → Edit global Grid")]),e._v(" (at the bottom))")])]),e._v(" "),t("h2",{attrs:{id:"editing-grid-elements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#editing-grid-elements"}},[e._v("#")]),e._v(" Editing grid elements")]),e._v(" "),t("p",[e._v("A right click (or long tap) on a grid element in "),t("strong",[e._v("edit view (“editing on”)")]),e._v(" opens the following menu:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(511),alt:"edit view - element menu"}}),e._v(" "),t("em",[e._v("Fig. 2: Grid element menu in “Editing on” - view")])]),e._v(" "),t("p",[e._v("These are the options to select:")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Edit")]),e._v(": opens a dialog to edit the label and the image of this element (“Edit modal”)")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": deletes this element")]),e._v(" "),t("li",[t("strong",[e._v("More → Clone")]),e._v(": inserts a copy of this element to the grid")]),e._v(" "),t("li",[t("strong",[e._v("More → Do element action")]),e._v(": performs the actions that are assigned to this grid element, e.g. speaking the label or navigating to another grid")]),e._v(" "),t("li",[t("strong",[e._v("More → Move element to other grid")]),e._v(": moves the element to another grid which can be selected")])]),e._v(" "),t("h2",{attrs:{id:"edit-grid-item-modal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#edit-grid-item-modal"}},[e._v("#")]),e._v(" “Edit grid item” modal")]),e._v(" "),t("p",[t("strong",[e._v("Video on YouTube:")]),e._v(" "),t("a",{attrs:{href:"https://www.youtube.com/watch?v=KWwWgCgidXM&list=PL0UXHkT03dGrIHldlEKR0ZWfNMkShuTNz&index=13&t=0s",target:"_blank",rel:"noopener noreferrer"}},[e._v("Add and edit elements"),t("OutboundLink")],1),e._v(" (German, but auto-translated subtitles available)")]),e._v(" "),t("p",[e._v("The “Edit”-modal is opened by a right click (or long tap) on a grid element in "),t("strong",[e._v("edit view (“editing on”)")]),e._v(" and subsequent clicking on “Edit”. The “Edit”-modal has three tabs (General, Image and Actions):")]),e._v(" "),t("h4",{attrs:{id:"tab-general"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tab-general"}},[e._v("#")]),e._v(" Tab “General”")]),e._v(" "),t("p",[e._v("Clicking on “Edit” in the grid element menu (Fig. 2) opens the following modal (Tab "),t("em",[e._v("General")]),e._v(") shown in Figure 3:")]),e._v(" "),t("p",[t("img",{attrs:{src:i(512),alt:"edit grid element general"}}),e._v(" "),t("em",[e._v("Fig. 3: “Edit grid item” modal - Tab “General”")])]),e._v(" "),t("p",[e._v("These are the elements in the modal of Figure 3 (Edit grid item - Tab "),t("em",[e._v("General")]),e._v("):")]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Label")]),e._v(": change the label of the element shown under the image, can be empty")]),e._v(" "),t("li",[t("strong",[e._v("Color category")]),e._v(": choose the color category (Noun, Verb, etc.)")]),e._v(" "),t("li",[t("strong",[e._v("Search for images")]),e._v(": change to the "),t("em",[e._v("Image")]),e._v("-Tab.")]),e._v(" "),t("li",[t("strong",[e._v("Costum background color")]),e._v(": choose a different backgroud color")]),e._v(" "),t("li",[t("strong",[e._v("Hide element")]),e._v(": the element will only be visible in the “Editing on”-view. After clicking “Editing off”, it will not be visible.")]),e._v(" "),t("li",[t("strong",[e._v("Cancel")]),e._v(": discard all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK")]),e._v(": save all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit previous")]),e._v(": save all changes, edit the previous grid element in the “Edit grid item” modal - Tab “General”")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit next")]),e._v(": save all changes, edit the next grid element in the “Edit grid item” modal - Tab “General”")])]),e._v(" "),t("h4",{attrs:{id:"tab-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tab-image"}},[e._v("#")]),e._v(" Tab “Image”")]),e._v(" "),t("p",[t("img",{attrs:{src:i(513),alt:"edit grid element image"}}),e._v(" "),t("em",[e._v("Fig. 4: “Edit grid item” modal - Tab “Image”")])]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("Choose file")]),e._v(": opens a file dialog to choose a different image")]),e._v(" "),t("li",[t("strong",[e._v("Search by label")]),e._v(": image search is done by label")]),e._v(" "),t("li",[t("strong",[e._v("Clear image")]),e._v(": deletes the currently chosen image")]),e._v(" "),t("li",[t("strong",[e._v("Drop area")]),e._v(": drag and drop image files in this area to select them. It’s possible to drag and drop files from a file explorer or also other programs like e.g. METACOM MetaSearch*.\n![fill gaps](file://C:\\Users\\Agnes Scheibenreif\\OneDrive - FH Technikum Wien\\Projekte\\WBT\\Github codes\\AsTeRICS-Grid\\docs\\documentation_user\\img\\drag_metacom.gif)")]),e._v(" "),t("li",[t("strong",[e._v("Image Search")]),e._v(": type in the name of which images shall be looked for")]),e._v(" "),t("li",[t("strong",[e._v("Search Provider")]),e._v(": select the provider for the image search")]),e._v(" "),t("li",[t("strong",[e._v("Settings for image search")]),e._v(": select additional settings like Plural or Color (skin color, hair color,…)")])]),e._v(" "),t("h4",{attrs:{id:"tab-actions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tab-actions"}},[e._v("#")]),e._v(" Tab “Actions”")]),e._v(" "),t("p",[t("img",{attrs:{src:i(313),alt:"edit grid element actions"}})]),e._v(" "),t("p",[t("em",[e._v("Fig. 5: “Edit grid item” modal - Tab “Actions”")])]),e._v(" "),t("ol",[t("li",[t("strong",[e._v("New Action")]),e._v(": select type of new action in the combobox (e.g. Speak label, Navigate to other grid)")]),e._v(" "),t("li",[t("strong",[e._v("Add action")]),e._v(": add the selected type of action to the grid")]),e._v(" "),t("li",[t("strong",[e._v("Current actions")]),e._v(": actions currently assigned to the current grid element are shown here")]),e._v(" "),t("li",[t("strong",[e._v("Edit")]),e._v(": open additional drop down menus to edit and configure the particular action")]),e._v(" "),t("li",[t("strong",[e._v("Delete")]),e._v(": delete this action from the current grid element")]),e._v(" "),t("li",[t("strong",[e._v("Test")]),e._v(": tests the action, e.g. speaks the label. This button is not available for all types of actions.")]),e._v(" "),t("li",[t("strong",[e._v("Cancel")]),e._v(": discard all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK")]),e._v(": save all changes and close the modal")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit previous")]),e._v(": save all changes, edit the previous grid element in the “Edit grid item” modal - Tab “Actions”")]),e._v(" "),t("li",[t("strong",[e._v("OK, edit next")]),e._v(": save all changes, edit the next grid element in the “Edit grid item” modal - Tab “Actions”")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.metacom-symbole.de/",target:"_blank"}},[e._v("*METACOM and MetaSearch")]),e._v(" © Annette Kitzinger")]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/02_navigation.html"}},[e._v("← Previous Chapter")]),e._v(" "),t("RouterLink",{attrs:{to:"/manuals/asterics-grid/04_input_options.html"}},[e._v("Next Chapter →")])],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/manuals/asterics-grid/"}},[e._v("Back to Overview")])],1)])}),[],!1,null,null,null);t.default=n.exports},313:function(e,t,i){e.exports=i.p+"assets/img/edit_grid_element_actions_en.8cb3125d.jpg"},509:function(e,t,i){e.exports=i.p+"assets/img/edit_moremenu_en.619098c5.jpg"},510:function(e,t,i){e.exports=i.p+"assets/img/fill_gaps.cc2b28c6.gif"},511:function(e,t,i){e.exports=i.p+"assets/img/edit_element_menu_en.41b988c2.jpg"},512:function(e,t,i){e.exports=i.p+"assets/img/edit_grid_element_general_en.c0b2582a.jpg"},513:function(e,t,i){e.exports=i.p+"assets/img/edit_grid_element_image_en.d78a5e47.jpg"}}]); \ No newline at end of file diff --git a/assets/js/280.37cc5fde.js b/assets/js/280.e71f8812.js similarity index 96% rename from assets/js/280.37cc5fde.js rename to assets/js/280.e71f8812.js index decbd7aaed..cb7e733b9e 100644 --- a/assets/js/280.37cc5fde.js +++ b/assets/js/280.e71f8812.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[280],{1270:function(e,t,a){"use strict";a.r(t);var r=a(2),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"tobii4cheadtracker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tobii4cheadtracker"}},[e._v("#")]),e._v(" Tobii4CHeadTracker")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("OS: Windows")]),e._v(" "),t("p",[e._v("This component provides access to the raw head tracking data of the "),t("a",{attrs:{href:"https://tobiigaming.com/eye-tracker-4c/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tobii Tracker 4C"),t("OutboundLink")],1),e._v(" eye tracking device. The data includes the head position (x/y/z) in mm and the head rotation (x/y/z) in Euler angles. The Tobii4CHeadTracker plugin can be combined with the "),t("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/AsTeRICS-Help/master/Plugins/sensors/EyeX.htm",target:"_blank",rel:"noopener noreferrer"}},[e._v("EyeX"),t("OutboundLink")],1),e._v(" plugin to also get the eye gaze data.")]),e._v(" "),t("p",[e._v("The plugin connects to the device via the "),t("a",{attrs:{href:"https://tobiigaming.com/getstarted/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tobii Eye Tracking Core Software"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("OS: Windows")]),e._v(" "),t("li",[e._v("USB port: The Tracker 4C needs at least a USB 2.0 port. Preferably don’t use a USB hub, or only use a "),t("a",{attrs:{href:"https://help.tobii.com/hc/en-us/articles/212907389-Recommended-USB-2-0-hubs",target:"_blank",rel:"noopener noreferrer"}},[e._v("recommended hub from Tobii"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://tobiigaming.com/getstarted/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tobii Eye Tracking Core Software"),t("OutboundLink")],1),e._v(" must be installed and running.")])]),e._v(" "),t("p",[t("img",{attrs:{src:a(853),alt:"Screenshot: Tobii Tracker 4C plugin",title:"Screenshot: Tobii Tracker 4C plugin"}})]),e._v(" "),t("p",[e._v("Tobii Tracker 4C")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[e._v("**headRotX [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head rotation x angle (Euler).")]),e._v(" "),t("li",[e._v("**headRotY [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head rotation y angle (Euler).")]),e._v(" "),t("li",[e._v("**headRotZ [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head rotation z angle (Euler).")]),e._v(" "),t("li",[e._v("**headPosX [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head position x coordinate (mm).")]),e._v(" "),t("li",[e._v("**headPosY [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head position y coordinate (mm).")]),e._v(" "),t("li",[e._v("**headPosZ [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head position y coordinate (mm).")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activate:")]),e._v(" Activates (Turns on) the eye tracker device.")]),e._v(" "),t("li",[t("strong",[e._v("deactivate")]),e._v(" Deactivates (Pauses) the eye tracker device.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("userPresenceStatusAway:")]),e._v(" Indicates that no user is sitting in front of the tracker.")]),e._v(" "),t("li",[t("strong",[e._v("userPresenceStatusPresent:")]),e._v(" Indicates that a user is sitting in front of the tracker.")]),e._v(" "),t("li",[t("strong",[e._v("calibrationStarted:")]),e._v(" Indicates that the tracker calibration has been started.")]),e._v(" "),t("li",[t("strong",[e._v("calibrationFinished:")]),e._v(" Indicates that the tracker calibration has been finished.")]),e._v(" "),t("li",[t("strong",[e._v("displayAreaChanged:")]),e._v(" Indicates that the assigned display has been changed.")]),e._v(" "),t("li",[t("strong",[e._v("powerSaveStateTrue:")]),e._v(" Indicates that the tracker is in power save mode.")]),e._v(" "),t("li",[t("strong",[e._v("powerSaveStateFalse:")]),e._v(" Indicates that the tracker is not in power save mode.")]),e._v(" "),t("li",[t("strong",[e._v("deviceOff:")]),e._v(" Indicates that the tracker is currently paused.")]),e._v(" "),t("li",[t("strong",[e._v("deviceOn:")]),e._v(" Indicates that the tracker is currently enabled.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enabled [boolean]:")]),e._v(" Selects if the tracker is enabled at startup.")])])])}),[],!1,null,null,null);t.default=i.exports},853:function(e,t,a){e.exports=a.p+"assets/img/tobiigaming_product_4c.a006cad9.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[280],{1272:function(e,t,a){"use strict";a.r(t);var r=a(2),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"tobii4cheadtracker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#tobii4cheadtracker"}},[e._v("#")]),e._v(" Tobii4CHeadTracker")]),e._v(" "),t("p",[e._v("Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("OS: Windows")]),e._v(" "),t("p",[e._v("This component provides access to the raw head tracking data of the "),t("a",{attrs:{href:"https://tobiigaming.com/eye-tracker-4c/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tobii Tracker 4C"),t("OutboundLink")],1),e._v(" eye tracking device. The data includes the head position (x/y/z) in mm and the head rotation (x/y/z) in Euler angles. The Tobii4CHeadTracker plugin can be combined with the "),t("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/AsTeRICS-Help/master/Plugins/sensors/EyeX.htm",target:"_blank",rel:"noopener noreferrer"}},[e._v("EyeX"),t("OutboundLink")],1),e._v(" plugin to also get the eye gaze data.")]),e._v(" "),t("p",[e._v("The plugin connects to the device via the "),t("a",{attrs:{href:"https://tobiigaming.com/getstarted/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tobii Eye Tracking Core Software"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("OS: Windows")]),e._v(" "),t("li",[e._v("USB port: The Tracker 4C needs at least a USB 2.0 port. Preferably don’t use a USB hub, or only use a "),t("a",{attrs:{href:"https://help.tobii.com/hc/en-us/articles/212907389-Recommended-USB-2-0-hubs",target:"_blank",rel:"noopener noreferrer"}},[e._v("recommended hub from Tobii"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://tobiigaming.com/getstarted/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tobii Eye Tracking Core Software"),t("OutboundLink")],1),e._v(" must be installed and running.")])]),e._v(" "),t("p",[t("img",{attrs:{src:a(854),alt:"Screenshot: Tobii Tracker 4C plugin",title:"Screenshot: Tobii Tracker 4C plugin"}})]),e._v(" "),t("p",[e._v("Tobii Tracker 4C")]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[e._v("**headRotX [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head rotation x angle (Euler).")]),e._v(" "),t("li",[e._v("**headRotY [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head rotation y angle (Euler).")]),e._v(" "),t("li",[e._v("**headRotZ [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head rotation z angle (Euler).")]),e._v(" "),t("li",[e._v("**headPosX [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head position x coordinate (mm).")]),e._v(" "),t("li",[e._v("**headPosY [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head position y coordinate (mm).")]),e._v(" "),t("li",[e._v("**headPosZ [double]"),t("img",{staticClass:"emoji",attrs:{draggable:"false",alt:"😗",src:"https://twemoji.maxcdn.com/2/svg/1f617.svg"}}),e._v("*Head position y coordinate (mm).")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("activate:")]),e._v(" Activates (Turns on) the eye tracker device.")]),e._v(" "),t("li",[t("strong",[e._v("deactivate")]),e._v(" Deactivates (Pauses) the eye tracker device.")])]),e._v(" "),t("h2",{attrs:{id:"event-trigger-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[e._v("#")]),e._v(" Event Trigger Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("userPresenceStatusAway:")]),e._v(" Indicates that no user is sitting in front of the tracker.")]),e._v(" "),t("li",[t("strong",[e._v("userPresenceStatusPresent:")]),e._v(" Indicates that a user is sitting in front of the tracker.")]),e._v(" "),t("li",[t("strong",[e._v("calibrationStarted:")]),e._v(" Indicates that the tracker calibration has been started.")]),e._v(" "),t("li",[t("strong",[e._v("calibrationFinished:")]),e._v(" Indicates that the tracker calibration has been finished.")]),e._v(" "),t("li",[t("strong",[e._v("displayAreaChanged:")]),e._v(" Indicates that the assigned display has been changed.")]),e._v(" "),t("li",[t("strong",[e._v("powerSaveStateTrue:")]),e._v(" Indicates that the tracker is in power save mode.")]),e._v(" "),t("li",[t("strong",[e._v("powerSaveStateFalse:")]),e._v(" Indicates that the tracker is not in power save mode.")]),e._v(" "),t("li",[t("strong",[e._v("deviceOff:")]),e._v(" Indicates that the tracker is currently paused.")]),e._v(" "),t("li",[t("strong",[e._v("deviceOn:")]),e._v(" Indicates that the tracker is currently enabled.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("enabled [boolean]:")]),e._v(" Selects if the tracker is enabled at startup.")])])])}),[],!1,null,null,null);t.default=i.exports},854:function(e,t,a){e.exports=a.p+"assets/img/tobiigaming_product_4c.a006cad9.png"}}]); \ No newline at end of file diff --git a/assets/js/281.e2235cc3.js b/assets/js/281.0bf1e306.js similarity index 99% rename from assets/js/281.e2235cc3.js rename to assets/js/281.0bf1e306.js index 9692d01c93..4251cd001a 100644 --- a/assets/js/281.e2235cc3.js +++ b/assets/js/281.0bf1e306.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[281],{1273:function(e,t,a){"use strict";a.r(t);var r=a(2),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"xfacetrackerlk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xfacetrackerlk"}},[e._v("#")]),e._v(" XFacetrackerLK")]),e._v(" "),t("h3",{attrs:{id:"component-type-sensor-subcategory-computer-vision"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-sensor-subcategory-computer-vision"}},[e._v("#")]),e._v(" Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("OS: Windows (x86, x64), Linux (x86, x64, RPi3), Mac OSX")]),e._v(" "),t("p",[e._v("This component provides a cross-platform face tracking computer vision algorithm which puts out estimated movement of a user’s nose and chin in x and y coordinates. The underlying mechanism builds upon the "),t("a",{attrs:{href:"https://github.com/bytedeco/javacv",target:"_blank",rel:"noopener noreferrer"}},[e._v("JavaCV library"),t("OutboundLink")],1),e._v(" for frame grabbing and computer vision processing. In particular a trained cascade of haar-like features is used in combination with a Lukas Kanade optical flow algorithm to track a face and its movement. The x- and y- coordinates can be used in camera-mouse configurations or to enable selection or control tasks. The values are only provided if a face can be tracked by the algorithm. Note that the x- and y- values represent relative movement in pixels and have to be accumulated (e.g. via the integrate component) to generate e.g. absolute mouse positions.")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A camera has to be available (this can be any webcam or a camera which is available as image acquisition device via the operating system). The picture below shows the Logitech Webcam 9000 Pro. Also the camera device of a Kinect sensor or PS3Eye should work. Furthermore, a video stream of an IP camera can be used for tracking.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(315),alt:"Logitech Webcam 9000 Pro",title:"Logitech Webcam 9000 Pro"}}),t("br"),e._v("\nLogitech Webcam 9000 Pro")]),e._v(" "),t("h3",{attrs:{id:"note-for-raspberry-pi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#note-for-raspberry-pi"}},[e._v("#")]),e._v(" Note for Raspberry Pi")]),e._v(" "),t("p",[e._v("The plugin can be used on a Raspberry Pi 3 (tested with Raspbian Jessie) with USB cameras, the Kinect camera or the "),t("a",{attrs:{href:"https://www.raspberrypi.org/products/camera-module-v2/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi camera module"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("In order for the raspi cam to work, the following steps are necessary:")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Enable the camera with")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" raspi-config\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Add the v4l driver for the camera, to make it accessible as /dev/videoXX device:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" modprobe bcm2835-v4l2 "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("max_video_width")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2592")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("max_video_height")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1944")]),e._v("\n")])])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("noseX [integer]:")]),e._v(" This value specifies the relative change in the x coordinate of the user’s nose with respect to the previous image frame.")]),e._v(" "),t("li",[t("strong",[e._v("noseY [integer]:")]),e._v(" This value specifies the relative change in the y coordinate of the user’s nose with respect to the previous image frame.")]),e._v(" "),t("li",[t("strong",[e._v("chinX [integer]:")]),e._v(" This value specifies the relative change in the x coordinate of the user’s chin with respect to the previous image frame.")]),e._v(" "),t("li",[t("strong",[e._v("chinY [integer]:")]),e._v(" This value specifies the relative change in the y coordinate of the user’s chin with respect to the previous image frame.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("init:")]),e._v(" if this event is triggered, the face recognition procedure is initiated. This can be useful if the correct face position has been lost due to drifting of the LK algorithm.")]),e._v(" "),t("li",[t("strong",[e._v("showCameraSettings")]),e._v(" an incoming event displays the settings window for the camera device (only on Windows), where parameters like image brightness or contrast can be adjusted.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("frameGrabber[string, combobox selection]:")]),e._v(" Name of FrameGrabber to use (Default, VideoInput, OpenCV, FFmpeg, OpenKinect, PS3Eye, IPCamera).")]),e._v(" "),t("li",[t("strong",[e._v("frameGrabberFormat[string]:")]),e._v(" Format for grabber, e.g. FFmpeg: ‘dshow’ (default), ‘vfwcap’, ‘gdigrab’.")]),e._v(" "),t("li",[t("strong",[e._v("deviceList [string, combobox selection]:")]),e._v(" List of available devices, if supported by grabber")]),e._v(" "),t("li",[t("strong",[e._v("cameraSelection [string]:")]),e._v(" The camera device to be used - use camdIdx e.g. ‘0’ (VideoInput, OpenCV, OpenKinect, PS3Eye), or camName e.g. ‘video=Integrated Camera’ or ‘desktop’ (FFmpeg), stream-url for IPCamera.")]),e._v(" "),t("li",[t("strong",[e._v("cameraResolution [string, combobox selection]:")]),e._v(" This selection box provides several standard camera resolutions. Changing the resolution affects accuracy and performance (CPU load of the runtime system). Provided selections include 160x120, 320x240, 640x480, 800x600, 1024x768 and 1600x1200.")]),e._v(" "),t("li",[t("strong",[e._v("frameRate [integer]:")]),e._v(" The frame rate to use for frame grabbing. In case of 0 or a negative value, the maximum frame rate will be used.")]),e._v(" "),t("li",[t("strong",[e._v("titleVideoFrameWindow [string]:")]),e._v(" The title of the window showing the video frame.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI window will be shown.")]),e._v(" "),t("li",[t("strong",[e._v("enableOverlaySettings [boolean]:")]),e._v(" if selected, the video frame shows the current frame rate and device name as overlayed text.")])]),e._v(" "),t("h2",{attrs:{id:"example-configuraitons"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-configuraitons"}},[e._v("#")]),e._v(" Example Configuraitons")]),e._v(" "),t("h3",{attrs:{id:"default"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#default"}},[e._v("#")]),e._v(" Default")]),e._v(" "),t("p",[e._v("Selects the best frame grabber for the platform the ARE is running on. (Linux: FFmpeg, Mac OSX: OpenCV, Windows: VideoInput)")]),e._v(" "),t("p",[e._v("Configuration")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:Default")]),e._v(" "),t("li",[e._v("cameraSelection:0")])]),e._v(" "),t("h3",{attrs:{id:"opencv"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#opencv"}},[e._v("#")]),e._v(" OpenCV")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:OpenCV")]),e._v(" "),t("li",[e._v("cameraSelection:0")])]),e._v(" "),t("h3",{attrs:{id:"videoinput-windows-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#videoinput-windows-only"}},[e._v("#")]),e._v(" VideoInput (Windows only)")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:VideoInput")]),e._v(" "),t("li",[e._v("cameraSelection:0")])]),e._v(" "),t("h3",{attrs:{id:"ffmpeg-linux-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ffmpeg-linux-only"}},[e._v("#")]),e._v(" FFmpeg (Linux only)")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:FFmpeg")]),e._v(" "),t("li",[e._v("frameGrabberFormat (optional): e.g. vfwcap or dshow")]),e._v(" "),t("li",[e._v("cameraSelection (device name or device number): e.g. /dev/video0 or 0 (will be mapped to /dev/video0)")])]),e._v(" "),t("h3",{attrs:{id:"mjpeg-stream-of-smartphone-camera"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mjpeg-stream-of-smartphone-camera"}},[e._v("#")]),e._v(" MJPEG stream of SmartPhone camera")]),e._v(" "),t("p",[e._v("Install the following Android app on your smartphone and start streaming the front camera: "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.vinternete.camerastream",target:"_blank",rel:"noopener noreferrer"}},[e._v("Camera Stream - WiFi IP Webcam (Web Host LLC)"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Enter the http url displayed at your smartphone and add /video to the url")]),e._v(" "),t("p",[e._v("e.g.")]),e._v(" "),t("p",[e._v("http://192.168.1.100:8080/video")]),e._v(" "),t("p",[e._v("Set the cameraSelection property of the XFacetrackerLK plugin to this url.")]),e._v(" "),t("p",[e._v("Configuration")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:IPCamera")]),e._v(" "),t("li",[e._v("cameraSelection:http://192.168.1.100:8080/video")])])])}),[],!1,null,null,null);t.default=i.exports},315:function(e,t){e.exports="data:image/jpeg;base64,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oc0juKqwysZG4udcjKd3TbT22WxxenZA4xOJe8CN2Y23PhY8Nt1Zrdyitc2SwVt0qoqJwT5IsFvtkdhqiueHWdHTX8qUi1xxbGD5x69w9haOu5HsKdeapIs0gQs69czz7GDxUmrGw7D44ImxRNDY2DK0Do6b8STqTxJWSsKIiICIiAiIgIiICIiAiIgIiICIiAiIgLDxHB4JxaaNkg4XGov0O3t7isxEHDVfI7hrzdvPxdTJbjwkDlequSmhkbEHunPNRNhaQ9ou1rnOBIy2vdx3Ls0QcG/kcoLHK+pa62hzsNu7JqteeRVv0t/qW/fUmIrojH8io+lu9QP5i9/Iv/zZ9QP5ik1E2RF7uRd3CrHfAf5ivUvIrFrz1TK4/J5tjGAdubNf2KSkTRHJ5Fab6RUW46Q+/Ks7GOSqnqah0z5pmhwYMjRHoGRtYPKcDwaF3CJo5XCOTTD6c3EZld0yuLxp+po32LqWtAFhoN3/AML1FAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERB/9k="}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[281],{1276:function(e,t,a){"use strict";a.r(t);var r=a(2),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"xfacetrackerlk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xfacetrackerlk"}},[e._v("#")]),e._v(" XFacetrackerLK")]),e._v(" "),t("h3",{attrs:{id:"component-type-sensor-subcategory-computer-vision"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#component-type-sensor-subcategory-computer-vision"}},[e._v("#")]),e._v(" Component Type: Sensor (Subcategory: Computer Vision)")]),e._v(" "),t("p",[e._v("OS: Windows (x86, x64), Linux (x86, x64, RPi3), Mac OSX")]),e._v(" "),t("p",[e._v("This component provides a cross-platform face tracking computer vision algorithm which puts out estimated movement of a user’s nose and chin in x and y coordinates. The underlying mechanism builds upon the "),t("a",{attrs:{href:"https://github.com/bytedeco/javacv",target:"_blank",rel:"noopener noreferrer"}},[e._v("JavaCV library"),t("OutboundLink")],1),e._v(" for frame grabbing and computer vision processing. In particular a trained cascade of haar-like features is used in combination with a Lukas Kanade optical flow algorithm to track a face and its movement. The x- and y- coordinates can be used in camera-mouse configurations or to enable selection or control tasks. The values are only provided if a face can be tracked by the algorithm. Note that the x- and y- values represent relative movement in pixels and have to be accumulated (e.g. via the integrate component) to generate e.g. absolute mouse positions.")]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("p",[e._v("A camera has to be available (this can be any webcam or a camera which is available as image acquisition device via the operating system). The picture below shows the Logitech Webcam 9000 Pro. Also the camera device of a Kinect sensor or PS3Eye should work. Furthermore, a video stream of an IP camera can be used for tracking.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(315),alt:"Logitech Webcam 9000 Pro",title:"Logitech Webcam 9000 Pro"}}),t("br"),e._v("\nLogitech Webcam 9000 Pro")]),e._v(" "),t("h3",{attrs:{id:"note-for-raspberry-pi"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#note-for-raspberry-pi"}},[e._v("#")]),e._v(" Note for Raspberry Pi")]),e._v(" "),t("p",[e._v("The plugin can be used on a Raspberry Pi 3 (tested with Raspbian Jessie) with USB cameras, the Kinect camera or the "),t("a",{attrs:{href:"https://www.raspberrypi.org/products/camera-module-v2/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Raspberry Pi camera module"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("In order for the raspi cam to work, the following steps are necessary:")]),e._v(" "),t("ol",[t("li",[t("p",[e._v("Enable the camera with")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" raspi-config\n")])])])]),e._v(" "),t("li",[t("p",[e._v("Add the v4l driver for the camera, to make it accessible as /dev/videoXX device:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" modprobe bcm2835-v4l2 "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("max_video_width")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2592")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("max_video_height")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1944")]),e._v("\n")])])])])]),e._v(" "),t("h2",{attrs:{id:"output-port-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[e._v("#")]),e._v(" Output Port Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("noseX [integer]:")]),e._v(" This value specifies the relative change in the x coordinate of the user’s nose with respect to the previous image frame.")]),e._v(" "),t("li",[t("strong",[e._v("noseY [integer]:")]),e._v(" This value specifies the relative change in the y coordinate of the user’s nose with respect to the previous image frame.")]),e._v(" "),t("li",[t("strong",[e._v("chinX [integer]:")]),e._v(" This value specifies the relative change in the x coordinate of the user’s chin with respect to the previous image frame.")]),e._v(" "),t("li",[t("strong",[e._v("chinY [integer]:")]),e._v(" This value specifies the relative change in the y coordinate of the user’s chin with respect to the previous image frame.")])]),e._v(" "),t("h2",{attrs:{id:"event-listener-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[e._v("#")]),e._v(" Event Listener Description")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("init:")]),e._v(" if this event is triggered, the face recognition procedure is initiated. This can be useful if the correct face position has been lost due to drifting of the LK algorithm.")]),e._v(" "),t("li",[t("strong",[e._v("showCameraSettings")]),e._v(" an incoming event displays the settings window for the camera device (only on Windows), where parameters like image brightness or contrast can be adjusted.")])]),e._v(" "),t("h2",{attrs:{id:"properties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[e._v("#")]),e._v(" Properties")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("frameGrabber[string, combobox selection]:")]),e._v(" Name of FrameGrabber to use (Default, VideoInput, OpenCV, FFmpeg, OpenKinect, PS3Eye, IPCamera).")]),e._v(" "),t("li",[t("strong",[e._v("frameGrabberFormat[string]:")]),e._v(" Format for grabber, e.g. FFmpeg: ‘dshow’ (default), ‘vfwcap’, ‘gdigrab’.")]),e._v(" "),t("li",[t("strong",[e._v("deviceList [string, combobox selection]:")]),e._v(" List of available devices, if supported by grabber")]),e._v(" "),t("li",[t("strong",[e._v("cameraSelection [string]:")]),e._v(" The camera device to be used - use camdIdx e.g. ‘0’ (VideoInput, OpenCV, OpenKinect, PS3Eye), or camName e.g. ‘video=Integrated Camera’ or ‘desktop’ (FFmpeg), stream-url for IPCamera.")]),e._v(" "),t("li",[t("strong",[e._v("cameraResolution [string, combobox selection]:")]),e._v(" This selection box provides several standard camera resolutions. Changing the resolution affects accuracy and performance (CPU load of the runtime system). Provided selections include 160x120, 320x240, 640x480, 800x600, 1024x768 and 1600x1200.")]),e._v(" "),t("li",[t("strong",[e._v("frameRate [integer]:")]),e._v(" The frame rate to use for frame grabbing. In case of 0 or a negative value, the maximum frame rate will be used.")]),e._v(" "),t("li",[t("strong",[e._v("titleVideoFrameWindow [string]:")]),e._v(" The title of the window showing the video frame.")]),e._v(" "),t("li",[t("strong",[e._v("displayGUI [boolean]:")]),e._v(" if selected, the GUI window will be shown.")]),e._v(" "),t("li",[t("strong",[e._v("enableOverlaySettings [boolean]:")]),e._v(" if selected, the video frame shows the current frame rate and device name as overlayed text.")])]),e._v(" "),t("h2",{attrs:{id:"example-configuraitons"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-configuraitons"}},[e._v("#")]),e._v(" Example Configuraitons")]),e._v(" "),t("h3",{attrs:{id:"default"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#default"}},[e._v("#")]),e._v(" Default")]),e._v(" "),t("p",[e._v("Selects the best frame grabber for the platform the ARE is running on. (Linux: FFmpeg, Mac OSX: OpenCV, Windows: VideoInput)")]),e._v(" "),t("p",[e._v("Configuration")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:Default")]),e._v(" "),t("li",[e._v("cameraSelection:0")])]),e._v(" "),t("h3",{attrs:{id:"opencv"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#opencv"}},[e._v("#")]),e._v(" OpenCV")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:OpenCV")]),e._v(" "),t("li",[e._v("cameraSelection:0")])]),e._v(" "),t("h3",{attrs:{id:"videoinput-windows-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#videoinput-windows-only"}},[e._v("#")]),e._v(" VideoInput (Windows only)")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:VideoInput")]),e._v(" "),t("li",[e._v("cameraSelection:0")])]),e._v(" "),t("h3",{attrs:{id:"ffmpeg-linux-only"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ffmpeg-linux-only"}},[e._v("#")]),e._v(" FFmpeg (Linux only)")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:FFmpeg")]),e._v(" "),t("li",[e._v("frameGrabberFormat (optional): e.g. vfwcap or dshow")]),e._v(" "),t("li",[e._v("cameraSelection (device name or device number): e.g. /dev/video0 or 0 (will be mapped to /dev/video0)")])]),e._v(" "),t("h3",{attrs:{id:"mjpeg-stream-of-smartphone-camera"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mjpeg-stream-of-smartphone-camera"}},[e._v("#")]),e._v(" MJPEG stream of SmartPhone camera")]),e._v(" "),t("p",[e._v("Install the following Android app on your smartphone and start streaming the front camera: "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.vinternete.camerastream",target:"_blank",rel:"noopener noreferrer"}},[e._v("Camera Stream - WiFi IP Webcam (Web Host LLC)"),t("OutboundLink")],1)]),e._v(" "),t("p",[e._v("Enter the http url displayed at your smartphone and add /video to the url")]),e._v(" "),t("p",[e._v("e.g.")]),e._v(" "),t("p",[e._v("http://192.168.1.100:8080/video")]),e._v(" "),t("p",[e._v("Set the cameraSelection property of the XFacetrackerLK plugin to this url.")]),e._v(" "),t("p",[e._v("Configuration")]),e._v(" "),t("ul",[t("li",[e._v("frameGrabber:IPCamera")]),e._v(" "),t("li",[e._v("cameraSelection:http://192.168.1.100:8080/video")])])])}),[],!1,null,null,null);t.default=i.exports},315:function(e,t){e.exports="data:image/jpeg;base64,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oc0juKqwysZG4udcjKd3TbT22WxxenZA4xOJe8CN2Y23PhY8Nt1Zrdyitc2SwVt0qoqJwT5IsFvtkdhqiueHWdHTX8qUi1xxbGD5x69w9haOu5HsKdeapIs0gQs69czz7GDxUmrGw7D44ImxRNDY2DK0Do6b8STqTxJWSsKIiICIiAiIgIiICIiAiIgIiICIiAiIgLDxHB4JxaaNkg4XGov0O3t7isxEHDVfI7hrzdvPxdTJbjwkDlequSmhkbEHunPNRNhaQ9ou1rnOBIy2vdx3Ls0QcG/kcoLHK+pa62hzsNu7JqteeRVv0t/qW/fUmIrojH8io+lu9QP5i9/Iv/zZ9QP5ik1E2RF7uRd3CrHfAf5ivUvIrFrz1TK4/J5tjGAdubNf2KSkTRHJ5Fab6RUW46Q+/Ks7GOSqnqah0z5pmhwYMjRHoGRtYPKcDwaF3CJo5XCOTTD6c3EZld0yuLxp+po32LqWtAFhoN3/AML1FAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERB/9k="}}]); \ No newline at end of file diff --git a/assets/js/282.0b267136.js b/assets/js/282.ee7aef78.js similarity index 93% rename from assets/js/282.0b267136.js rename to assets/js/282.ee7aef78.js index 49e03dada9..be0e316155 100644 --- a/assets/js/282.0b267136.js +++ b/assets/js/282.ee7aef78.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[282],{1276:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"camera-mouse-solution"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#camera-mouse-solution"}},[e._v("#")]),e._v(" Camera Mouse Solution")]),e._v(" "),t("h2",{attrs:{id:"objective"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[e._v("#")]),e._v(" Objective")]),e._v(" "),t("p",[e._v("Mouse control (moving mouse cursor, clicking and dragging) by head movements.")]),e._v(" "),t("h2",{attrs:{id:"description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#description"}},[e._v("#")]),e._v(" Description")]),e._v(" "),t("p",[e._v("By moving the head up/down or left/right the mouse cursor should move accordingly. A left click is performed by dwelling (stopping movement and waiting for some time). To do a right, double or drag click select the respective button in the ARE GUI and move the cursor to the location where the click should be performed at. The camera device, the mouse speed and other settings can be changed by clicking onto the "),t("code",[e._v("Settings")]),e._v(" button. Additionally, external switches can be configured for clicking and an on-screen keyboard of choice can be defined.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(861),alt:"Face with tracking marks."}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("Integrated Webcam or USB camera")]),e._v(" "),t("li",[e._v("AsTeRICS installed and ARE running")]),e._v(" "),t("li",[e._v("OS: Windows, Linux (incl. RPi), Mac OSX")])]),e._v(" "),t("h2",{attrs:{id:"related-videos"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#related-videos"}},[e._v("#")]),e._v(" Related Videos")]),e._v(" "),t("Video",{attrs:{code:"P9qJAWegkFM"}}),e._v(" "),t("h2",{attrs:{id:"major-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#major-plugins"}},[e._v("#")]),e._v(" Major Plugins")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"/plugins/sensors/XFacetrackerLK"}},[e._v("XFacetrackerLK")])]),e._v(" "),t("li",[t("a",{attrs:{href:"/plugins/actuators/Mouse"}},[e._v("Mouse")])])]),e._v(" "),t("h2",{attrs:{id:"related-tutorials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#related-tutorials"}},[e._v("#")]),e._v(" Related Tutorials")]),e._v(" "),t("p",[t("a",{attrs:{href:"/customize/Model-Creation"}},[e._v("Model Creation - Camera Mouse Simple")])])],1)}),[],!1,null,null,null);t.default=s.exports},861:function(e,t,a){e.exports=a.p+"assets/img/camera-mouse-tracked-face.5e64e466.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[282],{1279:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"camera-mouse-solution"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#camera-mouse-solution"}},[e._v("#")]),e._v(" Camera Mouse Solution")]),e._v(" "),t("h2",{attrs:{id:"objective"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[e._v("#")]),e._v(" Objective")]),e._v(" "),t("p",[e._v("Mouse control (moving mouse cursor, clicking and dragging) by head movements.")]),e._v(" "),t("h2",{attrs:{id:"description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#description"}},[e._v("#")]),e._v(" Description")]),e._v(" "),t("p",[e._v("By moving the head up/down or left/right the mouse cursor should move accordingly. A left click is performed by dwelling (stopping movement and waiting for some time). To do a right, double or drag click select the respective button in the ARE GUI and move the cursor to the location where the click should be performed at. The camera device, the mouse speed and other settings can be changed by clicking onto the "),t("code",[e._v("Settings")]),e._v(" button. Additionally, external switches can be configured for clicking and an on-screen keyboard of choice can be defined.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(862),alt:"Face with tracking marks."}})]),e._v(" "),t("h2",{attrs:{id:"requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),t("ul",[t("li",[e._v("Integrated Webcam or USB camera")]),e._v(" "),t("li",[e._v("AsTeRICS installed and ARE running")]),e._v(" "),t("li",[e._v("OS: Windows, Linux (incl. RPi), Mac OSX")])]),e._v(" "),t("h2",{attrs:{id:"related-videos"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#related-videos"}},[e._v("#")]),e._v(" Related Videos")]),e._v(" "),t("Video",{attrs:{code:"P9qJAWegkFM"}}),e._v(" "),t("h2",{attrs:{id:"major-plugins"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#major-plugins"}},[e._v("#")]),e._v(" Major Plugins")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"/plugins/sensors/XFacetrackerLK"}},[e._v("XFacetrackerLK")])]),e._v(" "),t("li",[t("a",{attrs:{href:"/plugins/actuators/Mouse"}},[e._v("Mouse")])])]),e._v(" "),t("h2",{attrs:{id:"related-tutorials"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#related-tutorials"}},[e._v("#")]),e._v(" Related Tutorials")]),e._v(" "),t("p",[t("a",{attrs:{href:"/customize/Model-Creation"}},[e._v("Model Creation - Camera Mouse Simple")])])],1)}),[],!1,null,null,null);t.default=s.exports},862:function(e,t,a){e.exports=a.p+"assets/img/camera-mouse-tracked-face.5e64e466.png"}}]); \ No newline at end of file diff --git a/assets/js/283.a3c9b40d.js b/assets/js/283.3fb8cd32.js similarity index 89% rename from assets/js/283.a3c9b40d.js rename to assets/js/283.3fb8cd32.js index 607f01317e..b9aab26a67 100644 --- a/assets/js/283.a3c9b40d.js +++ b/assets/js/283.3fb8cd32.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[283],{1277:function(t,a,e){"use strict";e.r(a);var s=e(2),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"head-sound-solution"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#head-sound-solution"}},[t._v("#")]),t._v(" Head Sound Solution")]),t._v(" "),a("h2",{attrs:{id:"objective"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[t._v("#")]),t._v(" Objective")]),t._v(" "),a("p",[t._v("Generate sounds according to head movement.")]),t._v(" "),a("h2",{attrs:{id:"description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#description"}},[t._v("#")]),t._v(" Description")]),t._v(" "),a("p",[t._v("By moving the head left/right, the tone scale should go up and down accordingly. Additionally, by moving the head up/down, the volume can be changed.")]),t._v(" "),a("p",[a("img",{attrs:{src:e(862),alt:"ARE GUI with tone scale and graph for tone scale and volume."}})]),t._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),a("ul",[a("li",[t._v("Integrated Webcam or USB camera")]),t._v(" "),a("li",[t._v("AsTeRICS installed and ARE running")]),t._v(" "),a("li",[t._v("OS: Windows, Linux (incl. RPi), Mac OSX")])]),t._v(" "),a("h2",{attrs:{id:"major-plugins"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#major-plugins"}},[t._v("#")]),t._v(" Major Plugins")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"/plugins/sensors/XFacetrackerLK"}},[t._v("XFacetrackerLK")])]),t._v(" "),a("li",[a("a",{attrs:{href:"/plugins/actuators/MidiPlayer"}},[t._v("MidiPlayer")])])])])}),[],!1,null,null,null);a.default=r.exports},862:function(t,a,e){t.exports=e.p+"assets/img/headsound.9bcac6dc.png"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[283],{1280:function(t,a,e){"use strict";e.r(a);var s=e(2),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"head-sound-solution"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#head-sound-solution"}},[t._v("#")]),t._v(" Head Sound Solution")]),t._v(" "),a("h2",{attrs:{id:"objective"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#objective"}},[t._v("#")]),t._v(" Objective")]),t._v(" "),a("p",[t._v("Generate sounds according to head movement.")]),t._v(" "),a("h2",{attrs:{id:"description"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#description"}},[t._v("#")]),t._v(" Description")]),t._v(" "),a("p",[t._v("By moving the head left/right, the tone scale should go up and down accordingly. Additionally, by moving the head up/down, the volume can be changed.")]),t._v(" "),a("p",[a("img",{attrs:{src:e(863),alt:"ARE GUI with tone scale and graph for tone scale and volume."}})]),t._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),a("ul",[a("li",[t._v("Integrated Webcam or USB camera")]),t._v(" "),a("li",[t._v("AsTeRICS installed and ARE running")]),t._v(" "),a("li",[t._v("OS: Windows, Linux (incl. RPi), Mac OSX")])]),t._v(" "),a("h2",{attrs:{id:"major-plugins"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#major-plugins"}},[t._v("#")]),t._v(" Major Plugins")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"/plugins/sensors/XFacetrackerLK"}},[t._v("XFacetrackerLK")])]),t._v(" "),a("li",[a("a",{attrs:{href:"/plugins/actuators/MidiPlayer"}},[t._v("MidiPlayer")])])])])}),[],!1,null,null,null);a.default=r.exports},863:function(t,a,e){t.exports=e.p+"assets/img/headsound.9bcac6dc.png"}}]); \ No newline at end of file diff --git a/assets/js/290.05de3171.js b/assets/js/290.c2d65d31.js similarity index 96% rename from assets/js/290.05de3171.js rename to assets/js/290.c2d65d31.js index 706c1f05d7..8ea8cb9cf8 100644 --- a/assets/js/290.05de3171.js +++ b/assets/js/290.c2d65d31.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[290],{925:function(t,o,e){"use strict";e.r(o);var s=e(2),i=Object(s.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"tutorials"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#tutorials"}},[t._v("#")]),t._v(" Tutorials")]),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),o("p",[t._v("If you are an "),o("strong",[t._v("occupational therapist")]),t._v(" or an "),o("strong",[t._v("assistive technology professional")]),t._v(" or simply want to "),o("strong",[t._v("customize")]),t._v(" or "),o("strong",[t._v("create")]),t._v(" new solutions, this is the right place for you.")]),t._v(" "),o("p",[t._v("In this section you will find tutorials about model creation and editing.")])]),t._v(" "),o("p",[t._v("If you would like to use a solution for a dedicated person with disabilities, go to the "),o("RouterLink",{attrs:{to:"/solutions/"}},[t._v("solutions")]),t._v(" page and start experimenting with solutions of the needed use case. Some solutions directly provide a settings page by clicking the "),o("code",[t._v("Settings")]),t._v(" button. In case of the camera mouse this allows to configure the camera device, the mouse speed and other settings. Otherwise you will have to edit the underlying model directly. This can be done by clicking the "),o("code",[t._v("Edit")]),t._v(" button.")],1),t._v(" "),o("h2",{attrs:{id:"go-to"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#go-to"}},[t._v("#")]),t._v(" Go to")]),t._v(" "),o("ul",[o("li",[o("a",{attrs:{href:"./model/Model-Customization"}},[o("strong",[t._v("Model Customization")])]),t._v(" to learn how to modify a given model and adapt single properties.")]),t._v(" "),o("li",[o("a",{attrs:{href:"./model/Model-Creation"}},[o("strong",[t._v("Model Creation")])]),t._v(" to learn how to create a new model.")])])])}),[],!1,null,null,null);o.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[290],{924:function(t,o,e){"use strict";e.r(o);var s=e(2),i=Object(s.a)({},(function(){var t=this,o=t._self._c;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"tutorials"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#tutorials"}},[t._v("#")]),t._v(" Tutorials")]),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),o("p",[t._v("If you are an "),o("strong",[t._v("occupational therapist")]),t._v(" or an "),o("strong",[t._v("assistive technology professional")]),t._v(" or simply want to "),o("strong",[t._v("customize")]),t._v(" or "),o("strong",[t._v("create")]),t._v(" new solutions, this is the right place for you.")]),t._v(" "),o("p",[t._v("In this section you will find tutorials about model creation and editing.")])]),t._v(" "),o("p",[t._v("If you would like to use a solution for a dedicated person with disabilities, go to the "),o("RouterLink",{attrs:{to:"/solutions/"}},[t._v("solutions")]),t._v(" page and start experimenting with solutions of the needed use case. Some solutions directly provide a settings page by clicking the "),o("code",[t._v("Settings")]),t._v(" button. In case of the camera mouse this allows to configure the camera device, the mouse speed and other settings. Otherwise you will have to edit the underlying model directly. This can be done by clicking the "),o("code",[t._v("Edit")]),t._v(" button.")],1),t._v(" "),o("h2",{attrs:{id:"go-to"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#go-to"}},[t._v("#")]),t._v(" Go to")]),t._v(" "),o("ul",[o("li",[o("a",{attrs:{href:"./model/Model-Customization"}},[o("strong",[t._v("Model Customization")])]),t._v(" to learn how to modify a given model and adapt single properties.")]),t._v(" "),o("li",[o("a",{attrs:{href:"./model/Model-Creation"}},[o("strong",[t._v("Model Creation")])]),t._v(" to learn how to create a new model.")])])])}),[],!1,null,null,null);o.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/291.f164a1e0.js b/assets/js/291.95b4e438.js similarity index 90% rename from assets/js/291.f164a1e0.js rename to assets/js/291.95b4e438.js index ca0418b42e..ae6c0ff071 100644 --- a/assets/js/291.f164a1e0.js +++ b/assets/js/291.95b4e438.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[291],{924:function(t,s,e){"use strict";e.r(s);var i=e(2),a=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"bioelectrical-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bioelectrical-input"}},[this._v("#")]),this._v(" Bioelectrical Input")]),this._v(" "),t("h2",{attrs:{id:"emg-based-mouse-click"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#emg-based-mouse-click"}},[this._v("#")]),this._v(" EMG-based Mouse Click")]),this._v(" "),t("p",[this._v("…")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[291],{926:function(t,s,e){"use strict";e.r(s);var i=e(2),a=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"bioelectrical-input"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bioelectrical-input"}},[this._v("#")]),this._v(" Bioelectrical Input")]),this._v(" "),t("h2",{attrs:{id:"emg-based-mouse-click"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#emg-based-mouse-click"}},[this._v("#")]),this._v(" EMG-based Mouse Click")]),this._v(" "),t("p",[this._v("…")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/292.cd0f9fd5.js b/assets/js/292.ff6d5030.js similarity index 99% rename from assets/js/292.cd0f9fd5.js rename to assets/js/292.ff6d5030.js index 3d9120db48..5bc8675f5c 100644 --- a/assets/js/292.cd0f9fd5.js +++ b/assets/js/292.ff6d5030.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[292],{927:function(e,t,a){"use strict";a.r(t);var o=a(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gaming-toys-music"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gaming-toys-music"}},[e._v("#")]),e._v(" Gaming, Toys & Music")]),e._v(" "),t("p",[e._v("AsTeRICS can be used to control computer games, music programs or infrared-controlled lights and toys. The keyboard input of a game or a music program can be substituted by another input modality (e.g. head movement, eye gaze, switch press,…) which emulates a key press. Similarily, a toy can be controlled by adapting an input modality to an RC or infrared command.")]),e._v(" "),t("h2",{attrs:{id:"head-movement-to-smiley-tutorial"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#head-movement-to-smiley-tutorial"}},[e._v("#")]),e._v(" Head Movement to Smiley Tutorial")]),e._v(" "),t("p",[e._v("In a first tutorial, you will learn how to map up/down head movements to a discrete number between 1 and 4. The number will than be mapped to one of 4 image paths and the selected image will be shown in the ImageBox widget depending on the head movement.")]),e._v(" "),t("p",[t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137794267-4b207741-a95c-40ed-9237-cdd9473f159c.gif",alt:"Demo showing selected smiley image (from angry to happy) depending on head movement"}})]),e._v(" "),t("p",[e._v("Later this tutorial can be used as a basis for other use cases as well, simply by exchanging the input signal (e.g. Use an air pressure or sip/puff value instead of head movements) or by exchanging the action (e.g. Send cursor keys "),t("kbd",[e._v("UP")]),e._v("/"),t("kbd",[e._v("DOWN")]),e._v(" or send a certain Infrared command instead of showing an image).")]),e._v(" "),t("h3",{attrs:{id:"model-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-description"}},[e._v("#")]),e._v(" Model Description")]),e._v(" "),t("p",[e._v("Below you can see the model used for this tutorial. You can "),t("a",{attrs:{href:"https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/tutorial/B_HeadMovement_MappedTo_SmileyImage.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("download"),t("OutboundLink")],1),e._v(" and open it in the "),t("strong",[e._v("ACS program")]),e._v(" or directly "),t("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=http://127.0.0.1:8081&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/tutorial/B_HeadMovement_MappedTo_SmileyImage.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("open it in the "),t("strong",[e._v("WebACS")]),t("OutboundLink")],1),e._v(" web application.")]),e._v(" "),t("p",[t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/149799674-39c65c41-7873-4fe2-ab23-e369548ed78b.png",alt:"Head-Smiley-Control-Model"}})]),e._v(" "),t("ol",[t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/sensors/XFacetrackerLK.html"}},[e._v("XFacetrackerLK")]),e._v(" plugin opens the first camera device with a resolution of 320x240 pixels, tracks the head movements and sends the relative movement in y-direction to the Integrate plugin.")],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/Integrate.html"}},[e._v("Integrate")]),e._v(" plugin integrates the relative movements with minimum and maximum values set to "),t("strong",[e._v("0 and 240")]),e._v(" respectively (same as camera resolution). "),t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137796282-a2a080aa-d32a-4693-bfe8-af4a75dfadec.png",alt:"Head-Smiley-Control-Integrate-Properties"}})],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/SignalTranslation.html"}},[e._v("SignalTranslation")]),e._v(" plugin translates the values between "),t("strong",[e._v("0 and 240")]),e._v(" to values between "),t("strong",[e._v("1.00 and 4.00")]),e._v(". "),t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137796551-1629aea6-a031-4143-9502-7d2c2862ccbd.png",alt:"Head-Smiley-Control-SignalTranslator-Properties"}})],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/Quantizer.html"}},[e._v("Quantizer")]),e._v(" plugin creates a quantized (integer) number by rounding to the nearest integer number.")],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/StringDispatcher.html"}},[e._v("StringDispatcher")]),e._v(" plugin has predefined Strings (paths to image files) which are sent to the output port depending on the input number (1-4). "),t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137797248-d663214b-8529-4493-858e-2bac85f129ae.png",alt:"Head-Smiley-Control-StringDispatcher-Properties"}})],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/actuators/TextDisplay.html"}},[e._v("TextDisplay")]),e._v(" widget shows the quantized number in a text box for debugging purposes only.")],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/actuators/ImageBox.html"}},[e._v("ImageBox")]),e._v(" widget shows the image which path was received at the input port.")],1)]),e._v(" "),t("h2",{attrs:{id:"gaming"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gaming"}},[e._v("#")]),e._v(" Gaming")]),e._v(" "),t("p",[e._v("Many games can be controlled by keyboard shortcuts e.g. "),t("kbd",[e._v("a")]),e._v(","),t("kbd",[e._v("s")]),e._v(","),t("kbd",[e._v("d")]),e._v(","),t("kbd",[e._v("f")]),e._v(" or "),t("kbd",[e._v("left")]),e._v(","),t("kbd",[e._v("right")]),e._v(","),t("kbd",[e._v("up")]),e._v(","),t("kbd",[e._v("down")]),e._v(".\nYou can now use the "),t("a",{attrs:{href:"#head-movement-to-smiley-tutorial"}},[e._v("Head Movement to Smiley Tutorial")]),e._v(" and simply map the head up/down movement to a keyboard key by using they "),t("RouterLink",{attrs:{to:"/plugins/actuators/Keyboard.html"}},[e._v("Keyboard")]),e._v(" plugin.")],1),e._v(" "),t("p",[e._v("Simply exchange the slot Strings in the StringDispatcher plugin by the key strings or special key code strings (e.g. "),t("code",[e._v("{UP}")]),e._v(" for a cursor up key press emulation).")]),e._v(" "),t("h2",{attrs:{id:"sound-and-voice"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sound-and-voice"}},[e._v("#")]),e._v(" Sound and Voice")]),e._v(" "),t("p",[e._v("Instead of showing smiley images you can use the "),t("RouterLink",{attrs:{to:"/plugins/actuators/MidiPlayer.html"}},[e._v("MidiPlayer")]),e._v(" to create midi tones. In this case directly send the output value of the Quantizer plugin to the input port "),t("code",[e._v("pitch")]),e._v(".")],1),e._v(" "),t("p",[e._v("If you want to generate voice, set the slot strings of the StringDispatcher plugin to the words and sentences you would like to synthesize. You must then connect one of the voice generation plugins (e.g. "),t("RouterLink",{attrs:{to:"/plugins/processors/SpeechProcessor.html"}},[e._v("SpeechProcessor")]),e._v(", "),t("RouterLink",{attrs:{to:"/plugins/actuators/SyntheticVoice.html"}},[e._v("SyntheticVoice")]),e._v(", "),t("RouterLink",{attrs:{to:"/plugins/actuators/PicoTTS.html"}},[e._v("PicoTTS")]),e._v(" to it.")],1),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("project kissenklang")]),e._v(" uses a blood pressure cuff to create sounds using the "),t("RouterLink",{attrs:{to:"/plugins/actuators/MidiPlayer.html"}},[e._v("MidiPlayer")]),e._v(" plugin.")],1),e._v(" "),t("h2",{attrs:{id:"light"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#light"}},[e._v("#")]),e._v(" Light")]),e._v(" "),t("p",[e._v("If you would like to control an infrared-controlled light bulb, you can use the "),t("RouterLink",{attrs:{to:"/plugins/actuators/IRTrans.html"}},[e._v("IRTrans")]),e._v(" plugin and set the slot strings of the StringDispatcher plugin to the action strings of the respective infrared commands (e.g. "),t("code",[e._v("@IRTRANS: snd luminea-bulb,red")]),e._v(").")],1),e._v(" "),t("p",[e._v("Likewise you could use the "),t("RouterLink",{attrs:{to:"/plugins/actuators/PhilipsHue.html"}},[e._v("PhilipsHue")]),e._v(" plugin to control a Hue bulb depending on the head movement by setting the respective action string (e.g. "),t("code",[e._v('{"hue": 0, "sat": 254}')]),e._v(").")],1),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("project kissenklang")]),e._v(" uses a blood pressure cuff to control a light bulb via infrared commands sent by the "),t("RouterLink",{attrs:{to:"/plugins/actuators/IRTrans.html"}},[e._v("IRTrans")]),e._v(" plugin.")],1),e._v(" "),t("h2",{attrs:{id:"toys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#toys"}},[e._v("#")]),e._v(" Toys")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("project kissenklang")]),e._v(" uses a blood pressure cuff to control a toy robot via infrared commands sent by the "),t("RouterLink",{attrs:{to:"/plugins/actuators/IRTrans.html"}},[e._v("IRTrans")]),e._v(" plugin.")],1),e._v(" "),t("p",[e._v("The following tutorial documents a "),t("a",{attrs:{href:"https://www.ki-i.at/helicopter/",target:"_blank",rel:"noopener noreferrer"}},[e._v("toy helicopter controlled with muscle signals"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"example-projects"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-projects"}},[e._v("#")]),e._v(" Example Projects")]),e._v(" "),t("h3",{attrs:{id:"blood-pressure-cuff-sound-and-toy-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("#")]),e._v(" Blood Pressure Cuff Sound and Toy Control")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/asterics/unikate-kissenschalter",target:"_blank",rel:"noopener noreferrer"}},[e._v("project Kissenklang"),t("OutboundLink")],1),e._v(" used a consumer blood pressure cuff and the "),t("a",{attrs:{href:"https://www.asterics-foundation.org/projects/fabi/",target:"_blank",rel:"noopener noreferrer"}},[e._v("button interface FABI"),t("OutboundLink")],1),e._v(" to create sounds according to the pressure value of the cuff or to control various items like toy robots, soap bubble machine or infrared lights.")]),e._v(" "),t("h4",{attrs:{id:"demovideo-kissenklang"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#demovideo-kissenklang"}},[e._v("#")]),e._v(" Demovideo Kissenklang")]),e._v(" "),t("UseCase",{attrs:{title:"Kissenklang Demovideo",media:"https://youtu.be/5d4WYjJhgug"}},[e._v("Demo of Kissenklang generating sounds according to the pressure value of the blood pressure cuff.")])],1)}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[292],{925:function(e,t,a){"use strict";a.r(t);var o=a(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"gaming-toys-music"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gaming-toys-music"}},[e._v("#")]),e._v(" Gaming, Toys & Music")]),e._v(" "),t("p",[e._v("AsTeRICS can be used to control computer games, music programs or infrared-controlled lights and toys. The keyboard input of a game or a music program can be substituted by another input modality (e.g. head movement, eye gaze, switch press,…) which emulates a key press. Similarily, a toy can be controlled by adapting an input modality to an RC or infrared command.")]),e._v(" "),t("h2",{attrs:{id:"head-movement-to-smiley-tutorial"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#head-movement-to-smiley-tutorial"}},[e._v("#")]),e._v(" Head Movement to Smiley Tutorial")]),e._v(" "),t("p",[e._v("In a first tutorial, you will learn how to map up/down head movements to a discrete number between 1 and 4. The number will than be mapped to one of 4 image paths and the selected image will be shown in the ImageBox widget depending on the head movement.")]),e._v(" "),t("p",[t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137794267-4b207741-a95c-40ed-9237-cdd9473f159c.gif",alt:"Demo showing selected smiley image (from angry to happy) depending on head movement"}})]),e._v(" "),t("p",[e._v("Later this tutorial can be used as a basis for other use cases as well, simply by exchanging the input signal (e.g. Use an air pressure or sip/puff value instead of head movements) or by exchanging the action (e.g. Send cursor keys "),t("kbd",[e._v("UP")]),e._v("/"),t("kbd",[e._v("DOWN")]),e._v(" or send a certain Infrared command instead of showing an image).")]),e._v(" "),t("h3",{attrs:{id:"model-description"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#model-description"}},[e._v("#")]),e._v(" Model Description")]),e._v(" "),t("p",[e._v("Below you can see the model used for this tutorial. You can "),t("a",{attrs:{href:"https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/tutorial/B_HeadMovement_MappedTo_SmileyImage.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("download"),t("OutboundLink")],1),e._v(" and open it in the "),t("strong",[e._v("ACS program")]),e._v(" or directly "),t("a",{attrs:{href:"http://webacs.asterics.eu/?areBaseURI=http://127.0.0.1:8081&openFile=https://raw.githubusercontent.com/asterics/AsTeRICS/master/bin/ARE/models/tutorial/B_HeadMovement_MappedTo_SmileyImage.acs",target:"_blank",rel:"noopener noreferrer"}},[e._v("open it in the "),t("strong",[e._v("WebACS")]),t("OutboundLink")],1),e._v(" web application.")]),e._v(" "),t("p",[t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/149799674-39c65c41-7873-4fe2-ab23-e369548ed78b.png",alt:"Head-Smiley-Control-Model"}})]),e._v(" "),t("ol",[t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/sensors/XFacetrackerLK.html"}},[e._v("XFacetrackerLK")]),e._v(" plugin opens the first camera device with a resolution of 320x240 pixels, tracks the head movements and sends the relative movement in y-direction to the Integrate plugin.")],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/Integrate.html"}},[e._v("Integrate")]),e._v(" plugin integrates the relative movements with minimum and maximum values set to "),t("strong",[e._v("0 and 240")]),e._v(" respectively (same as camera resolution). "),t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137796282-a2a080aa-d32a-4693-bfe8-af4a75dfadec.png",alt:"Head-Smiley-Control-Integrate-Properties"}})],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/SignalTranslation.html"}},[e._v("SignalTranslation")]),e._v(" plugin translates the values between "),t("strong",[e._v("0 and 240")]),e._v(" to values between "),t("strong",[e._v("1.00 and 4.00")]),e._v(". "),t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137796551-1629aea6-a031-4143-9502-7d2c2862ccbd.png",alt:"Head-Smiley-Control-SignalTranslator-Properties"}})],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/Quantizer.html"}},[e._v("Quantizer")]),e._v(" plugin creates a quantized (integer) number by rounding to the nearest integer number.")],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/processors/StringDispatcher.html"}},[e._v("StringDispatcher")]),e._v(" plugin has predefined Strings (paths to image files) which are sent to the output port depending on the input number (1-4). "),t("img",{attrs:{src:"https://user-images.githubusercontent.com/4621810/137797248-d663214b-8529-4493-858e-2bac85f129ae.png",alt:"Head-Smiley-Control-StringDispatcher-Properties"}})],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/actuators/TextDisplay.html"}},[e._v("TextDisplay")]),e._v(" widget shows the quantized number in a text box for debugging purposes only.")],1),e._v(" "),t("li",[e._v("The "),t("RouterLink",{attrs:{to:"/plugins/actuators/ImageBox.html"}},[e._v("ImageBox")]),e._v(" widget shows the image which path was received at the input port.")],1)]),e._v(" "),t("h2",{attrs:{id:"gaming"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gaming"}},[e._v("#")]),e._v(" Gaming")]),e._v(" "),t("p",[e._v("Many games can be controlled by keyboard shortcuts e.g. "),t("kbd",[e._v("a")]),e._v(","),t("kbd",[e._v("s")]),e._v(","),t("kbd",[e._v("d")]),e._v(","),t("kbd",[e._v("f")]),e._v(" or "),t("kbd",[e._v("left")]),e._v(","),t("kbd",[e._v("right")]),e._v(","),t("kbd",[e._v("up")]),e._v(","),t("kbd",[e._v("down")]),e._v(".\nYou can now use the "),t("a",{attrs:{href:"#head-movement-to-smiley-tutorial"}},[e._v("Head Movement to Smiley Tutorial")]),e._v(" and simply map the head up/down movement to a keyboard key by using they "),t("RouterLink",{attrs:{to:"/plugins/actuators/Keyboard.html"}},[e._v("Keyboard")]),e._v(" plugin.")],1),e._v(" "),t("p",[e._v("Simply exchange the slot Strings in the StringDispatcher plugin by the key strings or special key code strings (e.g. "),t("code",[e._v("{UP}")]),e._v(" for a cursor up key press emulation).")]),e._v(" "),t("h2",{attrs:{id:"sound-and-voice"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sound-and-voice"}},[e._v("#")]),e._v(" Sound and Voice")]),e._v(" "),t("p",[e._v("Instead of showing smiley images you can use the "),t("RouterLink",{attrs:{to:"/plugins/actuators/MidiPlayer.html"}},[e._v("MidiPlayer")]),e._v(" to create midi tones. In this case directly send the output value of the Quantizer plugin to the input port "),t("code",[e._v("pitch")]),e._v(".")],1),e._v(" "),t("p",[e._v("If you want to generate voice, set the slot strings of the StringDispatcher plugin to the words and sentences you would like to synthesize. You must then connect one of the voice generation plugins (e.g. "),t("RouterLink",{attrs:{to:"/plugins/processors/SpeechProcessor.html"}},[e._v("SpeechProcessor")]),e._v(", "),t("RouterLink",{attrs:{to:"/plugins/actuators/SyntheticVoice.html"}},[e._v("SyntheticVoice")]),e._v(", "),t("RouterLink",{attrs:{to:"/plugins/actuators/PicoTTS.html"}},[e._v("PicoTTS")]),e._v(" to it.")],1),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("project kissenklang")]),e._v(" uses a blood pressure cuff to create sounds using the "),t("RouterLink",{attrs:{to:"/plugins/actuators/MidiPlayer.html"}},[e._v("MidiPlayer")]),e._v(" plugin.")],1),e._v(" "),t("h2",{attrs:{id:"light"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#light"}},[e._v("#")]),e._v(" Light")]),e._v(" "),t("p",[e._v("If you would like to control an infrared-controlled light bulb, you can use the "),t("RouterLink",{attrs:{to:"/plugins/actuators/IRTrans.html"}},[e._v("IRTrans")]),e._v(" plugin and set the slot strings of the StringDispatcher plugin to the action strings of the respective infrared commands (e.g. "),t("code",[e._v("@IRTRANS: snd luminea-bulb,red")]),e._v(").")],1),e._v(" "),t("p",[e._v("Likewise you could use the "),t("RouterLink",{attrs:{to:"/plugins/actuators/PhilipsHue.html"}},[e._v("PhilipsHue")]),e._v(" plugin to control a Hue bulb depending on the head movement by setting the respective action string (e.g. "),t("code",[e._v('{"hue": 0, "sat": 254}')]),e._v(").")],1),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("project kissenklang")]),e._v(" uses a blood pressure cuff to control a light bulb via infrared commands sent by the "),t("RouterLink",{attrs:{to:"/plugins/actuators/IRTrans.html"}},[e._v("IRTrans")]),e._v(" plugin.")],1),e._v(" "),t("h2",{attrs:{id:"toys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#toys"}},[e._v("#")]),e._v(" Toys")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("project kissenklang")]),e._v(" uses a blood pressure cuff to control a toy robot via infrared commands sent by the "),t("RouterLink",{attrs:{to:"/plugins/actuators/IRTrans.html"}},[e._v("IRTrans")]),e._v(" plugin.")],1),e._v(" "),t("p",[e._v("The following tutorial documents a "),t("a",{attrs:{href:"https://www.ki-i.at/helicopter/",target:"_blank",rel:"noopener noreferrer"}},[e._v("toy helicopter controlled with muscle signals"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"example-projects"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-projects"}},[e._v("#")]),e._v(" Example Projects")]),e._v(" "),t("h3",{attrs:{id:"blood-pressure-cuff-sound-and-toy-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#blood-pressure-cuff-sound-and-toy-control"}},[e._v("#")]),e._v(" Blood Pressure Cuff Sound and Toy Control")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/asterics/unikate-kissenschalter",target:"_blank",rel:"noopener noreferrer"}},[e._v("project Kissenklang"),t("OutboundLink")],1),e._v(" used a consumer blood pressure cuff and the "),t("a",{attrs:{href:"https://www.asterics-foundation.org/projects/fabi/",target:"_blank",rel:"noopener noreferrer"}},[e._v("button interface FABI"),t("OutboundLink")],1),e._v(" to create sounds according to the pressure value of the cuff or to control various items like toy robots, soap bubble machine or infrared lights.")]),e._v(" "),t("h4",{attrs:{id:"demovideo-kissenklang"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#demovideo-kissenklang"}},[e._v("#")]),e._v(" Demovideo Kissenklang")]),e._v(" "),t("UseCase",{attrs:{title:"Kissenklang Demovideo",media:"https://youtu.be/5d4WYjJhgug"}},[e._v("Demo of Kissenklang generating sounds according to the pressure value of the blood pressure cuff.")])],1)}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/295.a2466f46.js b/assets/js/295.769ec7d8.js similarity index 97% rename from assets/js/295.a2466f46.js rename to assets/js/295.769ec7d8.js index 076da6434e..4bc199294e 100644 --- a/assets/js/295.a2466f46.js +++ b/assets/js/295.769ec7d8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[295],{935:function(e,t,a){"use strict";a.r(t);var i=a(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"other-use-cases-and-information"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-use-cases-and-information"}},[e._v("#")]),e._v(" Other Use Cases and Information")]),e._v(" "),t("h2",{attrs:{id:"complete-asterics-user-manual"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#complete-asterics-user-manual"}},[e._v("#")]),e._v(" Complete AsTeRICS User Manual")]),e._v(" "),t("p",[e._v("Here you can find the .pdf version of the original "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/raw/master/Documentation/UserManual.pdf",target:"_blank",rel:"noopener noreferrer"}},[e._v("UserManual"),t("OutboundLink")],1),e._v(" with more comprehensive information about:")]),e._v(" "),t("ul",[t("li",[e._v("the model creation process")]),e._v(" "),t("li",[e._v("more use cases and demo models (e.g. game accessibility and utilizing bioelectric signals)")]),e._v(" "),t("li",[e._v("hardware interfacing options")]),e._v(" "),t("li",[e._v("short overview on important plugins")])]),e._v(" "),t("p",[e._v("(Please note that this manual is not constantly updated and might contain outdated information).")]),e._v(" "),t("h2",{attrs:{id:"diy-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#diy-guides"}},[e._v("#")]),e._v(" DIY Guides")]),e._v(" "),t("p",[e._v("Here you can find some "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/Documentation/DIYGuides",target:"_blank",rel:"noopener noreferrer"}},[e._v("DIY-guides"),t("OutboundLink")],1),e._v(" for HW and SW solutions using AsTeRICS, including:")]),e._v(" "),t("ul",[t("li",[e._v("using AsTeRICS, an Arduino microcontroller and a pressure sensor for building a sip-and-puff device")]),e._v(" "),t("li",[e._v("building a proximity switch")]),e._v(" "),t("li",[e._v("building a head-mounted eye-tracker")]),e._v(" "),t("li",[e._v("building an EOG sensor")]),e._v(" "),t("li",[e._v("mouse/keyboard/joystick emualtion (eg. for play station control) with the HID-actuator")]),e._v(" "),t("li",[e._v("and more!")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[295],{934:function(e,t,a){"use strict";a.r(t);var i=a(2),n=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"other-use-cases-and-information"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-use-cases-and-information"}},[e._v("#")]),e._v(" Other Use Cases and Information")]),e._v(" "),t("h2",{attrs:{id:"complete-asterics-user-manual"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#complete-asterics-user-manual"}},[e._v("#")]),e._v(" Complete AsTeRICS User Manual")]),e._v(" "),t("p",[e._v("Here you can find the .pdf version of the original "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/raw/master/Documentation/UserManual.pdf",target:"_blank",rel:"noopener noreferrer"}},[e._v("UserManual"),t("OutboundLink")],1),e._v(" with more comprehensive information about:")]),e._v(" "),t("ul",[t("li",[e._v("the model creation process")]),e._v(" "),t("li",[e._v("more use cases and demo models (e.g. game accessibility and utilizing bioelectric signals)")]),e._v(" "),t("li",[e._v("hardware interfacing options")]),e._v(" "),t("li",[e._v("short overview on important plugins")])]),e._v(" "),t("p",[e._v("(Please note that this manual is not constantly updated and might contain outdated information).")]),e._v(" "),t("h2",{attrs:{id:"diy-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#diy-guides"}},[e._v("#")]),e._v(" DIY Guides")]),e._v(" "),t("p",[e._v("Here you can find some "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/Documentation/DIYGuides",target:"_blank",rel:"noopener noreferrer"}},[e._v("DIY-guides"),t("OutboundLink")],1),e._v(" for HW and SW solutions using AsTeRICS, including:")]),e._v(" "),t("ul",[t("li",[e._v("using AsTeRICS, an Arduino microcontroller and a pressure sensor for building a sip-and-puff device")]),e._v(" "),t("li",[e._v("building a proximity switch")]),e._v(" "),t("li",[e._v("building a head-mounted eye-tracker")]),e._v(" "),t("li",[e._v("building an EOG sensor")]),e._v(" "),t("li",[e._v("mouse/keyboard/joystick emualtion (eg. for play station control) with the HID-actuator")]),e._v(" "),t("li",[e._v("and more!")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/296.e15007b1.js b/assets/js/296.f0aee286.js similarity index 99% rename from assets/js/296.e15007b1.js rename to assets/js/296.f0aee286.js index be75e7c805..c84404dcda 100644 --- a/assets/js/296.e15007b1.js +++ b/assets/js/296.f0aee286.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[296],{934:function(e,t,o){"use strict";o.r(t);var a=o(2),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"asterics-packaging-environment-ape"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-packaging-environment-ape"}},[e._v("#")]),e._v(" AsTeRICS Packaging Environment (APE)")]),e._v(" "),t("p",[e._v("The APE let’s you select a set of AsTeRICS model files and create a downstripped (minimum size) version of the ARE including plugins, configuration files and data files to execute the models. Optionally, the APE allows the creation of native installers for Windows, Linux incl. Raspberry Pi and Mac OSX using "),t("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI",target:"_blank",rel:"noopener noreferrer"}},[e._v("JavaFX packaging technology"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"ape-consists-of-two-major-elements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ape-consists-of-two-major-elements"}},[e._v("#")]),e._v(" APE consists of two major elements")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"#ape-copy-commandline-tool"}},[t("strong",[e._v("APE-copy command line tool")])]),e._v(": a commandine tool to create a downstripped version of the ARE based on provided model files")]),e._v(" "),t("li",[t("a",{attrs:{href:"#build-infrastructure-and-native-installer-creation"}},[t("strong",[e._v("Build infrastructure")])]),e._v(": a "),t("a",{attrs:{href:"template"}},[e._v("template")]),e._v(" project directory including an "),t("a",{attrs:{href:"https://ant.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ant"),t("OutboundLink")],1),e._v(" build file and a property file "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(". The build file contains the target "),t("code",[e._v("ant APE-copy")]),e._v(" which provides the functionality of the APE-copy commandline tool and the target "),t("code",[e._v("APE deploy")]),e._v(" to trigger the creation of "),t("strong",[e._v("native installer")]),e._v(" and "),t("strong",[e._v("native launcher")]),e._v(" for a dedicated target platform.")])]),e._v(" "),t("h2",{attrs:{id:"important-terms"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#important-terms"}},[e._v("#")]),e._v(" Important Terms")]),e._v(" "),t("p",[e._v("The term "),t("code",[e._v("APE.baseURI")]),e._v(" refers to the location of "),t("code",[e._v("APE.jar")]),e._v(" and the "),t("code",[e._v("APE-copy")]),e._v(" command, which is in the folder "),t("code",[e._v("APE")]),e._v(" parallel to the "),t("code",[e._v("ARE")]),e._v(" folder of an AsTeRICS installation. The "),t("code",[e._v("APE.baseURI")]),e._v(" folder also contains the build infrastructure to create the native installers and contains the default project directory ("),t("code",[e._v("APE.projectDir=/defProjectDir")]),e._v(") and the default build directory ("),t("code",[e._v("APE.buildDir=/defProjectDir/build")]),e._v("). "),t("code",[e._v("APE.models")]),e._v(" refers to file and directory paths containing model files to use. Finally, "),t("code",[e._v("ARE.baseURI")]),e._v(" refers to the location of the ARE that is used as the source for the extracted ARE versions.")]),e._v(" "),t("h2",{attrs:{id:"dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),t("p",[e._v("The commandline tool APE-copy only needs a Java Runtime Environment. In order to use the ant build targets and create native installers you also need "),t("strong",[e._v("ant")]),e._v(" and a "),t("strong",[e._v("Java Development Kit 8")]),e._v(".")]),e._v(" "),t("ul",[t("li",[e._v("Install the ["),t("strong",[e._v("Java Development Kit 8 (32-bit)")]),e._v("] (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)\n"),t("ul",[t("li",[e._v("Verify the java installation by opening a command shell and entering "),t("code",[e._v("javac -version")]),e._v(". In case of trouble, ensure to set “JAVA_HOME” to the folder where you installed the Java JDK and add the JDK bin path to the Environment Variable “Path”")])])]),e._v(" "),t("li",[e._v("Install the ["),t("strong",[e._v("apache ant build framework (version >= 1.9.1)")]),e._v("] (http://ant.apache.org/bindownload.cgi)\n"),t("ul",[t("li",[e._v("Ensure to set “ANT_HOME” to the folder where you installed ant and add the ant bin path to the Environment Variable “Path”")])])]),e._v(" "),t("li",[t("strong",[e._v("Only for native installer creation")]),e._v(": Install installer-specific toolkits like [InnoSetup >= 5] (http://www.jrsoftware.org/isdl.php) (.exe), "),t("a",{attrs:{href:"http://wixtoolset.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("WiX toolset >= 3.0"),t("OutboundLink")],1),e._v(" (.msi) or [debian packaging tools] (https://wiki.debian.org/PackageManagement) (.deb) depending on the required target platform. You must run the installer build process on the target platform of the installer. For more details, read the [JavaFX packaging tutorial] (https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#A1324980)")])]),e._v(" "),t("h2",{attrs:{id:"ape-copy-commandline-tool"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ape-copy-commandline-tool"}},[e._v("#")]),e._v(" APE-copy commandline tool")]),e._v(" "),t("p",[e._v("Check the "),t("a",{attrs:{href:"#dependencies"}},[e._v("dependencies")]),e._v(" before you start.")]),e._v(" "),t("p",[e._v("To start APE-copy, call")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("APE-copy[.bat|.sh] -DAPE.models= [[-DAPE.buildDir=] [-DARE.baseURI=] [-DAPE.projectDir=/custom/bin/ARE/models")]),e._v(" is automatically added to the parameter.")]),e._v(" "),t("li",[t("strong",[e._v("APE.buildDir")]),e._v(": The path to the build (output) folder. The downsized ARE is copied to that folder. The path can be relative or absolute where a relative path is resolved against the APE directory. By default, the "),t("code",[e._v("build")]),e._v(" subfolder of the project directory ("),t("code",[e._v("APE.projectDir")]),e._v(") is used.")]),e._v(" "),t("li",[t("strong",[e._v("ARE.baseURI")]),e._v(": The path to the ARE installation. This can be the path to the "),t("code",[e._v("bin/ARE")]),e._v(" folder of a development version (cloned git repository) or the "),t("code",[e._v("ARE")]),e._v(" path of an installed AsTeRICS release (>= 2.8). The path can be relative or absolute where a relative path is resolved against the APE directory. By default, the parallel ```ARE`` folder is used.")]),e._v(" "),t("li",[t("strong",[e._v("APE.projectDir")]),e._v(": The path of the project directory to use. If the directory does not exist it is automatically created by copying the "),t("a",{attrs:{href:"#simplified-folder-structure"}},[t("code",[e._v("template")])]),e._v(" directory to the project directory. The given project directory must contain the "),t("code",[e._v("APE.properties")]),e._v(" file, which contains default project-specific property values that can be overridden by the commandline switches of APE-copy. Additionally, the files and resources in the subfolder "),t("code",[e._v("custom")]),e._v(" are finally copied to the target build directory ("),t("code",[e._v("APE.buildDir")]),e._v("). Read more about [customization of the ARE] here. By default, the project directory "),t("code",[e._v("APE.projectDir=/defProjectDir")]),e._v(" is used.")]),e._v(" "),t("li",[t("strong",[e._v("APE.logLevel")]),e._v(": You can specify the verbosity of the console output of the APE-copy command. Additionally, the log messages of the command execution are logged to the "),t("code",[e._v("/tmp")])])]),e._v(" "),t("h3",{attrs:{id:"example-usages-of-the-ape-copy-commandline-tool"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-usages-of-the-ape-copy-commandline-tool"}},[e._v("#")]),e._v(" Example usages of the APE-copy commandline tool")]),e._v(" "),t("p",[e._v("You should be able to copy/paste the example commands below as long as you replace the placeholder with real values. The examples use windows path notations.")]),e._v(" "),t("p",[t("strong",[e._v("Note for Linux, Mac OSX")]),e._v(": On Linux and Mac OSX you must use "),t("code",[e._v("APE-copy.sh")]),e._v(" and slashify (’/’ instead of ‘’) the paths.")]),e._v(" "),t("h4",{attrs:{id:"one-model-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file"}},[e._v("#")]),e._v(" One model file")]),e._v(" "),t("p",[e._v("Create a downstripped ARE package of the model file "),t("code",[e._v("ImageDemo.acs")]),e._v(" located in the "),t("code",[e._v("ARE/models")]),e._v(" folder.\nBy default, the result is written to the folder "),t("code",[e._v("/merged")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nAPE-copy -DAPE.models=../ARE/models/ImageDemo.acs\n")])])]),t("h4",{attrs:{id:"several-model-files-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#several-model-files-folder"}},[e._v("#")]),e._v(" Several model files/folder")]),e._v(" "),t("p",[e._v("When specifying a folder, all contained model files (recursively) will be used. Several file or folder URIs can be seperated by a ‘"),t("strong",[e._v(";")]),e._v("’. Relative and absolute URIs can be mixed. By default, the result is written to the folder "),t("code",[e._v("/merged")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nAPE-copy -DAPE.models=../ARE/models/ImageDemo.acs;../ARE/models/eyetracking;D:/MyModelFiles/\n")])])]),t("h4",{attrs:{id:"one-model-file-custom-build-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-custom-build-folder"}},[e._v("#")]),e._v(" One model file, custom build folder")]),e._v(" "),t("p",[e._v("You can specify a custom build folder with the property "),t("code",[e._v("APE.buildDir")])]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nAPE-copy -DAPE.models=../ARE/models/ImageDemo.acs -DAPE.buildDir=C:\\ImageDemo\n")])])]),t("h2",{attrs:{id:"build-infrastructure-and-native-installer-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-infrastructure-and-native-installer-creation"}},[e._v("#")]),e._v(" Build infrastructure and native installer creation")]),e._v(" "),t("p",[e._v("The tool APE-copy is only used to copy the required resources for a given model file to a certain location, but APE also provides a full build infrastructure ("),t("code",[e._v("APE.projectDir=/defProjectDir")]),e._v(") that let’s you")]),e._v(" "),t("ul",[t("li",[e._v("configure the properties for APE-copy and the creation of native installers in a single file ("),t("code",[e._v("/APE.properties")]),e._v(")")]),e._v(" "),t("li",[e._v("replace single files/resources (images, model files, component and services jars and the respective configurations,…) of the ARE installation with custom files of the folder "),t("code",[e._v("/custom")])]),e._v(" "),t("li",[e._v("customize the installer creation by providing drop-in resources and installer-specific files in the folder "),t("code",[e._v("/package/linux")]),e._v(", "),t("code",[e._v("/package/windows")]),e._v(" or "),t("code",[e._v("/package/macosx")])]),e._v(" "),t("li",[e._v("trigger the creation of a native installer by using the provided ant build file at "),t("code",[e._v("/build.xml")])])]),e._v(" "),t("h3",{attrs:{id:"simplified-folder-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#simplified-folder-structure"}},[e._v("#")]),e._v(" Simplified folder structure")]),e._v(" "),t("p",[e._v("Subsequently you can see the simplified folder structure of an APE-based project, which contains an ant build file ("),t("strong",[t("code",[e._v("build.xml")])]),e._v("), a property-based configuration file ("),t("strong",[t("code",[e._v("APE.properties")])]),e._v("), the "),t("strong",[t("code",[e._v("custom/bin/ARE")])]),e._v(" folder to store the solution-specific files (e.g. model files), a "),t("strong",[t("code",[e._v("build")])]),e._v(" folder and a "),t("strong",[t("code",[e._v("package")])]),e._v(" folder for native installer customization.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("build\n |- merged\n |- deploy\ncustom\n |- bin/ARE\n |- data\n |- images\n |- LICENSE\n |- models\n |- .acs\n |- ...\n |-profile\npackage\n |- linux\n |- windows\n |- macosx\nAPE.properties\nbuild.xml\n")])])]),t("h3",{attrs:{id:"general-workflow-for-using-the-build-infrastructure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general-workflow-for-using-the-build-infrastructure"}},[e._v("#")]),e._v(" General workflow for using the build infrastructure")]),e._v(" "),t("p",[e._v("If you want to start a new project based on AsTeRICS functionality, you would normally")]),e._v(" "),t("ol",[t("li",[e._v("Use the subfolder "),t("code",[e._v("defProjectDir")]),e._v(" directly or copy the "),t("a",{attrs:{href:"template"}},[e._v("template")]),e._v(" project directory to your project repository location.")]),e._v(" "),t("li",[e._v("Edit "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(" and set the location of the AsTeRICS ARE ("),t("code",[e._v("ARE.baseURI")]),e._v(") to use for APE-copy. You only have to set "),t("code",[e._v("ARE.baseURI")]),e._v(" if you use a project directory not within the AsTeRICS APE directory.")]),e._v(" "),t("li",[e._v("Create your AsTeRICS solution and save all needed resources (model files, images, configuration files,…) to the "),t("code",[e._v("custom/bin/ARE")]),e._v(" folder.")]),e._v(" "),t("li",[e._v("Call "),t("code",[e._v("ant APE-copy")]),e._v(" to create the extracted ARE solution or "),t("code",[e._v("ant deploy")]),e._v(" to create a native installer for a certain target platform")])]),e._v(" "),t("p",[e._v("Many Integrated Development Environments (IDE) like Eclipse support the ant build system. So you can use your favourite IDE to edit and build the project.")]),e._v(" "),t("h3",{attrs:{id:"example-usages-of-the-build-infrastructure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-usages-of-the-build-infrastructure"}},[e._v("#")]),e._v(" Example usages of the build infrastructure")]),e._v(" "),t("p",[e._v("Check the "),t("a",{attrs:{href:"#dependencies"}},[e._v("dependencies")]),e._v(" before you start.")]),e._v(" "),t("h4",{attrs:{id:"one-model-file-ant-ape-copy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-ant-ape-copy"}},[e._v("#")]),e._v(" One model file, ant APE-copy")]),e._v(" "),t("p",[e._v("Copy the model file "),t("code",[e._v("/models/ImageDemo.acs")]),e._v(" to the location "),t("code",[e._v("/custom/bin/ARE/models")]),e._v(" or edit the "),t("code",[e._v("APE.models")]),e._v(" property in the file "),t("code",[e._v("/APE.properties")]),e._v(". Then execute the following commands:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nant APE-copy\n")])])]),t("p",[e._v("The extracted ARE version can be found at "),t("code",[e._v("/build/merged/")]),e._v(", to test it, execute")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd build/merged/bin/ARE\nstart.bat\n")])])]),t("h4",{attrs:{id:"one-model-file-windows-exe-installer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-windows-exe-installer"}},[e._v("#")]),e._v(" One model file, windows .exe installer")]),e._v(" "),t("p",[e._v("To create a native .exe installer [InnoSetup >= 5] (http://www.jrsoftware.org/isdl.php) must be installed and the build process must be run on a Windows system.")]),e._v(" "),t("p",[e._v("Copy the model file "),t("code",[e._v("/models/ImageDemo.acs")]),e._v(" to the location "),t("code",[e._v("/custom/bin/ARE/models")]),e._v(" or edit the "),t("code",[e._v("APE.models")]),e._v(" property in the file "),t("code",[e._v("/APE.properties")]),e._v(". Then execute the following commands:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nant deploy\n")])])]),t("p",[e._v("By default, all supported installer types for the currently running platform are created and stored at "),t("code",[e._v("/deploy/bundles")]),e._v("\nThis can be changed by setting the property "),t("code",[e._v("fx.deploy.nativeBundles")]),e._v(" to another value like "),t("code",[e._v("msi")])]),e._v(" "),t("h4",{attrs:{id:"one-model-file-linux-debian-package"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-linux-debian-package"}},[e._v("#")]),e._v(" One model file, Linux debian package")]),e._v(" "),t("p",[e._v("To create a debian installer the [debian packaging tools] (https://wiki.debian.org/PackageManagement) must be installed and the build process must be run on a debian-based Linux.")]),e._v(" "),t("p",[e._v("Copy the model file "),t("code",[e._v("/models/ImageDemo.acs")]),e._v(" to the location "),t("code",[e._v("/custom/bin/ARE/models")]),e._v(" or edit the "),t("code",[e._v("APE.models")]),e._v(" property in the file "),t("code",[e._v("/APE.properties")]),e._v(". Then execute the following commands:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nant deploy\n")])])]),t("p",[e._v("By default, all supported installer types for the currently running platform are created and stored at "),t("code",[e._v("/deploy/bundles")]),e._v("\nThis can be changed by setting the property "),t("code",[e._v("fx.deploy.nativeBundles")]),e._v(" to another value like "),t("code",[e._v("deb")]),e._v(". On Linux, although also a .rpm package could be created by JavaFX packaging technology, APE only supports debian packages because the ARE needs some postinstall and prerm operations in order to run on Linux.")]),e._v(" "),t("h4",{attrs:{id:"one-model-file-mac-osx-dmg-installer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-mac-osx-dmg-installer"}},[e._v("#")]),e._v(" One model file, Mac OSX dmg installer")]),e._v(" "),t("p",[e._v("Run one of the above examples on Mac OSX to create a .dmg installer. The .dmg packaging dependencies should already be contained in your Mac OSX version.")]),e._v(" "),t("h3",{attrs:{id:"properties-for-copying-extraction-behaviour-of-ape"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties-for-copying-extraction-behaviour-of-ape"}},[e._v("#")]),e._v(" Properties for copying/extraction behaviour of APE")]),e._v(" "),t("p",[e._v("To change the behaviour of the ARE extraction with APE-copy, edit the following properties of "),t("a",{attrs:{href:"template/APE.properties"}},[e._v("APE.properties")])]),e._v(" "),t("ul",[t("li",[e._v("``APE.models```: Defines model files and folder containing model files to use")]),e._v(" "),t("li",[t("code",[e._v("APE.dataCopyMode")]),e._v(": Define if all the data files of the "),t("code",[e._v("/data")]),e._v(" folder should be copied or just some.")]),e._v(" "),t("li",[t("code",[e._v("APE.servicesFiles")]),e._v(": Define if optional service configuration files should be used.")])]),e._v(" "),t("h3",{attrs:{id:"properties-for-installer-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties-for-installer-creation"}},[e._v("#")]),e._v(" Properties for installer creation")]),e._v(" "),t("p",[e._v("The provided build files only support a subset of the whole functionality of "),t("a",{attrs:{href:"https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/javafx_ant_task_reference.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("JavaFX packaging"),t("OutboundLink")],1),e._v(".\nTo change the behaviour of the installer creation, consider the following properties in "),t("a",{attrs:{href:"template/APE.properties"}},[e._v("APE.properties")])]),e._v(" "),t("ul",[t("li",[t("code",[e._v("fx.deploy.nativeBundles")]),e._v(": To define installer type to create")]),e._v(" "),t("li",[t("code",[e._v("fx.application.*")]),e._v(" and "),t("code",[e._v("fx.info.*")]),e._v(": To describe meta information of your application")]),e._v(" "),t("li",[t("code",[e._v("fx.preferences.*")]),e._v(": To define the desktop integration of the application")]),e._v(" "),t("li",[t("code",[e._v("APE.embedJava")]),e._v(" and "),t("code",[e._v("fx.platform.basedir")]),e._v(": To embed a Java Runtime Environment into your native installer. The embedded java is linked to the native application launcher. If it is not embedded the default system java is used (only on Windows and Mac OSX).")])]),e._v(" "),t("h3",{attrs:{id:"are-customization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-customization"}},[e._v("#")]),e._v(" ARE customization")]),e._v(" "),t("p",[e._v("The ARE can be customized by replacing single files/resources (images, model files, component and services jars and the respective configurations,…) of the ARE installation with custom files of the folder "),t("code",[e._v("/custom/bin/ARE")]),e._v(". You only must ensure to use the same relative file paths.")]),e._v(" "),t("h4",{attrs:{id:"skipping-non-used-are-services"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#skipping-non-used-are-services"}},[e._v("#")]),e._v(" Skipping non-used ARE services")]),e._v(" "),t("p",[e._v("If you want to exclude some of the ARE services (e.g. "),t("code",[e._v("javacv-*.jar")]),e._v(" or "),t("code",[e._v("cimcommunication*")]),e._v(".jar), simply copy the services configuration files of "),t("code",[e._v("/profile/*.ini")]),e._v(" to the "),t("code",[e._v("/custom/bin/ARE/profile")]),e._v(" folder and edit them. You can exclude a service by commenting it out (prepending #) in the respective .ini file.")]),e._v(" "),t("h3",{attrs:{id:"installer-customization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installer-customization"}},[e._v("#")]),e._v(" Installer customization")]),e._v(" "),t("p",[e._v("If you want to customize installer-specific configuration files (.e.g .iss for .exe installer) or add your own application icon. Use the respective platform-specific subfolder in the "),t("a",{attrs:{href:"template/package"}},[e._v("package")]),e._v(" folder. There you can place replacement files for the default ones. To find out the supported files, that can be replaced, enable verbosity by setting "),t("code",[e._v("fx.deploy.verbose=true")]),e._v(" in the "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(" file.")]),e._v(" "),t("p",[e._v("Summurized, the following steps are necessary:")]),e._v(" "),t("ol",[t("li",[e._v("Enable verbose mode in "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(": "),t("code",[e._v("fx.deploy.verbose=true")])]),e._v(" "),t("li",[e._v("Run "),t("code",[e._v("ant deploy")])]),e._v(" "),t("li",[e._v("Copy the resources (e.g. .iss or icon files) from the temp folder of the installer creation to the "),t("a",{attrs:{href:"template/package"}},[e._v("package/")]),e._v(" folder")]),e._v(" "),t("li",[e._v("Edit the custom files")]),e._v(" "),t("li",[e._v("Rerun "),t("code",[e._v("ant deploy")])])]),e._v(" "),t("p",[e._v("If you want to know more, read "),t("a",{attrs:{href:"https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGICFDB",target:"_blank",rel:"noopener noreferrer"}},[e._v("Customizing the Package Using Drop-In Resources"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"ant-build-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ant-build-files"}},[e._v("#")]),e._v(" ant build files")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("template")]),e._v(" directory contains two ant build files: "),t("a",{attrs:{href:"template/build.xml"}},[e._v("build.xml")]),e._v(" and "),t("a",{attrs:{href:"template/imported.xml"}},[e._v("imported.xml")]),e._v(". The file "),t("code",[e._v("build.xml")]),e._v(" contains some targets left for customization of the deployment build process. The targets "),t("code",[e._v("before-deploy, before-deploy-windows, before-deploy-linux and before-deploy-macosx")]),e._v(" are called after the "),t("code",[e._v("APE-copy")]),e._v(" target and before the "),t("code",[e._v("deploy")]),e._v(" target. This way generic and platform-specific task can be added before the installer creation is triggered. You can use it to delete files which are not needed for a certain target platform (e.g. ARE.exe on Linux or javacv-*-macosx on Windows).\nThe second build-file "),t("code",[e._v("imported.xml")]),e._v(" contains the internal targets and should not be modified except you really know, what you do.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[296],{936:function(e,t,o){"use strict";o.r(t);var a=o(2),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"asterics-packaging-environment-ape"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#asterics-packaging-environment-ape"}},[e._v("#")]),e._v(" AsTeRICS Packaging Environment (APE)")]),e._v(" "),t("p",[e._v("The APE let’s you select a set of AsTeRICS model files and create a downstripped (minimum size) version of the ARE including plugins, configuration files and data files to execute the models. Optionally, the APE allows the creation of native installers for Windows, Linux incl. Raspberry Pi and Mac OSX using "),t("a",{attrs:{href:"http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI",target:"_blank",rel:"noopener noreferrer"}},[e._v("JavaFX packaging technology"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"ape-consists-of-two-major-elements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ape-consists-of-two-major-elements"}},[e._v("#")]),e._v(" APE consists of two major elements")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"#ape-copy-commandline-tool"}},[t("strong",[e._v("APE-copy command line tool")])]),e._v(": a commandine tool to create a downstripped version of the ARE based on provided model files")]),e._v(" "),t("li",[t("a",{attrs:{href:"#build-infrastructure-and-native-installer-creation"}},[t("strong",[e._v("Build infrastructure")])]),e._v(": a "),t("a",{attrs:{href:"template"}},[e._v("template")]),e._v(" project directory including an "),t("a",{attrs:{href:"https://ant.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ant"),t("OutboundLink")],1),e._v(" build file and a property file "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(". The build file contains the target "),t("code",[e._v("ant APE-copy")]),e._v(" which provides the functionality of the APE-copy commandline tool and the target "),t("code",[e._v("APE deploy")]),e._v(" to trigger the creation of "),t("strong",[e._v("native installer")]),e._v(" and "),t("strong",[e._v("native launcher")]),e._v(" for a dedicated target platform.")])]),e._v(" "),t("h2",{attrs:{id:"important-terms"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#important-terms"}},[e._v("#")]),e._v(" Important Terms")]),e._v(" "),t("p",[e._v("The term "),t("code",[e._v("APE.baseURI")]),e._v(" refers to the location of "),t("code",[e._v("APE.jar")]),e._v(" and the "),t("code",[e._v("APE-copy")]),e._v(" command, which is in the folder "),t("code",[e._v("APE")]),e._v(" parallel to the "),t("code",[e._v("ARE")]),e._v(" folder of an AsTeRICS installation. The "),t("code",[e._v("APE.baseURI")]),e._v(" folder also contains the build infrastructure to create the native installers and contains the default project directory ("),t("code",[e._v("APE.projectDir=/defProjectDir")]),e._v(") and the default build directory ("),t("code",[e._v("APE.buildDir=/defProjectDir/build")]),e._v("). "),t("code",[e._v("APE.models")]),e._v(" refers to file and directory paths containing model files to use. Finally, "),t("code",[e._v("ARE.baseURI")]),e._v(" refers to the location of the ARE that is used as the source for the extracted ARE versions.")]),e._v(" "),t("h2",{attrs:{id:"dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),t("p",[e._v("The commandline tool APE-copy only needs a Java Runtime Environment. In order to use the ant build targets and create native installers you also need "),t("strong",[e._v("ant")]),e._v(" and a "),t("strong",[e._v("Java Development Kit 8")]),e._v(".")]),e._v(" "),t("ul",[t("li",[e._v("Install the ["),t("strong",[e._v("Java Development Kit 8 (32-bit)")]),e._v("] (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)\n"),t("ul",[t("li",[e._v("Verify the java installation by opening a command shell and entering "),t("code",[e._v("javac -version")]),e._v(". In case of trouble, ensure to set “JAVA_HOME” to the folder where you installed the Java JDK and add the JDK bin path to the Environment Variable “Path”")])])]),e._v(" "),t("li",[e._v("Install the ["),t("strong",[e._v("apache ant build framework (version >= 1.9.1)")]),e._v("] (http://ant.apache.org/bindownload.cgi)\n"),t("ul",[t("li",[e._v("Ensure to set “ANT_HOME” to the folder where you installed ant and add the ant bin path to the Environment Variable “Path”")])])]),e._v(" "),t("li",[t("strong",[e._v("Only for native installer creation")]),e._v(": Install installer-specific toolkits like [InnoSetup >= 5] (http://www.jrsoftware.org/isdl.php) (.exe), "),t("a",{attrs:{href:"http://wixtoolset.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("WiX toolset >= 3.0"),t("OutboundLink")],1),e._v(" (.msi) or [debian packaging tools] (https://wiki.debian.org/PackageManagement) (.deb) depending on the required target platform. You must run the installer build process on the target platform of the installer. For more details, read the [JavaFX packaging tutorial] (https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#A1324980)")])]),e._v(" "),t("h2",{attrs:{id:"ape-copy-commandline-tool"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ape-copy-commandline-tool"}},[e._v("#")]),e._v(" APE-copy commandline tool")]),e._v(" "),t("p",[e._v("Check the "),t("a",{attrs:{href:"#dependencies"}},[e._v("dependencies")]),e._v(" before you start.")]),e._v(" "),t("p",[e._v("To start APE-copy, call")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("APE-copy[.bat|.sh] -DAPE.models= [[-DAPE.buildDir=] [-DARE.baseURI=] [-DAPE.projectDir=/custom/bin/ARE/models")]),e._v(" is automatically added to the parameter.")]),e._v(" "),t("li",[t("strong",[e._v("APE.buildDir")]),e._v(": The path to the build (output) folder. The downsized ARE is copied to that folder. The path can be relative or absolute where a relative path is resolved against the APE directory. By default, the "),t("code",[e._v("build")]),e._v(" subfolder of the project directory ("),t("code",[e._v("APE.projectDir")]),e._v(") is used.")]),e._v(" "),t("li",[t("strong",[e._v("ARE.baseURI")]),e._v(": The path to the ARE installation. This can be the path to the "),t("code",[e._v("bin/ARE")]),e._v(" folder of a development version (cloned git repository) or the "),t("code",[e._v("ARE")]),e._v(" path of an installed AsTeRICS release (>= 2.8). The path can be relative or absolute where a relative path is resolved against the APE directory. By default, the parallel ```ARE`` folder is used.")]),e._v(" "),t("li",[t("strong",[e._v("APE.projectDir")]),e._v(": The path of the project directory to use. If the directory does not exist it is automatically created by copying the "),t("a",{attrs:{href:"#simplified-folder-structure"}},[t("code",[e._v("template")])]),e._v(" directory to the project directory. The given project directory must contain the "),t("code",[e._v("APE.properties")]),e._v(" file, which contains default project-specific property values that can be overridden by the commandline switches of APE-copy. Additionally, the files and resources in the subfolder "),t("code",[e._v("custom")]),e._v(" are finally copied to the target build directory ("),t("code",[e._v("APE.buildDir")]),e._v("). Read more about [customization of the ARE] here. By default, the project directory "),t("code",[e._v("APE.projectDir=/defProjectDir")]),e._v(" is used.")]),e._v(" "),t("li",[t("strong",[e._v("APE.logLevel")]),e._v(": You can specify the verbosity of the console output of the APE-copy command. Additionally, the log messages of the command execution are logged to the "),t("code",[e._v("/tmp")])])]),e._v(" "),t("h3",{attrs:{id:"example-usages-of-the-ape-copy-commandline-tool"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-usages-of-the-ape-copy-commandline-tool"}},[e._v("#")]),e._v(" Example usages of the APE-copy commandline tool")]),e._v(" "),t("p",[e._v("You should be able to copy/paste the example commands below as long as you replace the placeholder with real values. The examples use windows path notations.")]),e._v(" "),t("p",[t("strong",[e._v("Note for Linux, Mac OSX")]),e._v(": On Linux and Mac OSX you must use "),t("code",[e._v("APE-copy.sh")]),e._v(" and slashify (’/’ instead of ‘’) the paths.")]),e._v(" "),t("h4",{attrs:{id:"one-model-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file"}},[e._v("#")]),e._v(" One model file")]),e._v(" "),t("p",[e._v("Create a downstripped ARE package of the model file "),t("code",[e._v("ImageDemo.acs")]),e._v(" located in the "),t("code",[e._v("ARE/models")]),e._v(" folder.\nBy default, the result is written to the folder "),t("code",[e._v("/merged")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nAPE-copy -DAPE.models=../ARE/models/ImageDemo.acs\n")])])]),t("h4",{attrs:{id:"several-model-files-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#several-model-files-folder"}},[e._v("#")]),e._v(" Several model files/folder")]),e._v(" "),t("p",[e._v("When specifying a folder, all contained model files (recursively) will be used. Several file or folder URIs can be seperated by a ‘"),t("strong",[e._v(";")]),e._v("’. Relative and absolute URIs can be mixed. By default, the result is written to the folder "),t("code",[e._v("/merged")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nAPE-copy -DAPE.models=../ARE/models/ImageDemo.acs;../ARE/models/eyetracking;D:/MyModelFiles/\n")])])]),t("h4",{attrs:{id:"one-model-file-custom-build-folder"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-custom-build-folder"}},[e._v("#")]),e._v(" One model file, custom build folder")]),e._v(" "),t("p",[e._v("You can specify a custom build folder with the property "),t("code",[e._v("APE.buildDir")])]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nAPE-copy -DAPE.models=../ARE/models/ImageDemo.acs -DAPE.buildDir=C:\\ImageDemo\n")])])]),t("h2",{attrs:{id:"build-infrastructure-and-native-installer-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-infrastructure-and-native-installer-creation"}},[e._v("#")]),e._v(" Build infrastructure and native installer creation")]),e._v(" "),t("p",[e._v("The tool APE-copy is only used to copy the required resources for a given model file to a certain location, but APE also provides a full build infrastructure ("),t("code",[e._v("APE.projectDir=/defProjectDir")]),e._v(") that let’s you")]),e._v(" "),t("ul",[t("li",[e._v("configure the properties for APE-copy and the creation of native installers in a single file ("),t("code",[e._v("/APE.properties")]),e._v(")")]),e._v(" "),t("li",[e._v("replace single files/resources (images, model files, component and services jars and the respective configurations,…) of the ARE installation with custom files of the folder "),t("code",[e._v("/custom")])]),e._v(" "),t("li",[e._v("customize the installer creation by providing drop-in resources and installer-specific files in the folder "),t("code",[e._v("/package/linux")]),e._v(", "),t("code",[e._v("/package/windows")]),e._v(" or "),t("code",[e._v("/package/macosx")])]),e._v(" "),t("li",[e._v("trigger the creation of a native installer by using the provided ant build file at "),t("code",[e._v("/build.xml")])])]),e._v(" "),t("h3",{attrs:{id:"simplified-folder-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#simplified-folder-structure"}},[e._v("#")]),e._v(" Simplified folder structure")]),e._v(" "),t("p",[e._v("Subsequently you can see the simplified folder structure of an APE-based project, which contains an ant build file ("),t("strong",[t("code",[e._v("build.xml")])]),e._v("), a property-based configuration file ("),t("strong",[t("code",[e._v("APE.properties")])]),e._v("), the "),t("strong",[t("code",[e._v("custom/bin/ARE")])]),e._v(" folder to store the solution-specific files (e.g. model files), a "),t("strong",[t("code",[e._v("build")])]),e._v(" folder and a "),t("strong",[t("code",[e._v("package")])]),e._v(" folder for native installer customization.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("build\n |- merged\n |- deploy\ncustom\n |- bin/ARE\n |- data\n |- images\n |- LICENSE\n |- models\n |- .acs\n |- ...\n |-profile\npackage\n |- linux\n |- windows\n |- macosx\nAPE.properties\nbuild.xml\n")])])]),t("h3",{attrs:{id:"general-workflow-for-using-the-build-infrastructure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#general-workflow-for-using-the-build-infrastructure"}},[e._v("#")]),e._v(" General workflow for using the build infrastructure")]),e._v(" "),t("p",[e._v("If you want to start a new project based on AsTeRICS functionality, you would normally")]),e._v(" "),t("ol",[t("li",[e._v("Use the subfolder "),t("code",[e._v("defProjectDir")]),e._v(" directly or copy the "),t("a",{attrs:{href:"template"}},[e._v("template")]),e._v(" project directory to your project repository location.")]),e._v(" "),t("li",[e._v("Edit "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(" and set the location of the AsTeRICS ARE ("),t("code",[e._v("ARE.baseURI")]),e._v(") to use for APE-copy. You only have to set "),t("code",[e._v("ARE.baseURI")]),e._v(" if you use a project directory not within the AsTeRICS APE directory.")]),e._v(" "),t("li",[e._v("Create your AsTeRICS solution and save all needed resources (model files, images, configuration files,…) to the "),t("code",[e._v("custom/bin/ARE")]),e._v(" folder.")]),e._v(" "),t("li",[e._v("Call "),t("code",[e._v("ant APE-copy")]),e._v(" to create the extracted ARE solution or "),t("code",[e._v("ant deploy")]),e._v(" to create a native installer for a certain target platform")])]),e._v(" "),t("p",[e._v("Many Integrated Development Environments (IDE) like Eclipse support the ant build system. So you can use your favourite IDE to edit and build the project.")]),e._v(" "),t("h3",{attrs:{id:"example-usages-of-the-build-infrastructure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-usages-of-the-build-infrastructure"}},[e._v("#")]),e._v(" Example usages of the build infrastructure")]),e._v(" "),t("p",[e._v("Check the "),t("a",{attrs:{href:"#dependencies"}},[e._v("dependencies")]),e._v(" before you start.")]),e._v(" "),t("h4",{attrs:{id:"one-model-file-ant-ape-copy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-ant-ape-copy"}},[e._v("#")]),e._v(" One model file, ant APE-copy")]),e._v(" "),t("p",[e._v("Copy the model file "),t("code",[e._v("/models/ImageDemo.acs")]),e._v(" to the location "),t("code",[e._v("/custom/bin/ARE/models")]),e._v(" or edit the "),t("code",[e._v("APE.models")]),e._v(" property in the file "),t("code",[e._v("/APE.properties")]),e._v(". Then execute the following commands:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nant APE-copy\n")])])]),t("p",[e._v("The extracted ARE version can be found at "),t("code",[e._v("/build/merged/")]),e._v(", to test it, execute")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd build/merged/bin/ARE\nstart.bat\n")])])]),t("h4",{attrs:{id:"one-model-file-windows-exe-installer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-windows-exe-installer"}},[e._v("#")]),e._v(" One model file, windows .exe installer")]),e._v(" "),t("p",[e._v("To create a native .exe installer [InnoSetup >= 5] (http://www.jrsoftware.org/isdl.php) must be installed and the build process must be run on a Windows system.")]),e._v(" "),t("p",[e._v("Copy the model file "),t("code",[e._v("/models/ImageDemo.acs")]),e._v(" to the location "),t("code",[e._v("/custom/bin/ARE/models")]),e._v(" or edit the "),t("code",[e._v("APE.models")]),e._v(" property in the file "),t("code",[e._v("/APE.properties")]),e._v(". Then execute the following commands:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nant deploy\n")])])]),t("p",[e._v("By default, all supported installer types for the currently running platform are created and stored at "),t("code",[e._v("/deploy/bundles")]),e._v("\nThis can be changed by setting the property "),t("code",[e._v("fx.deploy.nativeBundles")]),e._v(" to another value like "),t("code",[e._v("msi")])]),e._v(" "),t("h4",{attrs:{id:"one-model-file-linux-debian-package"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-linux-debian-package"}},[e._v("#")]),e._v(" One model file, Linux debian package")]),e._v(" "),t("p",[e._v("To create a debian installer the [debian packaging tools] (https://wiki.debian.org/PackageManagement) must be installed and the build process must be run on a debian-based Linux.")]),e._v(" "),t("p",[e._v("Copy the model file "),t("code",[e._v("/models/ImageDemo.acs")]),e._v(" to the location "),t("code",[e._v("/custom/bin/ARE/models")]),e._v(" or edit the "),t("code",[e._v("APE.models")]),e._v(" property in the file "),t("code",[e._v("/APE.properties")]),e._v(". Then execute the following commands:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("cd \nant deploy\n")])])]),t("p",[e._v("By default, all supported installer types for the currently running platform are created and stored at "),t("code",[e._v("/deploy/bundles")]),e._v("\nThis can be changed by setting the property "),t("code",[e._v("fx.deploy.nativeBundles")]),e._v(" to another value like "),t("code",[e._v("deb")]),e._v(". On Linux, although also a .rpm package could be created by JavaFX packaging technology, APE only supports debian packages because the ARE needs some postinstall and prerm operations in order to run on Linux.")]),e._v(" "),t("h4",{attrs:{id:"one-model-file-mac-osx-dmg-installer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#one-model-file-mac-osx-dmg-installer"}},[e._v("#")]),e._v(" One model file, Mac OSX dmg installer")]),e._v(" "),t("p",[e._v("Run one of the above examples on Mac OSX to create a .dmg installer. The .dmg packaging dependencies should already be contained in your Mac OSX version.")]),e._v(" "),t("h3",{attrs:{id:"properties-for-copying-extraction-behaviour-of-ape"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties-for-copying-extraction-behaviour-of-ape"}},[e._v("#")]),e._v(" Properties for copying/extraction behaviour of APE")]),e._v(" "),t("p",[e._v("To change the behaviour of the ARE extraction with APE-copy, edit the following properties of "),t("a",{attrs:{href:"template/APE.properties"}},[e._v("APE.properties")])]),e._v(" "),t("ul",[t("li",[e._v("``APE.models```: Defines model files and folder containing model files to use")]),e._v(" "),t("li",[t("code",[e._v("APE.dataCopyMode")]),e._v(": Define if all the data files of the "),t("code",[e._v("/data")]),e._v(" folder should be copied or just some.")]),e._v(" "),t("li",[t("code",[e._v("APE.servicesFiles")]),e._v(": Define if optional service configuration files should be used.")])]),e._v(" "),t("h3",{attrs:{id:"properties-for-installer-creation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#properties-for-installer-creation"}},[e._v("#")]),e._v(" Properties for installer creation")]),e._v(" "),t("p",[e._v("The provided build files only support a subset of the whole functionality of "),t("a",{attrs:{href:"https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/javafx_ant_task_reference.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("JavaFX packaging"),t("OutboundLink")],1),e._v(".\nTo change the behaviour of the installer creation, consider the following properties in "),t("a",{attrs:{href:"template/APE.properties"}},[e._v("APE.properties")])]),e._v(" "),t("ul",[t("li",[t("code",[e._v("fx.deploy.nativeBundles")]),e._v(": To define installer type to create")]),e._v(" "),t("li",[t("code",[e._v("fx.application.*")]),e._v(" and "),t("code",[e._v("fx.info.*")]),e._v(": To describe meta information of your application")]),e._v(" "),t("li",[t("code",[e._v("fx.preferences.*")]),e._v(": To define the desktop integration of the application")]),e._v(" "),t("li",[t("code",[e._v("APE.embedJava")]),e._v(" and "),t("code",[e._v("fx.platform.basedir")]),e._v(": To embed a Java Runtime Environment into your native installer. The embedded java is linked to the native application launcher. If it is not embedded the default system java is used (only on Windows and Mac OSX).")])]),e._v(" "),t("h3",{attrs:{id:"are-customization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-customization"}},[e._v("#")]),e._v(" ARE customization")]),e._v(" "),t("p",[e._v("The ARE can be customized by replacing single files/resources (images, model files, component and services jars and the respective configurations,…) of the ARE installation with custom files of the folder "),t("code",[e._v("/custom/bin/ARE")]),e._v(". You only must ensure to use the same relative file paths.")]),e._v(" "),t("h4",{attrs:{id:"skipping-non-used-are-services"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#skipping-non-used-are-services"}},[e._v("#")]),e._v(" Skipping non-used ARE services")]),e._v(" "),t("p",[e._v("If you want to exclude some of the ARE services (e.g. "),t("code",[e._v("javacv-*.jar")]),e._v(" or "),t("code",[e._v("cimcommunication*")]),e._v(".jar), simply copy the services configuration files of "),t("code",[e._v("/profile/*.ini")]),e._v(" to the "),t("code",[e._v("/custom/bin/ARE/profile")]),e._v(" folder and edit them. You can exclude a service by commenting it out (prepending #) in the respective .ini file.")]),e._v(" "),t("h3",{attrs:{id:"installer-customization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installer-customization"}},[e._v("#")]),e._v(" Installer customization")]),e._v(" "),t("p",[e._v("If you want to customize installer-specific configuration files (.e.g .iss for .exe installer) or add your own application icon. Use the respective platform-specific subfolder in the "),t("a",{attrs:{href:"template/package"}},[e._v("package")]),e._v(" folder. There you can place replacement files for the default ones. To find out the supported files, that can be replaced, enable verbosity by setting "),t("code",[e._v("fx.deploy.verbose=true")]),e._v(" in the "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(" file.")]),e._v(" "),t("p",[e._v("Summurized, the following steps are necessary:")]),e._v(" "),t("ol",[t("li",[e._v("Enable verbose mode in "),t("a",{attrs:{href:"template/APE.properties"}},[t("code",[e._v("APE.properties")])]),e._v(": "),t("code",[e._v("fx.deploy.verbose=true")])]),e._v(" "),t("li",[e._v("Run "),t("code",[e._v("ant deploy")])]),e._v(" "),t("li",[e._v("Copy the resources (e.g. .iss or icon files) from the temp folder of the installer creation to the "),t("a",{attrs:{href:"template/package"}},[e._v("package/")]),e._v(" folder")]),e._v(" "),t("li",[e._v("Edit the custom files")]),e._v(" "),t("li",[e._v("Rerun "),t("code",[e._v("ant deploy")])])]),e._v(" "),t("p",[e._v("If you want to know more, read "),t("a",{attrs:{href:"https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGICFDB",target:"_blank",rel:"noopener noreferrer"}},[e._v("Customizing the Package Using Drop-In Resources"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"ant-build-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ant-build-files"}},[e._v("#")]),e._v(" ant build files")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("template")]),e._v(" directory contains two ant build files: "),t("a",{attrs:{href:"template/build.xml"}},[e._v("build.xml")]),e._v(" and "),t("a",{attrs:{href:"template/imported.xml"}},[e._v("imported.xml")]),e._v(". The file "),t("code",[e._v("build.xml")]),e._v(" contains some targets left for customization of the deployment build process. The targets "),t("code",[e._v("before-deploy, before-deploy-windows, before-deploy-linux and before-deploy-macosx")]),e._v(" are called after the "),t("code",[e._v("APE-copy")]),e._v(" target and before the "),t("code",[e._v("deploy")]),e._v(" target. This way generic and platform-specific task can be added before the installer creation is triggered. You can use it to delete files which are not needed for a certain target platform (e.g. ARE.exe on Linux or javacv-*-macosx on Windows).\nThe second build-file "),t("code",[e._v("imported.xml")]),e._v(" contains the internal targets and should not be modified except you really know, what you do.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/297.28666c1a.js b/assets/js/297.14d845d3.js similarity index 96% rename from assets/js/297.28666c1a.js rename to assets/js/297.14d845d3.js index ef65da0836..3f42228a3b 100644 --- a/assets/js/297.28666c1a.js +++ b/assets/js/297.14d845d3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[297],{936:function(a,e,t){"use strict";t.r(e);var r=t(2),s=Object(r.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"are-middleware"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-middleware"}},[a._v("#")]),a._v(" ARE Middleware")]),a._v(" "),e("p",[a._v("The ARE middleware is responsible for executing a model and transfering data and events from one plugin to a subsequent one.\nThe ARE provides many services and utils which should be used when developing code for the ARE middleware or ARE plugins.")]),a._v(" "),e("h2",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[a._v("#")]),a._v(" Logging")]),a._v(" "),e("h2",{attrs:{id:"model-execution"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#model-execution"}},[a._v("#")]),a._v(" Model execution")]),a._v(" "),e("h3",{attrs:{id:"event-propagation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-propagation"}},[a._v("#")]),a._v(" Event propagation")]),a._v(" "),e("h3",{attrs:{id:"data-propagation-conversion"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-propagation-conversion"}},[a._v("#")]),a._v(" Data propagation & conversion")]),a._v(" "),e("h2",{attrs:{id:"are-threading"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-threading"}},[a._v("#")]),a._v(" ARE Threading")]),a._v(" "),e("h3",{attrs:{id:"threading-concept"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#threading-concept"}},[a._v("#")]),a._v(" Threading concept")]),a._v(" "),e("h3",{attrs:{id:"thread-pool"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#thread-pool"}},[a._v("#")]),a._v(" Thread pool")]),a._v(" "),e("h2",{attrs:{id:"are-desktop-gui"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-desktop-gui"}},[a._v("#")]),a._v(" ARE Desktop (GUI)")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[297],{935:function(a,e,t){"use strict";t.r(e);var r=t(2),s=Object(r.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"are-middleware"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-middleware"}},[a._v("#")]),a._v(" ARE Middleware")]),a._v(" "),e("p",[a._v("The ARE middleware is responsible for executing a model and transfering data and events from one plugin to a subsequent one.\nThe ARE provides many services and utils which should be used when developing code for the ARE middleware or ARE plugins.")]),a._v(" "),e("h2",{attrs:{id:"logging"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[a._v("#")]),a._v(" Logging")]),a._v(" "),e("h2",{attrs:{id:"model-execution"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#model-execution"}},[a._v("#")]),a._v(" Model execution")]),a._v(" "),e("h3",{attrs:{id:"event-propagation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-propagation"}},[a._v("#")]),a._v(" Event propagation")]),a._v(" "),e("h3",{attrs:{id:"data-propagation-conversion"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-propagation-conversion"}},[a._v("#")]),a._v(" Data propagation & conversion")]),a._v(" "),e("h2",{attrs:{id:"are-threading"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-threading"}},[a._v("#")]),a._v(" ARE Threading")]),a._v(" "),e("h3",{attrs:{id:"threading-concept"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#threading-concept"}},[a._v("#")]),a._v(" Threading concept")]),a._v(" "),e("h3",{attrs:{id:"thread-pool"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#thread-pool"}},[a._v("#")]),a._v(" Thread pool")]),a._v(" "),e("h2",{attrs:{id:"are-desktop-gui"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#are-desktop-gui"}},[a._v("#")]),a._v(" ARE Desktop (GUI)")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/30.c184393c.js b/assets/js/30.182d9f74.js similarity index 96% rename from assets/js/30.c184393c.js rename to assets/js/30.182d9f74.js index 4987bd53d9..a4a41f3a34 100644 --- a/assets/js/30.c184393c.js +++ b/assets/js/30.182d9f74.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{1015:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"keyboard-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-control"}},[e._v("#")]),e._v(" Keyboard Control")]),e._v(" "),t("p",[e._v("The AsTeRICS Configuration Suite is fully accessible by keyboard. The following sections describe the usage in the different parts of the ACS.")]),e._v(" "),t("h2",{attrs:{id:"menus"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#menus"}},[e._v("#")]),e._v(" Menus")]),e._v(" "),t("p",[e._v("The whole ACS is fully accessible by keyboard. The menu items of the ACS menus can be acessed pressing the "),t("em",[e._v("Alt")]),e._v("-key, followed by the keys, being displayed. Screenshot 1 shows the menu after pressing "),t("em",[e._v("Alt")]),e._v(", Screenshot 2 shows the System menu after pressing "),t("em",[e._v("Alt")]),e._v(" folowed by pressing "),t("em",[e._v("Y")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:n(464),alt:"Screenshot: The menu after pressing Alt",title:"Screenshot: The menu after pressing Alt"}})]),e._v(" "),t("p",[e._v("Screenshot: The menu after pressing "),t("em",[e._v("Alt")])]),e._v(" "),t("p",[t("img",{attrs:{src:n(465),alt:"Screenshot: The menu after pressing Alt folowed by pressing Y",title:"Screenshot: The menu after pressing Alt folowed by pressing Y"}})]),e._v(" "),t("p",[e._v("Screenshot: The menu after pressing "),t("em",[e._v("Alt")]),e._v(" followed by pressing "),t("em",[e._v("Y")])]),e._v(" "),t("h2",{attrs:{id:"the-drawing-area"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-drawing-area"}},[e._v("#")]),e._v(" The Drawing Area")]),e._v(" "),t("p",[e._v("The drawing area can be reached, pressing "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("D")]),e._v(", the focus will be on the first element. The focus between the elements can be changed using the "),t("em",[e._v("Tab")]),e._v(" key or the Arrow keys. Elements can be selected using the "),t("em",[e._v("Space")]),e._v(" Key, multiple elements can be selected, pressing "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("Space")]),e._v(". Pressing the "),t("em",[e._v("App")]),e._v(" Key (also called Context Menu key) opens the context menu. Screenshot 3 shows a selected component with the opend context menu.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(466),alt:"Screenshot: Component with opend context menu",title:"Screenshot: Component with opend context menu"}})]),e._v(" "),t("p",[e._v("Screenshot: Component with opend context menu")]),e._v(" "),t("h3",{attrs:{id:"the-context-menu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-context-menu"}},[e._v("#")]),e._v(" The Context Menu")]),e._v(" "),t("ul",[t("li",[t("p",[t("em",[e._v("Add Channel")]),e._v(" creates a new channel. An output port must be selected to initiate a new channel.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Connect Channel")]),e._v(" sets the end point of the new channel. Select an empty input port to finish the channel")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Drop Channel")]),e._v(" deletes an initiated but unfinished channel")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Add Event Channel")]),e._v(" creates a new event channel. An event trigger must be selected to initiate a new event channel.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Connect Event Channel")]),e._v(" sets the end point of the new event channel. Select an event listener to finish the event channel. Afterwards, the events must be set in the Event Editor")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Drop Event Channel")]),e._v(" deletes an initiated but unfinished event channel")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Move Selection")]),e._v(" moves the selected elements on the drawing area by using the arrow keys. The move operation can be stopped by pressing "),t("em",[e._v("Enter")]),e._v(".")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Delete Selection")]),e._v(" deletes the selected components, channels and event channels.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Properties")]),e._v(" sets the focus to the Property Editor")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Show Component Status")]),e._v(" displays a component status window.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Remove Conflict Marker")]),e._v(" removes the marker, indicating a version conflict between the component collection of the ARE and the ACS.")])])]),e._v(" "),t("h2",{attrs:{id:"the-gui-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-gui-editor"}},[e._v("#")]),e._v(" The GUI Editor")]),e._v(" "),t("p",[e._v("Accessing the GUI Editor is quite similar to the Drawing area. Using the "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("G")]),e._v(" key combination sets the focus on the first element. The "),t("em",[e._v("App")]),e._v(" Key (also called Context Menu key) opens the context menu, offering the options of:")]),e._v(" "),t("ul",[t("li",[t("p",[t("em",[e._v("Resize")]),e._v(" chnages the width and hight of the GUI element by using the arrow keys.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Stop Resize")]),e._v(" stops the resize operation. This function will automatically be called if the focus is set to any other element (e.g by pressing the "),t("em",[e._v("Tab")]),e._v(" or the "),t("em",[e._v("App")]),e._v(" key).")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Move")]),e._v(" moves the GUI element on the GUI area by using the arrow keys.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Stop Move")]),e._v(" stops the move operation. This function will automatically be called if the focus is set to any other element (e.g by pressing the "),t("em",[e._v("Tab")]),e._v(" or the "),t("em",[e._v("App")]),e._v(" key).")])])]),e._v(" "),t("h2",{attrs:{id:"property-and-port-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#property-and-port-editor"}},[e._v("#")]),e._v(" Property and Port Editor")]),e._v(" "),t("p",[t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("G")]),e._v(" sets the focus to the property editor tab. Using the "),t("em",[e._v("Tab")]),e._v(" key sets the focus to the property editor, using the arrow keys allows to navigate to the other tabs (input and output ports, event triggers and listeners). Within the property editor, navigation will be handled using the "),t("em",[e._v("Tab")]),e._v(" key to select and edit the different properties. Within the input and output ports, the list of ports can be navigated using the arrow keys (so shown in screenshot 4).")]),e._v(" "),t("p",[t("img",{attrs:{src:n(467),alt:"Screenshot: Port Editor with opend and closed output ports",title:"Screenshot: Port Editor with opend and closed output ports"}})]),e._v(" "),t("p",[e._v("Screenshot: Port Editor with opend and closed output ports")]),e._v(" "),t("h2",{attrs:{id:"event-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-editor"}},[e._v("#")]),e._v(" Event Editor")]),e._v(" "),t("p",[e._v("With the Event Editor (reachable with the shortcut "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("E")]),e._v("), events within an event channel will be set. Once again, the navigation will be handled using the "),t("em",[e._v("Tab")]),e._v(" key. When a combobox is in focus, the value can be changed using the up an down arrow keys. Furthermore, the combobox can be opend using the "),t("em",[e._v("Enter")]),e._v(" key. Screenshot 5 shows the event editor with an opend combo box.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(468),alt:"Screenshot: Event Editor with opend combobox",title:"Screenshot: Event Editor with opend combobox"}})]),e._v(" "),t("p",[e._v("Screenshot: Event Editor with opend combobox")]),e._v(" "),t("h2",{attrs:{id:"keyboard-shortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-shortcuts"}},[e._v("#")]),e._v(" Keyboard Shortcuts")]),e._v(" "),t("p",[e._v("Keyboard Shortcuts")]),e._v(" "),t("p",[e._v("Key")]),e._v(" "),t("p",[e._v("Command")]),e._v(" "),t("p",[e._v("F1")]),e._v(" "),t("p",[e._v("Open Help window")]),e._v(" "),t("p",[e._v("F5")]),e._v(" "),t("p",[e._v("Start the model")]),e._v(" "),t("p",[e._v("F6")]),e._v(" "),t("p",[e._v("Pause the model")]),e._v(" "),t("p",[e._v("F7")]),e._v(" "),t("p",[e._v("Stop the model")]),e._v(" "),t("p",[e._v("Ctrl + A")]),e._v(" "),t("p",[e._v("Select all elements in the drawing area")]),e._v(" "),t("p",[e._v("Ctrl + C")]),e._v(" "),t("p",[e._v("Copy all selected elements to the clipboard")]),e._v(" "),t("p",[e._v("Ctrl + X")]),e._v(" "),t("p",[e._v("Cut out all selected elements and copy them to the clipboard")]),e._v(" "),t("p",[e._v("Ctrl + V")]),e._v(" "),t("p",[e._v("Paste the elements from the clipcoard to the drawing area")]),e._v(" "),t("p",[e._v("Ctrl + Z")]),e._v(" "),t("p",[e._v("Undo last operation")]),e._v(" "),t("p",[e._v("Ctrl + Y")]),e._v(" "),t("p",[e._v("Redo last operation (after Undo)")]),e._v(" "),t("p",[e._v("Ctrl + S")]),e._v(" "),t("p",[e._v("Save the drawing")]),e._v(" "),t("p",[e._v("Del")]),e._v(" "),t("p",[e._v("Delete the selected elements")]),e._v(" "),t("p",[e._v("Ctrl + +")]),e._v(" "),t("p",[e._v("Zoom in")]),e._v(" "),t("p",[e._v("Ctrl + -")]),e._v(" "),t("p",[e._v("Zoom out")]),e._v(" "),t("p",[e._v("Ctrl + D")]),e._v(" "),t("p",[e._v("Set focus on the drawing area")]),e._v(" "),t("p",[e._v("Ctrl + G")]),e._v(" "),t("p",[e._v("Set focus on the GUI area")]),e._v(" "),t("p",[e._v("Ctrl + P")]),e._v(" "),t("p",[e._v("Set focus on the Property editor")]),e._v(" "),t("p",[e._v("Ctrl + E")]),e._v(" "),t("p",[e._v("Set focus on the Event editor")]),e._v(" "),t("p",[e._v("Alt")]),e._v(" "),t("p",[e._v("Display keyboard shortcuts of the menu elements")]),e._v(" "),t("p",[e._v("Tab")]),e._v(" "),t("p",[e._v("Navigate to the next element (in several areas)")]),e._v(" "),t("p",[e._v("Arrow Keys")]),e._v(" "),t("p",[e._v("Move Focus in several areas, also move in scroll areas")]),e._v(" "),t("p",[e._v("Alt + F4")]),e._v(" "),t("p",[e._v("Close the ACS")])])}),[],!1,null,null,null);t.default=s.exports},464:function(e,t,n){e.exports=n.p+"assets/img/keyboard-menu1.038c9a85.png"},465:function(e,t,n){e.exports=n.p+"assets/img/keyboard-menu2.e58dda53.png"},466:function(e,t,n){e.exports=n.p+"assets/img/keyboard-contextmenu.36dfb622.png"},467:function(e,t,n){e.exports=n.p+"assets/img/keyboard-output_ports.d1399fb9.png"},468:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY0AAADmCAYAAAAp49n8AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wJFAsjDi4HYcoAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAgAElEQVR42u3df3xT5b0H8M9JoA5cBWmvVKA/CCQ4uqu1yI9oFVxJB+xiyxXRimmhimWJq2VekIujXLqNIW53rKyR6pVfBeZFlDq8KD1UihYKSiNOK9i0odXJimsdbOKk0Jz7R3oOSZq0SSmQJp83r7xITk5O0pOT8znf50nOI+w9UieBiIjID/3ONH7AtUBERP6Fxqn+Oq4FIiLyLzTUKhXXAhER+RkaaoYGERGx0iAiot4ODZVKUG6sXpQJ+4kPldv5v/wfjE2+85q/yMo3/oBTTfV42LwcAPDlF0342WPTA36dn1gP4Vh1hbIcb8+zvfjnyu0p/5aJJH0q/li6Dkt/+wduLUQUsn6Z90Cnac8UvdJNpSEAqzbsxdDh8VfuheU/iMcWrwnoObYX/xwv7T0BANi/ezu2/r5QuS1PU6tS8In1EKyH9uGRJwq8LketUkEQBPiqrlSCgEeeKMC9Mx92m/7h4bfx6bHDQRGgRERXSsHvXwUAFD5xv7LP7BwaarVLZghQq1VwndbbAn2O2pqDMOb9lzL/1t8XYtM+m9s8UzOMzp2+SgWVIPhcdnf3Cx0ryPP+O1LSYD0o4l/H382tioiC0ryp2i7v99xvdtr/uewbBUHwui/sVGkIggCVoHJLl5VPzMb98/Px/XEpAIB9r2917qjTH8HHNVV4dnE2AGD02Nux4vc73R4j35f95EpMTX8EK5+YjYbjx/B0tgFT0x9B9pMrsfKJ2aj/xPlbkaef26w8j+yDQ/swLsUAtUqFj2uqMDX9Ea/p93FNFZ57eh4AoOKP2/Dclgp8XFMFANj8uxWYmv4IxqUYuq00vKXrrePvxnNPz8O8/EJumUQUlErfboDxB6N83tf9Af2lfZ/g0jrTKTRc+zQAYHFWqnL9N1vfxuycRaipKsetHUfZB8Uy/HjZb1BrPQjrQRHbKu0AALFsKyr+uA2GjEcAAK9uXIttlXY0/7kRTz3yA6TNMmKl5VWsMN2PHy/7DWJGJOCjo1UYqUvESsurPv+QRlstpj+QA5VKwOkvmjBipA6er1nesS/99RbUVJUrO/da60FsWlugvMaPjlZBEOD18XJoblpbgM2/W+FM7vxC5e8ZPfZ2fHmqCTEjErh1ElFQ2lZpx9wpmk7T/OW5b/S2r/SoNIC12/cjZsRIZdrwOA1W/0cWHv3pL9D855PQjPk+hsdpUFtzEGLZVohlW5V502YZO/oNAPMz/w21SoXhcRpoE2/HX081IWbESAgCoFY5j/ZjhsVCLNuK2JFjkDbL6GNHfmn+4XEj8f675T4rBbVKcKskVIKAnEU/V2673r/ht8tRvqsUAJCz6OdIm2VU5vf2WlxfBxFRsHr5nUY8dE+Cct1frvtOwUerS+fQgACVStVpxh/OykJtzUG8985eTLxnGtQqFVQqAY899Qv8cFaWlzLHfTmut12vD48bhVeqPsPeXVvw0D0JWP7bbUpF421ZQ4fFoXxXKRY89UsfzUvO5SuhoXL/w13vX/DULzstx3P+rv4mIqJg9UrVZwHN//SjPwIALFsw0236sgUz8exL/+cRGq4dHQKgVqk7dX7cl/k4dv/vizhp+xi5S37VUYGMwsonMzFj9nwvkeWxHNfbXp5jxuz5GB43CkfeeQu3T5ritijNLf+K1tOnMCJ+NEbEj8a0+7PxzMIMrH5xtzLPC79ehsf/YxVUKhUE1aXOHJXg3rHteb+30HGd31VdrRUj4kdzaySikPPrTW8p1xfPn47nNr7pc95OlYZ5zqWO6NzFv8KM2fMwIn4UTn76Me6d/oBypJ08aQpyF/8K/64frsy/ct3LSJowueOoXPCoNJy3753+AMxzUjBj9jxMnDwNK37ykPL414/8pdMLjNfcguY/NyK5I0x+vGQ19uzc5Pa8z+88CLVKheRJU7DyyUy89epmPL/zYKcSS6USnN+e8lEtCIKAkuf+Ey/8ehkAYMz3x2HNS2/g2HsHMGP2PFYZRBQWutrXCbvfbw76U6PPHB+D3e83X7Pnf/7ZpdBPmY6kiZO5NRFRSFuUlYbfbin3HRp7ar4M+tB445WN+KzhBExLn73qz/3BkQMofX41/nvTm9yaiCjsCXuPtXAQJiIi8gtPWEhERP5XGqdb2lhpEBGRX1hmEBERQ4OIiBgaRETE0CAioj4bGu3tF7lmKKy0t1/E31pP4e9nmrn9U1hu//7q522iWt2Pa5HCilrdDwMHDuT2T2G7/V9WaBCFJUHgOiDqBvs0iIiIoUFERL2PzVNEMrZOEfVOpTFj2t0YGh3R6TJj2t2w2+uV61eb/NxLl+TxnaReSg3vyeFt+/f8fFzONjw0OgIbN6y/on/dgcp9Xf4dALB0SR6GRkfgQOU+v/cLdnt9j17Hxg3rlee7nM+xvIxAXwddwdDY89a7ON3ShtVrigAAq9cU4XRLG/a89a4yz6233n5VX/jQ6AjoJ4zlO0hXzbg7JuJ0Sxuq3/tE2Wn2ZGfpukN+wuQc+fJ0Sxvm5yy8Kn+H/Pk93dKmfJY8d7ixcQl+L0+jGa2sj0DXyeo1RRh3x0TleiA2blh/VcKWehAa3W0wroFytZxuacOOnXv4DtLVKDQ6bfPj7piImqNHAlr8m3v+2GlaoMvobXIAvrDe/YBQDgJ/Dibliulq/y3zcxbidEubEjrUR0LDs4lILhVdm7RcS1DPoxrP+1yXKS/jWjR9EXW1zdccPeJ1Z+Xa3OS6TS9dkqccEc+ZPUPZ7l0rZ7kC8WwOlj8vcqUi3y8v0/PzJh/xy7e7amqSw0F+bZ5NPZ6fT9cje9fmKbnqrzl6RJnm+Vh/KgLPz763JjTq46Hhy9NLVyhHIRs3rEf1e58olYF8VCNv9K4lv2u7Zs3RI52awYiuXKHh/OeLvEPUTxiLcXdM9LpdypW3ayW8ccN6rF5TpDQ/7di5Rzmid62cJ0+ZiqVL8lBz9Aiq3/tEOYrWTxjbqfnIs7p/YM5cZf6ao0fw9NIVymfq2dUru/y7fR2pH6jcp7z2rprPNJrRynPJTXgazWi3ZrBxd0wMuM/C9W9kE1QYhIZnm6hGM7rTNHlDcO2f+NOfPnArP4mCpXlK3iF2dyAjHy3PmT0DAPDpiU/8fgkbN6zHuDsmKhXAA3PmAgA+/6zRLSB8VQyunz9/mpjkMPQWHHJz2uQpUwEA02fcF/AqlasNuenK385quY9U/hsCWYfUR0PDX64fRFYV1NctXZIH/YSxWL2mSDn6DmZy01Vvf5FFDk65JYEHgAyNXguMmqNHlA3Xbq/32f4ayFcBia4VuVKen7PQrToAgDG3dP9tv/k5C1Fz9IhyRP7Kjm1uR/u9Ta6GvH2RRX698mfOW0e+r0pH/tvl5bq2IFwO9nGEeWjseetdjLtjIubMnhHwV2hdy3+5M5CBQpdFEC77/FNPL12hbJ+efQny0bbcEe6N/BVU/YSxSrNOb1csrh3UcqXvK8Dkvoih0RHd7vhXrylS+n1i4xLcHtvVa5GbrgLt85A/9/Lj9RPG8kszV+NjwjHCiZzaLn4NAIjo912uDC8OVO7DnNkzsGPnnitW+RBDg4ihESLkisFXZULhgScsJLp0DAWegOoSz9+cMDCIlQaRa6XRfs5Zaaiv58ogYqVBREQMDSIiYmgQERFDg4iIGBpERMTQICIi6i40JDi4ZiisyNu8ShC4/VPYbv/+6OdtosAChMKMABV/n0Fhvf33ODQqK3ZxDRIRhaEpqbN6VmlkZMxCRER/rkEKG21tF1BWtgtjxozB3r178dBDDyE2NhaCwNOKUOiSJAktLS147bXXcOONN/as0gDAwKCwI2/zFRUVePDBBxETE4Ovv/6aK4ZC3g033IAHH3wQ5eXlPQ8NonDV3NyM2NhYBgaFjfPnz2PQoEF+z8/QIHJx4cIFCIIASeJ5PIm84dekiDwwMIjbPCsNooA4HPytBhErDaIeHHUNGTIEDQ0Nfj02LS0NL730ktu0xYsXo7KykiuWWGlYLBYAgMlkCuhxNpsNWVlZqK6u5rtFQf8ham1t7faDVVlZifvvvx9r1qyBJEmd5vU2jagvYvMUkZfACHQHP3nyZLS0tKCyshJ2u93t8fLyGBoUCpWG381Ter0egiBAEASIogiLxQKz2Qyz2az8AEq+LggC9Hq98liz2QyLxQJBEGA2m6HT6XD48GFlWUTBGBryJTo6GpIkoaGhAdOmTcNLL72E6OhoREdHo6GhodP8nhdvy5QkCfv371eW47qsadOmKdf379+PadOmKY9ZsmSJX8/JCy+SJKGwsNBtG5MvhYWFXrfTXqs0RFFEcnKyW3OSwWBQrsvNU8XFxSguLlaCQhRFZb7S0lLlheXn57N5ioLWxYsXcfbsWbdpZ8+exT/+8Q8cPXoUM2fORH19PbZt24aioiKsXLlSme/cuXP49ttv3R5//vx5nDt3zm1aVVUV5s2bh/r6egBAY2MjJk6ciPr6eowZMwbHjx9HVFQUysrKcPHiRXz44YdISEjAhg0bsGzZsk6vj8ib7OxsfPnll3j55ZeVaQ899BCys7PdtqHrr/f/vGt+hUZCQgIsFgsSExO77L+w2WzQ6XTK7cTERCU0CgsL+Q5Sn6k0PL895XA44HA4kJSUhMzMTDgcDuj1euzatcttXvmxno/3XObJkyexceNGZVpcXBzmzp2Ld999F1OnToUoirjzzjtRW1uL9PR0fP7553A4HJg7dy6/2UV+i4yMxNKlS2Gz2VBTUwONRoNFixYhMjKy03bbq81TWq1WWaivJiU5MORSR644iPoah8PhtXnJs/nKV3OWr+Yof+e58847sW3bNjQ2NiI9PR133XUXRFHEwYMHkZqaymYXXgK6DBgwAEVFRZgwYQLWr1+PwYMHd5onkAORgDrCTSYTtFotysrK3Jqn5PJ60qRJyu3S0lIYjUbugSikKg3X+zxvuwZBd9Pi4uKQk5OD48ePAwCampqwfft2LF++HA6HA5mZmdi4cSOys7MRGxuL2tpa1NbW4uWXX2alQQEbMmQINm/erGy33rb5Xg0NURSRlpbW6QkMBgN0Oh3MZjMkSUJBQYHSKd5VM5ZWq1WqlvLy8k4BRHStQ6Orr8x6+//QoUN47LHHlPkLCwuxfPlyZGZmAgAeffRR5b7MzEwsX74cy5cvx/e+9z1l+ptvvqksMzU1FevWrUNcXBwkScJ9992H+vp6fgOLrtg27y/hdEub29yVFbswZ84crkUKOzt27EB1dTVWrFiBL774giuEwsbw4cNRXl7e8/E0iMKZ3OxEFE7bvL8YGkQuVCqV128/EYUynrCQqIduvvlmNDU1YdCgQTh37hxXCIW8AQMG4Kuvvrq80Gh3OKBW8VyGFD7aOyqLiRMn4u2338b06dMRExPDFUMh78yZMzhw4IDfAzF57QgnIqLw409HOMsJIiLym9fmqYyMWYiI6M+1Q2Gjre0Cysp24YxqMF7Yewy6G1VI+l481GoeV1Hoam93oP6zL/GnU1/jp6kjex4aDAwKN/I2/4fKj6C7UcAPp6ZgcPRNXDEU8sbcBsR88BGA8z0PDaJw9bdvJUwfl4DB0TdhyNCbuUIoLBim3Yy/HNzt17ysvYlcy3UJbJIiYmgQERFDg4iIGBpERBSCoWGxWGCxWAJ+nM1mcxtDnIiIWGkQEdE1VLJqOe4ZMbDTpWTV8isfGnq9HoIgKMO9WiwWmM1mmM1mZeAl+bogCG6VhNlshsVigSAIMJvN0Ol0OHz4sM+hY4mI6PI9bH4K983NcZt239wcPGx+qsfL9HvkvuTkZFRXVyvTXEfbk0fpKy4uVsYGN5vNEEVRma+0tFQ5/W5+fj6ysrLclkcULM60SfjyWwfOf9POlUF9W/9I3L94FepOHMeJmmoM1+hwX14Bvu4fia97uH37FRoJCQmwWCxITEzschhXm80GnU6n3E5MTFRCo7CwkG8g9QnO8bydl+amBiz64e3KfX848Xd8dGg/VuWkAwC0t41H4f9WQNz+IjYUOo/eDA8vQE7Bb7giKShEfGcgnvzdFqz7aQ4W/GIdrh80BA5H5/Ez/G128is0tFotJElSmpi8jestB4ZcTfSkg5woGDgkCe0dl3+J02Dr8bPKfe2ShLH6KZ2m/SDzMfwg8zG3aUTBIjLqJizb/EaX22avhobMZDJBq9WirKysU2g0NjZi0qRJyu3S0lIYjUa+W9QHQwNwOCS0O7jjp/Dh7xkH/e7TSEtLcyvfAWe/hk6ng9lshiRJKCgoUDrFu2rG0mq1AOCzaiG6liSpIziYGUQ9Cw2DweB1DFm52Urmq2Nb7hx3xU5wCt5Kw4F2yaGM5kdEAYYGUXiFhvPSzkqDiKFB1BVBrjTYp0HE0CDqzo3fAZpPtWCoToKD34CiMPGF7QSiLic02h0OqFU8wwiFD7n/wnBbAt6oaUCUzQbdkKFcMRTyTtlO4MjB95B09wj/qvHTLW1uh1OVFbu4FomIwtCU1Fk9qzSIwhXPhUYMjR6ERkbGLERE9OcapLDR1nYBZWXOKvvFF1/kCqGws2DBAr/m89pxwcCgcMNtnsg/7O0mIiKGBhERMTSIiOgKaW9vh8Ph8HraKIYGERG5OXfua5w//y0uXrzoMzgYGkREBAA43fwXfNXain/+8xufwXFZv9OQB1rq6jToRETUN9jt9RgyJArDMAL9+/eHWq1WhrtgpUFERG6am0/hq69a8c0353DhwgWvlYbfoaHX6yEIAgRBgCiKsFgsMJvNMJvNbkkkzyMIgtuQr3q9HqIoKveZzWa+QxT0Wm0ViFe26RTYAdjFEmU7jtfnoRVAhSVPmZZiLuGKoz7pwoULaG9vVzrEvfF75L7k5GS3gZNcR9uTm6c8R+LT6/XQarXK7YKCAiW55BDhqH0UzKK0qWjyPNoy5EKSct0mpZqKIJmKuMIo5PlVaSQkJMBisbhVDp5sNhtMJpNbCBQWFqKsrEy5vWXLFp/3ERFRiISG67CucvMUERExNLpkMplQXl7utULQarWwWCxugVJQUICMjAzldlf3ERFR8PO7TyMtLU25LVcdBoMBOp0OZrMZkiShrq4OOp1Oma+4uNituaq2tlbpNPe8j4iIQiQ0DAaD169euTZbebvtKT8/H8XFxVzrRER9FH+nQUREDA0iIup9V224V9ffeBARUQhVGu0+fglIFKq4zRNdRqXx6s6dXDNEAAA7UoR7sbLOilRtVDfztiJPnwwYN6DIlKpMLTGnABlbkGvQXFqqWIK1ttEoMqXCLpbg3oJaWKuL0NUz2MUSZJUBVcW5fFsouCoNIpJpUCU1dRsYzvNRJeMW46OBP4MhF03dBAZRUFcaGRmzEBHRn2uHwkZb2wWUle3qebR0nI/KLpbghI3rk8Ks0mBgULjxvc3bkdJxdttWWwX0+jzsUM5oG48KW+tlP7ddLHE7M26JOUU5Y26hxQJ9x5l0O9/vfF1E1zw0iMi7U4fXoQrpkCQJ+4rTsWKtf/1/C9NGuQ0bMCptodf5Kix5WGVNRoskQZIkDK3djlMu9x+0LAQytkCSJKw3AWstFXxTiKFBFKyGTfoJVnR0cicZ0tFurYU/tcb68gZIHUEgSRIaytd7na++1oplhflK/8bs/JUY5nL/Xab1Soe6IcMIa2093xRiaBCFp1bUWtsxOmEQVwUxNIioO1FIN453a/LauXaFW/MUEUODKATIQ8COSluIdeapEAQBeT3ob0g1rUCydZXS93E68WG35imia0043dLmdlrayopdmDNnzlV7AXq9Hlu2bIFWq+W7QdfUjh07IIoiXnzxxaAKI/6gj66GBQsWYOSoRAwbNgIazWjE3DwMkZE3QK1Ws9Ig6htasbZgFYwZHHeGgoffoSEIAiwWCwRBgM1mU6bJF3maKIrKNL1erzzebDYr0+WxxvV6PQ4fPqwM5EQU7uRmLuclGjBucDv9CFGfCQ2ZJEnQarUQBEH5+mBdXR2ysrIAOIdxraurgyRJypltzWYzMjIylPlLS0ths9lQXV2NSZMmoa6ujoMzEUH+Zfmlr+a6nsOKKBgEdGp0k8kEAG6Vhqfk5GTodDq3EfysVqtSXcgaGxvZj0FEFOqVhmzSpEluR0RySBQXF0OSpE7NU3L1IV84PjgRUZiEhlarxeHDhyGKos955BCx2WxITk7G2rVrubaJiMK10qirq0NaWprSaSd3ZOv1emWa0WiEVqtFcXExrFarW8e5zGg0siOcgpgdKX6dmLAVefp4Zfv2PAFhieh+akG7WKL8jsMuliDe46SEXl+Jx4kNia4Fv/s0XPso5GrDcxrge1hXX9NNJpPSV0IUfJzjaXQbLeJOJBbuh2TQQB6MqUQ0+PXNJ40hF01sraVQrzSIyH3HfykgopBuTEet7SRXDDE0iMJLz8bTqK89hXRDkn/PwPE0iKFBFJr8GU/DLpagFAa3IWI5ngaFdGi0OxxcMxRW/N3muxtPwy6W4N6CWrzuca4ojqdBocJrR/irO3dyzRAFSA4Ma3URonq0BOd4Gun5HE+D+lBoTEmdxbVCYaur3x5d2cAAXMfTSO2oVJzjaSTzjaGgwT4NosvmPBvtZ4fXIdql38Lztxn+4HgaFOw6jadBFM6eWWrieBoUljieBlGIVDAcT4OCCUODKIhwPA0Kdv24CoiCh3M8DTZFESsNIiJiaBAREUODiIiIoUEUKP/G02i1VSDex280OJ4GhRJ2hBN1yb/xNIA4WCUJUR0BkqzLgkGqgj/fe+J4GsTQIAozUVqty/WRiOUqoRDF5imiLgU+noZdFAGTEf7+uoLjaRBDgyhEdTWehrwz93baD46nQQwNojDU1XgaucVVkCQJWzLQqQrheBrE0CAirzSGXKw3xaK+8WyAj3SOpzE6geNpEEODKKTZbDaXW3aUWj7vwc7/0ngaMud4GkQMDaKQ8vba+S59FvdiZZ3VbYxwf3E8DQp2HE+DyAXH06BwxfE0iPo8jqdBwYehQRREOJ4GBTv+IpwoiHA8DWKlQUREDA0iImJoEBERMTSIesa/8TScWpGnj1fGyZB5G0+DiKFBFJKc42l090M957eeknGL8VGuMmJoEFE30WLIhSQ1YZp2KFcGMTSIwlfg42n4vWS332TIy2pFnl6vLNdzKNgS8+zLek4ihgbRVdTVeBqBBsaotFI0dJwqvaVuA3J06bAjConJauUMuWKZiGF4H8dsrXCeCLEZI3twTisihgbRNdDVeBqBOGmrxfryLcroflHaVCwzAaJohyHDiNIyEYAdonUYFhnHo77xLFptJxETwIiARFcCfxFOFGQ0BgOQloWj+aNxqzEdqQYgd62I0Ym1MGTkcwURKw2icDNSm4iFaVnKGN+ttgqssgAGgwaABkZTDDaufQ13GZIQpU3CMOsm/Kz0VMf9RAwNoj5N7tQelbYQ68xTIQiC2+81XMcITzGXQGPIxb7iZIzqmBaty8GGuteVpidDhgFvWNVI0kZBHpxJnWxg0xRdcxxPg8hFsI2nQXS1cDwNIiLqdQwNIiLyG789ReRh2Mz/Uv4/tZvXeT08rv8oxr/PB/s0iFw8s9SED8azT4PCizM0vmCfBlFPP0BE4Vhd+4OhQUTEAyW/52WfBlE3R10VjwMVB4BVn3b9uJ3ZQMJ1zutnzwCpO5zXn58DoBn48Ttct9T3sdIg6uaoK/WF7gNjxj3AX08Cd7zgvPxtAPD8PVyX1DcPlBgaRFfYnnfcKwlrK/AvN3C9UN88UGJoEF3GUVfF48AMAIljgLezgef+DTj6uPOybIz3ZcQOBKy27qsTeTmuy9qZfen6jHuAg9lAYsdjnp/j+zmJrgaGBlEAR13XXQeMhLMJ6rVTQOpt3sNAh66btGbcAxTeAhR0NGdlHwB+NNkZTn/9JxDbMQDgzBjgPID0jqDQDQaOfcr3iK7sgRJDg6iXnD8PrHjDef11GyAMuFQFyGHwzEggb0fXy0m6AXj/BLCn43btp8CfzgAz7wF2NwO6jh9axQ8AalqdIZI4Bjh/5tJjiHpL66FNDA2iq3HUBS+B8fhmoPYynn/POwAGA7ljgNZWYJMNiI8B0rVAUzPfH+p9/7AdYGgQ9VRPftwXaGAc+zsw/hZncxTgrCJuHQzs7uhMrzsDpN0GHLc5q5BvBgBToy7dT9SbErI3+j0vf6dB1AtyRjr7OzY/fmna+ycufaNq/C3A0Vuc1+XfcCTdABQ+DhR2zP/agUtNT7ubnSH0ekf/hbUVSB3Ipim6MloPbQL6+zcvzz1F5ILnnqJw1Lh5PmaN7cdzTxH1BM89ReGGzVNEvRgePG02r4fD9dt5anSiwHG4VwpXHO6ViIh6HUODiIgYGkRExNAgusrsSBHiUWFr7XKuVlsF4gUBQselRLQr95WYU9xuE/Vl/PYUUZc0qJKa/JgvDlZJQlRHgCTrsmCQqqDhCiSGBhF5itJqXa6PRCxXCYUoNk8RdcmOFCEF9o4KQq/Pww5LXkczlPdmK7soAiZjt1WGXSxRmrMuLasVeXq9sly7WIJ4fR7kZykxz+62qYyIoUEUJE4dXocqpEOSJOwrTseKtTuV+0rMKRAEAVllQFVxbreBMSqtFA2SBEmS0FK3ATm6dNgRhcRkNeobzwIAxDIRw/A+jtlaAdhRamnGSG0U3whiaBD1BcMm/QQrTKkAgCRDOtqttUoVkFtcBUmSsCUDPqsQ2UlbLdaXb1GqkShtKpaZAFG0w5BhRGmZCMAO0ToMi4zjUd94Fq22k4jxo4IhYmgQ9SEaQy7Wm2KVaiHwxxsASymO2k7iVmM6Ug3pEMtEHBNfhyHDwBVMDA2ivs5mcx0Q3I5Sy+cYnTDI5/wjtYlYmJYF+Yu4rbYKrLIABoMGgAZGUww2rn0NdxmSEKVNwjDrJvys9FTH/UQMDaI+7e218106te/FyjorUl36HhamjVLuTzGXQGPIxb7iZIzqmJstAMoAAAFVSURBVBaty8GGuteVpidDhgFvWNVI0kYBiEK6cTzUyQY2TdE1xxMWErngCQspXPGEhURE1OsYGkRE5Df+IpzIS5lORN6xT4OoG+3t7fjmm3M4fboZjY0N+LK5Ge2Odq4YCjlqlRo3xcQgIWEUhg6NwcCB13fq02ClQdQNlUqFiIgIREZG4qabYhDRPwIOh4MrhkJyWx984xBERkYiIiICKlXnHgyGBlF35bggoF+//oiMvMH5oRp0IxwSQ4NCMDQEFQYMHIDrr/8u+vXrD0EQGBpEPT0Cu+6676Bfv3747ncjIUls1aXQPEBSq9VQq/t5rTIYGkQBfphUKhX69+f6oNDf3n1haBD10oeJKCyqbq4CIiJiaBAREUODiIgYGkRExNAgIiKGBhERMTSIiIgYGkRExNAgIiKGBhERMTSIiIihQUREDA0iIiKGBhERMTSIiOjK+38UEe8O9sA+9AAAAABJRU5ErkJggg=="}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{1018:function(e,t,n){"use strict";n.r(t);var o=n(2),s=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"keyboard-control"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-control"}},[e._v("#")]),e._v(" Keyboard Control")]),e._v(" "),t("p",[e._v("The AsTeRICS Configuration Suite is fully accessible by keyboard. The following sections describe the usage in the different parts of the ACS.")]),e._v(" "),t("h2",{attrs:{id:"menus"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#menus"}},[e._v("#")]),e._v(" Menus")]),e._v(" "),t("p",[e._v("The whole ACS is fully accessible by keyboard. The menu items of the ACS menus can be acessed pressing the "),t("em",[e._v("Alt")]),e._v("-key, followed by the keys, being displayed. Screenshot 1 shows the menu after pressing "),t("em",[e._v("Alt")]),e._v(", Screenshot 2 shows the System menu after pressing "),t("em",[e._v("Alt")]),e._v(" folowed by pressing "),t("em",[e._v("Y")]),e._v(".")]),e._v(" "),t("p",[t("img",{attrs:{src:n(466),alt:"Screenshot: The menu after pressing Alt",title:"Screenshot: The menu after pressing Alt"}})]),e._v(" "),t("p",[e._v("Screenshot: The menu after pressing "),t("em",[e._v("Alt")])]),e._v(" "),t("p",[t("img",{attrs:{src:n(467),alt:"Screenshot: The menu after pressing Alt folowed by pressing Y",title:"Screenshot: The menu after pressing Alt folowed by pressing Y"}})]),e._v(" "),t("p",[e._v("Screenshot: The menu after pressing "),t("em",[e._v("Alt")]),e._v(" followed by pressing "),t("em",[e._v("Y")])]),e._v(" "),t("h2",{attrs:{id:"the-drawing-area"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-drawing-area"}},[e._v("#")]),e._v(" The Drawing Area")]),e._v(" "),t("p",[e._v("The drawing area can be reached, pressing "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("D")]),e._v(", the focus will be on the first element. The focus between the elements can be changed using the "),t("em",[e._v("Tab")]),e._v(" key or the Arrow keys. Elements can be selected using the "),t("em",[e._v("Space")]),e._v(" Key, multiple elements can be selected, pressing "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("Space")]),e._v(". Pressing the "),t("em",[e._v("App")]),e._v(" Key (also called Context Menu key) opens the context menu. Screenshot 3 shows a selected component with the opend context menu.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(468),alt:"Screenshot: Component with opend context menu",title:"Screenshot: Component with opend context menu"}})]),e._v(" "),t("p",[e._v("Screenshot: Component with opend context menu")]),e._v(" "),t("h3",{attrs:{id:"the-context-menu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-context-menu"}},[e._v("#")]),e._v(" The Context Menu")]),e._v(" "),t("ul",[t("li",[t("p",[t("em",[e._v("Add Channel")]),e._v(" creates a new channel. An output port must be selected to initiate a new channel.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Connect Channel")]),e._v(" sets the end point of the new channel. Select an empty input port to finish the channel")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Drop Channel")]),e._v(" deletes an initiated but unfinished channel")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Add Event Channel")]),e._v(" creates a new event channel. An event trigger must be selected to initiate a new event channel.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Connect Event Channel")]),e._v(" sets the end point of the new event channel. Select an event listener to finish the event channel. Afterwards, the events must be set in the Event Editor")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Drop Event Channel")]),e._v(" deletes an initiated but unfinished event channel")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Move Selection")]),e._v(" moves the selected elements on the drawing area by using the arrow keys. The move operation can be stopped by pressing "),t("em",[e._v("Enter")]),e._v(".")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Delete Selection")]),e._v(" deletes the selected components, channels and event channels.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Properties")]),e._v(" sets the focus to the Property Editor")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Show Component Status")]),e._v(" displays a component status window.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Remove Conflict Marker")]),e._v(" removes the marker, indicating a version conflict between the component collection of the ARE and the ACS.")])])]),e._v(" "),t("h2",{attrs:{id:"the-gui-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-gui-editor"}},[e._v("#")]),e._v(" The GUI Editor")]),e._v(" "),t("p",[e._v("Accessing the GUI Editor is quite similar to the Drawing area. Using the "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("G")]),e._v(" key combination sets the focus on the first element. The "),t("em",[e._v("App")]),e._v(" Key (also called Context Menu key) opens the context menu, offering the options of:")]),e._v(" "),t("ul",[t("li",[t("p",[t("em",[e._v("Resize")]),e._v(" chnages the width and hight of the GUI element by using the arrow keys.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Stop Resize")]),e._v(" stops the resize operation. This function will automatically be called if the focus is set to any other element (e.g by pressing the "),t("em",[e._v("Tab")]),e._v(" or the "),t("em",[e._v("App")]),e._v(" key).")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Move")]),e._v(" moves the GUI element on the GUI area by using the arrow keys.")])]),e._v(" "),t("li",[t("p",[t("em",[e._v("Stop Move")]),e._v(" stops the move operation. This function will automatically be called if the focus is set to any other element (e.g by pressing the "),t("em",[e._v("Tab")]),e._v(" or the "),t("em",[e._v("App")]),e._v(" key).")])])]),e._v(" "),t("h2",{attrs:{id:"property-and-port-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#property-and-port-editor"}},[e._v("#")]),e._v(" Property and Port Editor")]),e._v(" "),t("p",[t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("G")]),e._v(" sets the focus to the property editor tab. Using the "),t("em",[e._v("Tab")]),e._v(" key sets the focus to the property editor, using the arrow keys allows to navigate to the other tabs (input and output ports, event triggers and listeners). Within the property editor, navigation will be handled using the "),t("em",[e._v("Tab")]),e._v(" key to select and edit the different properties. Within the input and output ports, the list of ports can be navigated using the arrow keys (so shown in screenshot 4).")]),e._v(" "),t("p",[t("img",{attrs:{src:n(469),alt:"Screenshot: Port Editor with opend and closed output ports",title:"Screenshot: Port Editor with opend and closed output ports"}})]),e._v(" "),t("p",[e._v("Screenshot: Port Editor with opend and closed output ports")]),e._v(" "),t("h2",{attrs:{id:"event-editor"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#event-editor"}},[e._v("#")]),e._v(" Event Editor")]),e._v(" "),t("p",[e._v("With the Event Editor (reachable with the shortcut "),t("em",[e._v("Ctrl")]),e._v("+"),t("em",[e._v("E")]),e._v("), events within an event channel will be set. Once again, the navigation will be handled using the "),t("em",[e._v("Tab")]),e._v(" key. When a combobox is in focus, the value can be changed using the up an down arrow keys. Furthermore, the combobox can be opend using the "),t("em",[e._v("Enter")]),e._v(" key. Screenshot 5 shows the event editor with an opend combo box.")]),e._v(" "),t("p",[t("img",{attrs:{src:n(470),alt:"Screenshot: Event Editor with opend combobox",title:"Screenshot: Event Editor with opend combobox"}})]),e._v(" "),t("p",[e._v("Screenshot: Event Editor with opend combobox")]),e._v(" "),t("h2",{attrs:{id:"keyboard-shortcuts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#keyboard-shortcuts"}},[e._v("#")]),e._v(" Keyboard Shortcuts")]),e._v(" "),t("p",[e._v("Keyboard Shortcuts")]),e._v(" "),t("p",[e._v("Key")]),e._v(" "),t("p",[e._v("Command")]),e._v(" "),t("p",[e._v("F1")]),e._v(" "),t("p",[e._v("Open Help window")]),e._v(" "),t("p",[e._v("F5")]),e._v(" "),t("p",[e._v("Start the model")]),e._v(" "),t("p",[e._v("F6")]),e._v(" "),t("p",[e._v("Pause the model")]),e._v(" "),t("p",[e._v("F7")]),e._v(" "),t("p",[e._v("Stop the model")]),e._v(" "),t("p",[e._v("Ctrl + A")]),e._v(" "),t("p",[e._v("Select all elements in the drawing area")]),e._v(" "),t("p",[e._v("Ctrl + C")]),e._v(" "),t("p",[e._v("Copy all selected elements to the clipboard")]),e._v(" "),t("p",[e._v("Ctrl + X")]),e._v(" "),t("p",[e._v("Cut out all selected elements and copy them to the clipboard")]),e._v(" "),t("p",[e._v("Ctrl + V")]),e._v(" "),t("p",[e._v("Paste the elements from the clipcoard to the drawing area")]),e._v(" "),t("p",[e._v("Ctrl + Z")]),e._v(" "),t("p",[e._v("Undo last operation")]),e._v(" "),t("p",[e._v("Ctrl + Y")]),e._v(" "),t("p",[e._v("Redo last operation (after Undo)")]),e._v(" "),t("p",[e._v("Ctrl + S")]),e._v(" "),t("p",[e._v("Save the drawing")]),e._v(" "),t("p",[e._v("Del")]),e._v(" "),t("p",[e._v("Delete the selected elements")]),e._v(" "),t("p",[e._v("Ctrl + +")]),e._v(" "),t("p",[e._v("Zoom in")]),e._v(" "),t("p",[e._v("Ctrl + -")]),e._v(" "),t("p",[e._v("Zoom out")]),e._v(" "),t("p",[e._v("Ctrl + D")]),e._v(" "),t("p",[e._v("Set focus on the drawing area")]),e._v(" "),t("p",[e._v("Ctrl + G")]),e._v(" "),t("p",[e._v("Set focus on the GUI area")]),e._v(" "),t("p",[e._v("Ctrl + P")]),e._v(" "),t("p",[e._v("Set focus on the Property editor")]),e._v(" "),t("p",[e._v("Ctrl + E")]),e._v(" "),t("p",[e._v("Set focus on the Event editor")]),e._v(" "),t("p",[e._v("Alt")]),e._v(" "),t("p",[e._v("Display keyboard shortcuts of the menu elements")]),e._v(" "),t("p",[e._v("Tab")]),e._v(" "),t("p",[e._v("Navigate to the next element (in several areas)")]),e._v(" "),t("p",[e._v("Arrow Keys")]),e._v(" "),t("p",[e._v("Move Focus in several areas, also move in scroll areas")]),e._v(" "),t("p",[e._v("Alt + F4")]),e._v(" "),t("p",[e._v("Close the ACS")])])}),[],!1,null,null,null);t.default=s.exports},466:function(e,t,n){e.exports=n.p+"assets/img/keyboard-menu1.038c9a85.png"},467:function(e,t,n){e.exports=n.p+"assets/img/keyboard-menu2.e58dda53.png"},468:function(e,t,n){e.exports=n.p+"assets/img/keyboard-contextmenu.36dfb622.png"},469:function(e,t,n){e.exports=n.p+"assets/img/keyboard-output_ports.d1399fb9.png"},470:function(e,t){e.exports="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/300.ce2f0795.js b/assets/js/300.cfd04eb4.js similarity index 91% rename from assets/js/300.ce2f0795.js rename to assets/js/300.cfd04eb4.js index b3d5e005e3..1fc0c68876 100644 --- a/assets/js/300.ce2f0795.js +++ b/assets/js/300.cfd04eb4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[300],{944:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-webserver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver"}},[e._v("#")]),e._v(" ARE Webserver")]),e._v(" "),t("p",[e._v("The ARE provides a webserver with the document root at")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ARE/web/\n")])])]),t("p",[e._v("Then you can open the start page by")]),e._v(" "),t("p",[e._v("http://localhost:8081/")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[300],{940:function(e,t,a){"use strict";a.r(t);var r=a(2),s=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-webserver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver"}},[e._v("#")]),e._v(" ARE Webserver")]),e._v(" "),t("p",[e._v("The ARE provides a webserver with the document root at")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ARE/web/\n")])])]),t("p",[e._v("Then you can open the start page by")]),e._v(" "),t("p",[e._v("http://localhost:8081/")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/301.467c731a.js b/assets/js/301.37ff11e2.js similarity index 92% rename from assets/js/301.467c731a.js rename to assets/js/301.37ff11e2.js index 9e10394229..0285074bf9 100644 --- a/assets/js/301.467c731a.js +++ b/assets/js/301.37ff11e2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[301],{940:function(t,e,s){"use strict";s.r(e);var o=s(2),n=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"at-solutions-demos"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#at-solutions-demos"}},[this._v("#")]),this._v(" AT Solutions Demos")]),this._v(" "),t("p",[this._v("Show github project search results here?\nWith preview??\nHow to open Web UI of AT solution (embedded or external tab?)")]),this._v(" "),t("p",[t("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/index.html#submenuSolutionDemos",target:"_blank",rel:"noopener noreferrer"}},[this._v("List of AT solution demos"),t("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[301],{944:function(t,e,s){"use strict";s.r(e);var o=s(2),n=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"at-solutions-demos"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#at-solutions-demos"}},[this._v("#")]),this._v(" AT Solutions Demos")]),this._v(" "),t("p",[this._v("Show github project search results here?\nWith preview??\nHow to open Web UI of AT solution (embedded or external tab?)")]),this._v(" "),t("p",[t("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/index.html#submenuSolutionDemos",target:"_blank",rel:"noopener noreferrer"}},[this._v("List of AT solution demos"),t("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/302.764dd69c.js b/assets/js/302.84284d9c.js similarity index 85% rename from assets/js/302.764dd69c.js rename to assets/js/302.84284d9c.js index b2f16574a0..0f574b6380 100644 --- a/assets/js/302.764dd69c.js +++ b/assets/js/302.84284d9c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[302],{942:function(t,s,n){"use strict";n.r(s);var o=n(2),a=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"at-solution"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#at-solution"}},[this._v("#")]),this._v(" AT Solution")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[302],{943:function(t,s,n){"use strict";n.r(s);var o=n(2),a=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"at-solution"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#at-solution"}},[this._v("#")]),this._v(" AT Solution")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/303.a1b0be60.js b/assets/js/303.b5a5a0ee.js similarity index 85% rename from assets/js/303.a1b0be60.js rename to assets/js/303.b5a5a0ee.js index 10e5bc5e98..3fa0e9b83b 100644 --- a/assets/js/303.a1b0be60.js +++ b/assets/js/303.b5a5a0ee.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[303],{943:function(t,s,i){"use strict";i.r(s);var n=i(2),e=Object(n.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"coding-guidelines"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#coding-guidelines"}},[this._v("#")]),this._v(" Coding Guidelines")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[303],{945:function(t,s,i){"use strict";i.r(s);var n=i(2),e=Object(n.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"coding-guidelines"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#coding-guidelines"}},[this._v("#")]),this._v(" Coding Guidelines")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/305.ac58fd5f.js b/assets/js/305.d4c73fcc.js similarity index 92% rename from assets/js/305.ac58fd5f.js rename to assets/js/305.d4c73fcc.js index c1de4fa020..d6b0bc94a3 100644 --- a/assets/js/305.ac58fd5f.js +++ b/assets/js/305.d4c73fcc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[305],{953:function(t,e,o){"use strict";o.r(e);var s=o(2),i=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"develop"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#develop"}},[t._v("#")]),t._v(" Develop")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),e("p",[t._v("If you are a "),e("strong",[t._v("developer")]),t._v(" or an AT expert with "),e("strong",[t._v("technical background")]),t._v(", this is the right place for you.")]),t._v(" "),e("p",[t._v("In this section, you will find information for developing AsTeRICS or elements of it like plugins or AT solutions.")])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[305],{950:function(t,e,o){"use strict";o.r(e);var s=o(2),i=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"develop"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#develop"}},[t._v("#")]),t._v(" Develop")]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),e("p",[t._v("If you are a "),e("strong",[t._v("developer")]),t._v(" or an AT expert with "),e("strong",[t._v("technical background")]),t._v(", this is the right place for you.")]),t._v(" "),e("p",[t._v("In this section, you will find information for developing AsTeRICS or elements of it like plugins or AT solutions.")])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/306.1b1eaee1.js b/assets/js/306.f5de698c.js similarity index 90% rename from assets/js/306.1b1eaee1.js rename to assets/js/306.f5de698c.js index 96261d137e..ff0a5b5433 100644 --- a/assets/js/306.1b1eaee1.js +++ b/assets/js/306.f5de698c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[306],{949:function(t,s,r){"use strict";r.r(s);var e=r(2),a=Object(e.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"rest-java-client-library"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rest-java-client-library"}},[this._v("#")]),this._v(" REST Java Client library")]),this._v(" "),t("p",[this._v("The source code can be found "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/ARE_RestAPIlibraries/JavaLibrary"}},[this._v("here")]),this._v(".")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[306],{952:function(t,s,r){"use strict";r.r(s);var e=r(2),a=Object(e.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"rest-java-client-library"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rest-java-client-library"}},[this._v("#")]),this._v(" REST Java Client library")]),this._v(" "),t("p",[this._v("The source code can be found "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/ARE_RestAPIlibraries/JavaLibrary"}},[this._v("here")]),this._v(".")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/307.1bec56a1.js b/assets/js/307.8370f9c2.js similarity index 91% rename from assets/js/307.1bec56a1.js rename to assets/js/307.8370f9c2.js index 5f2774819d..d93d4a29a8 100644 --- a/assets/js/307.1bec56a1.js +++ b/assets/js/307.8370f9c2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[307],{950:function(t,s,r){"use strict";r.r(s);var a=r(2),e=Object(a.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"javascript-rest-api-client-library"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-rest-api-client-library"}},[this._v("#")]),this._v(" Javascript REST API client library")]),this._v(" "),t("p",[this._v("The source code can be found "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"}},[this._v("here")]),this._v(".")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[307],{951:function(t,s,r){"use strict";r.r(s);var a=r(2),e=Object(a.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"javascript-rest-api-client-library"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-rest-api-client-library"}},[this._v("#")]),this._v(" Javascript REST API client library")]),this._v(" "),t("p",[this._v("The source code can be found "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"}},[this._v("here")]),this._v(".")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/308.b1a53b12.js b/assets/js/308.73da3210.js similarity index 91% rename from assets/js/308.b1a53b12.js rename to assets/js/308.73da3210.js index f83b39dd07..135dff7ff2 100644 --- a/assets/js/308.b1a53b12.js +++ b/assets/js/308.73da3210.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[308],{951:function(t,a,n){"use strict";n.r(a);var i=n(2),e=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"javascript-model-manipulation-and-deployment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-model-manipulation-and-deployment"}},[this._v("#")]),this._v(" Javascript model manipulation and deployment")]),this._v(" "),t("ul",[t("li",[this._v("Javascript libraries for model manipulation and model deployment:\n"),t("ul",[t("li",[t("StaticLink",{attrs:{href:"APIs/js-modelManipulation_webAppUtils/index.html",text:"Model manipulation and deployment"}})],1)])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[308],{953:function(t,a,n){"use strict";n.r(a);var i=n(2),e=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"javascript-model-manipulation-and-deployment"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-model-manipulation-and-deployment"}},[this._v("#")]),this._v(" Javascript model manipulation and deployment")]),this._v(" "),t("ul",[t("li",[this._v("Javascript libraries for model manipulation and model deployment:\n"),t("ul",[t("li",[t("StaticLink",{attrs:{href:"APIs/js-modelManipulation_webAppUtils/index.html",text:"Model manipulation and deployment"}})],1)])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/309.4a0d4d1d.js b/assets/js/309.a41e3133.js similarity index 97% rename from assets/js/309.4a0d4d1d.js rename to assets/js/309.a41e3133.js index d7b3dfd704..0168e07e40 100644 --- a/assets/js/309.4a0d4d1d.js +++ b/assets/js/309.a41e3133.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[309],{952:function(t,e,a){"use strict";a.r(e);var r=a(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rest-api"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-api"}},[t._v("#")]),t._v(" REST API")]),t._v(" "),e("h2",{attrs:{id:"general-information"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#general-information"}},[t._v("#")]),t._v(" General Information")]),t._v(" "),e("p",[t._v("The ARE provides a REST API with several functionalities. The base REST URI is:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("http://localhost:8081/rest/\n")])])]),e("p",[t._v("or")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("https://localhost:8083/rest/\n")])])]),e("p",[t._v("In order to get a list of all available rest methods use:\nhttp://localhost:8081/rest/restfunctions")]),t._v(" "),e("h2",{attrs:{id:"rest-api-links"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-api-links"}},[t._v("#")]),t._v(" REST API Links")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/#submenuRest",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST demo"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"./asterics-wiki/api/REST-API"}},[t._v("REST Tutorial")])]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/doc/lib-js-api/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper 2"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/ARE_RestAPIlibraries/JavaLibrary",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Java Client Wrapper"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[309],{954:function(t,e,a){"use strict";a.r(e);var r=a(2),s=Object(r.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rest-api"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-api"}},[t._v("#")]),t._v(" REST API")]),t._v(" "),e("h2",{attrs:{id:"general-information"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#general-information"}},[t._v("#")]),t._v(" General Information")]),t._v(" "),e("p",[t._v("The ARE provides a REST API with several functionalities. The base REST URI is:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("http://localhost:8081/rest/\n")])])]),e("p",[t._v("or")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("https://localhost:8083/rest/\n")])])]),e("p",[t._v("In order to get a list of all available rest methods use:\nhttp://localhost:8081/rest/restfunctions")]),t._v(" "),e("h2",{attrs:{id:"rest-api-links"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-api-links"}},[t._v("#")]),t._v(" REST API Links")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/#submenuRest",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST demo"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"./asterics-wiki/api/REST-API"}},[t._v("REST Tutorial")])]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/doc/lib-js-api/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper 2"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/ARE_RestAPIlibraries/JavaLibrary",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Java Client Wrapper"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/31.4b6a9279.js b/assets/js/31.82877776.js similarity index 96% rename from assets/js/31.4b6a9279.js rename to assets/js/31.82877776.js index fd03b7e99f..f15a79c12e 100644 --- a/assets/js/31.4b6a9279.js +++ b/assets/js/31.82877776.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{1126:function(t,e,n){"use strict";n.r(e);var o=n(2),a=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"amazonechocontrol"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#amazonechocontrol"}},[t._v("#")]),t._v(" AmazonEchoControl")]),t._v(" "),e("p",[t._v("Component Type: Processors (Subcategory: Home Control)")]),t._v(" "),e("p",[t._v("This plugin is based on the openHAB plugin, but is only used to control the "),e("a",{attrs:{href:"https://www.openhab.org/addons/bindings/amazonechocontrol/",target:"_blank",rel:"noopener noreferrer"}},[t._v("AmazonEchoControl binding"),e("OutboundLink")],1),t._v(" from openHAB.")]),t._v(" "),e("p",[t._v("See the "),e("a",{attrs:{href:"https://www.openhab.org/docs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB documentation"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("This component uses the provided "),e("a",{attrs:{href:"https://www.openhab.org/docs/configuration/restdocs.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST API of openHAB"),e("OutboundLink")],1),t._v(" to read and write the state of different nodes (called items) within the openHAB system.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The plugin expects")]),t._v(" "),e("ul",[e("li",[t._v("a functional "),e("a",{attrs:{href:"https://www.openhab.org/docs/installation/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB installation"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://www.amazon.de/b?ie=UTF8&node=14100226031",target:"_blank",rel:"noopener noreferrer"}},[t._v("Amazon Echo or similar device"),e("OutboundLink")],1)])]),t._v(" "),e("h3",{attrs:{id:"installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),e("p",[t._v("To run openHAB without password authentication, start openHAB with this command:")]),t._v(" "),e("h4",{attrs:{id:"linux-and-macos"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux-and-macos"}},[t._v("#")]),t._v(" Linux and macOS")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("./start_debug.sh\n")])])]),e("p",[t._v("or on a debian-based system this should be:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" openhab-cli start\n")])])]),e("h4",{attrs:{id:"windows"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[t._v("#")]),t._v(" Windows")]),t._v(" "),e("p",[t._v("in the openHAB folder, double click on")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("start_debug.bat\n")])])]),e("p",[t._v("After installing and running openHAB, start the browser and use "),e("a",{attrs:{href:"https://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://localhost:8080"),e("OutboundLink")],1),t._v(" for HTTP or "),e("a",{attrs:{href:"https://localhost:8443",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://localhost:8443"),e("OutboundLink")],1),t._v(" for HTTPS.")]),t._v(" "),e("p",[t._v("See the ("),e("a",{attrs:{href:"https://www.openhab.org/docs/installation/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB installation guide"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("h4",{attrs:{id:"initial-setup-of-openhab"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#initial-setup-of-openhab"}},[t._v("#")]),t._v(" Initial Setup of openHAB")]),t._v(" "),e("p",[t._v("Before this plugin can be used, the openHAB must be initialized and the AmazonEchoControl binding must be installed. The following steps, based on the "),e("a",{attrs:{href:"https://www.openhab.org/docs/tutorial/1sttimesetup.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB first-time setup"),e("OutboundLink")],1),t._v(", must be done")]),t._v(" "),e("h3",{attrs:{id:"connect-amazon-account"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#connect-amazon-account"}},[t._v("#")]),t._v(" Connect Amazon Account")]),t._v(" "),e("ol",[e("li",[t._v("Select "),e("strong",[t._v("Standard (recommended setup)")]),t._v(", this step can take a while")]),t._v(" "),e("li",[t._v("Select the "),e("strong",[t._v("PAPER UI")])]),t._v(" "),e("li",[t._v("Go to "),e("strong",[t._v("Add-ons")]),t._v(" in the control panel and on Tab "),e("strong",[t._v("BINDINGS")]),t._v(" and search for "),e("strong",[t._v("Amazon Echo Control Binding")]),t._v(" and click install.")]),t._v(" "),e("li",[t._v("Go to "),e("strong",[t._v("Configuration")]),t._v(" and click on "),e("strong",[t._v("Things")]),t._v(" and click on "),e("code",[t._v("Amazon Echo Control Binding")]),t._v(".")]),t._v(" "),e("li",[t._v("Click on "),e("strong",[t._v("Amazon Account")]),t._v(" and accept it by pressing on the tick\n"),e("img",{attrs:{src:n(685),alt:"Screenshot Amazon Account Thing Creation"}})]),t._v(" "),e("li",[t._v("After that, use this link to connect openHAB with your "),e("strong",[t._v("Amazon Account")]),t._v(" ("),e("a",{attrs:{href:"http://localhost:8080/amazonechocontrol/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/amazonechocontrol/"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("li",[t._v("Back in the "),e("strong",[t._v("Configuration")]),t._v(" menu click on "),e("strong",[t._v("Things")]),t._v(", the account should be online.")])]),t._v(" "),e("p",[t._v("if not, follow the instruction at: "),e("a",{attrs:{href:"https://www.openhab.org/addons/bindings/amazonechocontrol/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB: AmazonEchoControl-Binding"),e("OutboundLink")],1)]),t._v(" "),e("p",[e("img",{attrs:{src:n(686),alt:"Screenshot: Amazon Account Online",title:"Screenshot: Amazon Account Online"}})]),t._v(" "),e("h5",{attrs:{id:"setup-amazon-device"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setup-amazon-device"}},[t._v("#")]),t._v(" Setup Amazon Device")]),t._v(" "),e("p",[t._v("The Amazon device must be setup within your "),e("a",{attrs:{href:"https://alexa.amazon.de",target:"_blank",rel:"noopener noreferrer"}},[t._v("amazon alexa account"),e("OutboundLink")],1),t._v(" or using the amazon alexa app.")]),t._v(" "),e("ol",{attrs:{start:"9"}},[e("li",[t._v("Switch on "),e("strong",[t._v("Simple Mode")]),t._v(" in "),e("strong",[t._v("Configuration/System")])]),t._v(" "),e("li",[t._v("If everything worked, go to "),e("strong",[t._v("Inbox")]),t._v(" and accept the new "),e("strong",[t._v("Things")]),t._v(".")]),t._v(" "),e("li",[t._v("The things will show up in the "),e("strong",[t._v("Control")]),t._v(" area.")]),t._v(" "),e("li",[t._v("Link all channels to make them available as items\n"),e("img",{attrs:{src:n(687),alt:"Screenshot of how to link amazon echo channels"}})])]),t._v(" "),e("h2",{attrs:{id:"amazonechocontrol-plugin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#amazonechocontrol-plugin"}},[t._v("#")]),t._v(" AmazonEchoControl Plugin")]),t._v(" "),e("p",[e("img",{attrs:{src:n(688),alt:"Screenshot: AmazonEchoControl Plugin",title:"Screenshot: AmazonEchoControl Plugin"}})]),t._v(" "),e("h4",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("jsonCommand [string]:")]),t._v(" Set a new state of an item, e.g. "),e("code",[t._v('{"ItemSuffix": "player", "value": "PLAY"}')]),t._v("."),e("br"),t._v("\nThe field itemSuffix represents the suffix (from the last "),e("code",[t._v("_")]),t._v(" to the end of the item id) of an item only. The value represents the new state of the item. The itemsuffix has to be written lowercase and the value has to be written in uppercase. For a list of available items, see (http://localhost:8080/rest/items).\n_ "),e("strong",[t._v("Examples:")]),t._v("\n_ "),e("code",[t._v('{"ItemSuffix": "musicProviderId", "value": "SPOTIFY"}')]),t._v(" for changing the provider\n_ "),e("code",[t._v('{"ItemSuffix": "volume", "value": "50"}')]),t._v(" for changing the volume\n_ "),e("code",[t._v('{"ItemSuffix": "playMusicVoiceCommand", "value": "Yesterday from the Beatles"}')]),t._v(" for listening to a new song")])]),t._v(" "),e("h4",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("currentState:")]),t._v(" The current state of the item, which was changed with the latest "),e("strong",[t._v("jsonCommand")]),t._v(".")]),t._v(" "),e("li",[e("strong",[t._v("currentTitle:")]),t._v(" The title of the current song playing.")]),t._v(" "),e("li",[e("strong",[t._v("cmdResponse:")]),t._v(" The response of the latest "),e("strong",[t._v("jsonCommand")]),t._v(". Shows "),e("strong",[t._v("OK")]),t._v(" if the cmd was correct or "),e("strong",[t._v("ERROR")]),t._v(" if it was not (plus a more detailed error message)")])]),t._v(" "),e("h4",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("p",[e("img",{attrs:{src:n(689),alt:"Screenshot: List of Eventlistener names and their meaning. The listener names are playerPlay, playerPause, playerNext, playerPrevious, volumeMute, volume30, weather, tellStory, traffic, singASong, flashBriefing",title:"Screenshot: AmazonEchoControl Eventlistener"}})]),t._v(" "),e("h4",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("p",[t._v("This plugin has two event triggers:")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("turnedOn:")]),t._v(" Sent, when the music starts")]),t._v(" "),e("li",[e("strong",[t._v("turnedOff:")]),t._v(" Sent, when the music is paused/stopped.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("updaterate [integer]:")]),t._v(" Time in milliseconds, which will ellapse between each status update. Default: 1s (1000ms)")]),t._v(" "),e("li",[e("strong",[t._v("hostname [string]:")]),t._v(" Hostname to connect to. It is possible to use a hostname, an IP adress or a FQDN")]),t._v(" "),e("li",[e("strong",[t._v("port [string]:")]),t._v(" Port of the openHAB installation. Defaults: 8080 for HTTP, 8443 for HTTPS. Please take care of any blocking firewall.")]),t._v(" "),e("li",[e("strong",[t._v("protocol:")]),t._v(" Protocol to connect to openHAB. Either http or https may be used (recommended: https).")]),t._v(" "),e("li",[e("strong",[t._v("lazyCertificates [boolean]:")]),t._v(" If this property is set, any SSL related certificate check will be removed for the given hostname. This affects the whole ARE.")]),t._v(" "),e("li",[e("strong",[t._v("username [string]:")]),t._v(" This property is used, if the HTTP basic authentication of openHAB is used. Provide the username here.")]),t._v(" "),e("li",[e("strong",[t._v("password [string]:")]),t._v(" This property is used, if the HTTP basic authentication of openHAB is used. Provide the password here.")])]),t._v(" "),e("h2",{attrs:{id:"additional-hints"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-hints"}},[t._v("#")]),t._v(" Additional hints")]),t._v(" "),e("ul",[e("li",[t._v("The model will stop with an error message, if one of the item names in the properties is not found.")]),t._v(" "),e("li",[t._v("There is no feedback for checking a successful state change. E.g.: if your write to a read-only item (temperature sensor), nothing will happen")]),t._v(" "),e("li",[t._v("Use the "),e("em",[t._v("lazyCertificates")]),t._v(" property with care, it will disable a major part of the SSL handshaking for the whole Java session. It should be limited to the given hostname only, but without warranty.")]),t._v(" "),e("li",[t._v("The username/password combination from the properties is saved in PLAINTEXT in the model file, so handle it with care.")])])])}),[],!1,null,null,null);e.default=a.exports},685:function(t,e,n){t.exports=n.p+"assets/img/amazonechocontrol-addthing-amazonaccount.071ee87a.png"},686:function(t,e,n){t.exports=n.p+"assets/img/amazonaccount.c8dd444d.JPG"},687:function(t,e,n){t.exports=n.p+"assets/img/amazonechocontrol-linkchannels.0c69eef9.png"},688:function(t,e){t.exports="data:image/png;base64,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"},689:function(t,e,n){t.exports=n.p+"assets/img/amazonechocontrol_eventlistener.1e5b29fc.PNG"}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{1128:function(t,e,n){"use strict";n.r(e);var o=n(2),a=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"amazonechocontrol"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#amazonechocontrol"}},[t._v("#")]),t._v(" AmazonEchoControl")]),t._v(" "),e("p",[t._v("Component Type: Processors (Subcategory: Home Control)")]),t._v(" "),e("p",[t._v("This plugin is based on the openHAB plugin, but is only used to control the "),e("a",{attrs:{href:"https://www.openhab.org/addons/bindings/amazonechocontrol/",target:"_blank",rel:"noopener noreferrer"}},[t._v("AmazonEchoControl binding"),e("OutboundLink")],1),t._v(" from openHAB.")]),t._v(" "),e("p",[t._v("See the "),e("a",{attrs:{href:"https://www.openhab.org/docs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB documentation"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("p",[t._v("This component uses the provided "),e("a",{attrs:{href:"https://www.openhab.org/docs/configuration/restdocs.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST API of openHAB"),e("OutboundLink")],1),t._v(" to read and write the state of different nodes (called items) within the openHAB system.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("p",[t._v("The plugin expects")]),t._v(" "),e("ul",[e("li",[t._v("a functional "),e("a",{attrs:{href:"https://www.openhab.org/docs/installation/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB installation"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://www.amazon.de/b?ie=UTF8&node=14100226031",target:"_blank",rel:"noopener noreferrer"}},[t._v("Amazon Echo or similar device"),e("OutboundLink")],1)])]),t._v(" "),e("h3",{attrs:{id:"installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[t._v("#")]),t._v(" Installation")]),t._v(" "),e("p",[t._v("To run openHAB without password authentication, start openHAB with this command:")]),t._v(" "),e("h4",{attrs:{id:"linux-and-macos"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#linux-and-macos"}},[t._v("#")]),t._v(" Linux and macOS")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("./start_debug.sh\n")])])]),e("p",[t._v("or on a debian-based system this should be:")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" openhab-cli start\n")])])]),e("h4",{attrs:{id:"windows"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#windows"}},[t._v("#")]),t._v(" Windows")]),t._v(" "),e("p",[t._v("in the openHAB folder, double click on")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("start_debug.bat\n")])])]),e("p",[t._v("After installing and running openHAB, start the browser and use "),e("a",{attrs:{href:"https://localhost:8080",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://localhost:8080"),e("OutboundLink")],1),t._v(" for HTTP or "),e("a",{attrs:{href:"https://localhost:8443",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://localhost:8443"),e("OutboundLink")],1),t._v(" for HTTPS.")]),t._v(" "),e("p",[t._v("See the ("),e("a",{attrs:{href:"https://www.openhab.org/docs/installation/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB installation guide"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("h4",{attrs:{id:"initial-setup-of-openhab"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#initial-setup-of-openhab"}},[t._v("#")]),t._v(" Initial Setup of openHAB")]),t._v(" "),e("p",[t._v("Before this plugin can be used, the openHAB must be initialized and the AmazonEchoControl binding must be installed. The following steps, based on the "),e("a",{attrs:{href:"https://www.openhab.org/docs/tutorial/1sttimesetup.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB first-time setup"),e("OutboundLink")],1),t._v(", must be done")]),t._v(" "),e("h3",{attrs:{id:"connect-amazon-account"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#connect-amazon-account"}},[t._v("#")]),t._v(" Connect Amazon Account")]),t._v(" "),e("ol",[e("li",[t._v("Select "),e("strong",[t._v("Standard (recommended setup)")]),t._v(", this step can take a while")]),t._v(" "),e("li",[t._v("Select the "),e("strong",[t._v("PAPER UI")])]),t._v(" "),e("li",[t._v("Go to "),e("strong",[t._v("Add-ons")]),t._v(" in the control panel and on Tab "),e("strong",[t._v("BINDINGS")]),t._v(" and search for "),e("strong",[t._v("Amazon Echo Control Binding")]),t._v(" and click install.")]),t._v(" "),e("li",[t._v("Go to "),e("strong",[t._v("Configuration")]),t._v(" and click on "),e("strong",[t._v("Things")]),t._v(" and click on "),e("code",[t._v("Amazon Echo Control Binding")]),t._v(".")]),t._v(" "),e("li",[t._v("Click on "),e("strong",[t._v("Amazon Account")]),t._v(" and accept it by pressing on the tick\n"),e("img",{attrs:{src:n(687),alt:"Screenshot Amazon Account Thing Creation"}})]),t._v(" "),e("li",[t._v("After that, use this link to connect openHAB with your "),e("strong",[t._v("Amazon Account")]),t._v(" ("),e("a",{attrs:{href:"http://localhost:8080/amazonechocontrol/",target:"_blank",rel:"noopener noreferrer"}},[t._v("http://localhost:8080/amazonechocontrol/"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("li",[t._v("Back in the "),e("strong",[t._v("Configuration")]),t._v(" menu click on "),e("strong",[t._v("Things")]),t._v(", the account should be online.")])]),t._v(" "),e("p",[t._v("if not, follow the instruction at: "),e("a",{attrs:{href:"https://www.openhab.org/addons/bindings/amazonechocontrol/",target:"_blank",rel:"noopener noreferrer"}},[t._v("openHAB: AmazonEchoControl-Binding"),e("OutboundLink")],1)]),t._v(" "),e("p",[e("img",{attrs:{src:n(688),alt:"Screenshot: Amazon Account Online",title:"Screenshot: Amazon Account Online"}})]),t._v(" "),e("h5",{attrs:{id:"setup-amazon-device"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setup-amazon-device"}},[t._v("#")]),t._v(" Setup Amazon Device")]),t._v(" "),e("p",[t._v("The Amazon device must be setup within your "),e("a",{attrs:{href:"https://alexa.amazon.de",target:"_blank",rel:"noopener noreferrer"}},[t._v("amazon alexa account"),e("OutboundLink")],1),t._v(" or using the amazon alexa app.")]),t._v(" "),e("ol",{attrs:{start:"9"}},[e("li",[t._v("Switch on "),e("strong",[t._v("Simple Mode")]),t._v(" in "),e("strong",[t._v("Configuration/System")])]),t._v(" "),e("li",[t._v("If everything worked, go to "),e("strong",[t._v("Inbox")]),t._v(" and accept the new "),e("strong",[t._v("Things")]),t._v(".")]),t._v(" "),e("li",[t._v("The things will show up in the "),e("strong",[t._v("Control")]),t._v(" area.")]),t._v(" "),e("li",[t._v("Link all channels to make them available as items\n"),e("img",{attrs:{src:n(689),alt:"Screenshot of how to link amazon echo channels"}})])]),t._v(" "),e("h2",{attrs:{id:"amazonechocontrol-plugin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#amazonechocontrol-plugin"}},[t._v("#")]),t._v(" AmazonEchoControl Plugin")]),t._v(" "),e("p",[e("img",{attrs:{src:n(690),alt:"Screenshot: AmazonEchoControl Plugin",title:"Screenshot: AmazonEchoControl Plugin"}})]),t._v(" "),e("h4",{attrs:{id:"input-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#input-port-description"}},[t._v("#")]),t._v(" Input Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("jsonCommand [string]:")]),t._v(" Set a new state of an item, e.g. "),e("code",[t._v('{"ItemSuffix": "player", "value": "PLAY"}')]),t._v("."),e("br"),t._v("\nThe field itemSuffix represents the suffix (from the last "),e("code",[t._v("_")]),t._v(" to the end of the item id) of an item only. The value represents the new state of the item. The itemsuffix has to be written lowercase and the value has to be written in uppercase. For a list of available items, see (http://localhost:8080/rest/items).\n_ "),e("strong",[t._v("Examples:")]),t._v("\n_ "),e("code",[t._v('{"ItemSuffix": "musicProviderId", "value": "SPOTIFY"}')]),t._v(" for changing the provider\n_ "),e("code",[t._v('{"ItemSuffix": "volume", "value": "50"}')]),t._v(" for changing the volume\n_ "),e("code",[t._v('{"ItemSuffix": "playMusicVoiceCommand", "value": "Yesterday from the Beatles"}')]),t._v(" for listening to a new song")])]),t._v(" "),e("h4",{attrs:{id:"output-port-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-port-description"}},[t._v("#")]),t._v(" Output Port Description")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("currentState:")]),t._v(" The current state of the item, which was changed with the latest "),e("strong",[t._v("jsonCommand")]),t._v(".")]),t._v(" "),e("li",[e("strong",[t._v("currentTitle:")]),t._v(" The title of the current song playing.")]),t._v(" "),e("li",[e("strong",[t._v("cmdResponse:")]),t._v(" The response of the latest "),e("strong",[t._v("jsonCommand")]),t._v(". Shows "),e("strong",[t._v("OK")]),t._v(" if the cmd was correct or "),e("strong",[t._v("ERROR")]),t._v(" if it was not (plus a more detailed error message)")])]),t._v(" "),e("h4",{attrs:{id:"event-listener-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-listener-description"}},[t._v("#")]),t._v(" Event Listener Description")]),t._v(" "),e("p",[e("img",{attrs:{src:n(691),alt:"Screenshot: List of Eventlistener names and their meaning. The listener names are playerPlay, playerPause, playerNext, playerPrevious, volumeMute, volume30, weather, tellStory, traffic, singASong, flashBriefing",title:"Screenshot: AmazonEchoControl Eventlistener"}})]),t._v(" "),e("h4",{attrs:{id:"event-trigger-description"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#event-trigger-description"}},[t._v("#")]),t._v(" Event Trigger Description")]),t._v(" "),e("p",[t._v("This plugin has two event triggers:")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("turnedOn:")]),t._v(" Sent, when the music starts")]),t._v(" "),e("li",[e("strong",[t._v("turnedOff:")]),t._v(" Sent, when the music is paused/stopped.")])]),t._v(" "),e("h2",{attrs:{id:"properties"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#properties"}},[t._v("#")]),t._v(" Properties")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("updaterate [integer]:")]),t._v(" Time in milliseconds, which will ellapse between each status update. Default: 1s (1000ms)")]),t._v(" "),e("li",[e("strong",[t._v("hostname [string]:")]),t._v(" Hostname to connect to. It is possible to use a hostname, an IP adress or a FQDN")]),t._v(" "),e("li",[e("strong",[t._v("port [string]:")]),t._v(" Port of the openHAB installation. Defaults: 8080 for HTTP, 8443 for HTTPS. Please take care of any blocking firewall.")]),t._v(" "),e("li",[e("strong",[t._v("protocol:")]),t._v(" Protocol to connect to openHAB. Either http or https may be used (recommended: https).")]),t._v(" "),e("li",[e("strong",[t._v("lazyCertificates [boolean]:")]),t._v(" If this property is set, any SSL related certificate check will be removed for the given hostname. This affects the whole ARE.")]),t._v(" "),e("li",[e("strong",[t._v("username [string]:")]),t._v(" This property is used, if the HTTP basic authentication of openHAB is used. Provide the username here.")]),t._v(" "),e("li",[e("strong",[t._v("password [string]:")]),t._v(" This property is used, if the HTTP basic authentication of openHAB is used. Provide the password here.")])]),t._v(" "),e("h2",{attrs:{id:"additional-hints"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-hints"}},[t._v("#")]),t._v(" Additional hints")]),t._v(" "),e("ul",[e("li",[t._v("The model will stop with an error message, if one of the item names in the properties is not found.")]),t._v(" "),e("li",[t._v("There is no feedback for checking a successful state change. E.g.: if your write to a read-only item (temperature sensor), nothing will happen")]),t._v(" "),e("li",[t._v("Use the "),e("em",[t._v("lazyCertificates")]),t._v(" property with care, it will disable a major part of the SSL handshaking for the whole Java session. It should be limited to the given hostname only, but without warranty.")]),t._v(" "),e("li",[t._v("The username/password combination from the properties is saved in PLAINTEXT in the model file, so handle it with care.")])])])}),[],!1,null,null,null);e.default=a.exports},687:function(t,e,n){t.exports=n.p+"assets/img/amazonechocontrol-addthing-amazonaccount.071ee87a.png"},688:function(t,e,n){t.exports=n.p+"assets/img/amazonaccount.c8dd444d.JPG"},689:function(t,e,n){t.exports=n.p+"assets/img/amazonechocontrol-linkchannels.0c69eef9.png"},690:function(t,e){t.exports="data:image/png;base64,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"},691:function(t,e,n){t.exports=n.p+"assets/img/amazonechocontrol_eventlistener.1e5b29fc.PNG"}}]); \ No newline at end of file diff --git a/assets/js/310.78421141.js b/assets/js/310.40a47636.js similarity index 97% rename from assets/js/310.78421141.js rename to assets/js/310.40a47636.js index 292db9d7f6..afc5a86dcf 100644 --- a/assets/js/310.78421141.js +++ b/assets/js/310.40a47636.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[310],{954:function(t,e,a){"use strict";a.r(e);var s=a(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rest-demos-with-javascript-client-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-demos-with-javascript-client-library"}},[t._v("#")]),t._v(" REST demos with Javascript client library")]),t._v(" "),e("p",[t._v("The ARE provides a REST API with several functionalities. The base REST URI is:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("http://localhost:8081/rest/\n")])])]),e("p",[t._v("In order to get a list of all available rest methods use: "),e("StaticLink",{attrs:{href:"http://localhost:8081/rest/restfunctions",target:"_blank",text:"http://localhost:8081/rest/restfunctions"}})],1),t._v(" "),e("h2",{attrs:{id:"examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),e("p",[t._v("One way to use the REST API ist to use the Javascript library "),e("a",{attrs:{target:"_blank",href:"./javascript/areCommunicator.js"}},[t._v("areCommunicator.js")]),t._v(". Use the following links to navigate to examples using this library:")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/are_repository.html",text:"ARE Repository"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("REST methods to interact with the ARE model repository (list, store, delete).")]),t._v(" "),e("ul",[e("li",[t._v('"/>:\n')])]),t._v(" "),e("p",[t._v("Interact with data channels and event channels of the ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_components.html",text:"ARE Model Components"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Interact with components of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_deployment.html",text:"ARE Model Deployment"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Deploy and upload ARE models.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_state.html",text:"ARE Model State"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Get information and change the state of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/sse.html",text:"Server Sent Events"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Subscribe to server sent events (SSE) of the current ARE model.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[310],{957:function(t,e,a){"use strict";a.r(e);var s=a(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rest-demos-with-javascript-client-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-demos-with-javascript-client-library"}},[t._v("#")]),t._v(" REST demos with Javascript client library")]),t._v(" "),e("p",[t._v("The ARE provides a REST API with several functionalities. The base REST URI is:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("http://localhost:8081/rest/\n")])])]),e("p",[t._v("In order to get a list of all available rest methods use: "),e("StaticLink",{attrs:{href:"http://localhost:8081/rest/restfunctions",target:"_blank",text:"http://localhost:8081/rest/restfunctions"}})],1),t._v(" "),e("h2",{attrs:{id:"examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),e("p",[t._v("One way to use the REST API ist to use the Javascript library "),e("a",{attrs:{target:"_blank",href:"./javascript/areCommunicator.js"}},[t._v("areCommunicator.js")]),t._v(". Use the following links to navigate to examples using this library:")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/are_repository.html",text:"ARE Repository"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("REST methods to interact with the ARE model repository (list, store, delete).")]),t._v(" "),e("ul",[e("li",[t._v('"/>:\n')])]),t._v(" "),e("p",[t._v("Interact with data channels and event channels of the ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_components.html",text:"ARE Model Components"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Interact with components of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_deployment.html",text:"ARE Model Deployment"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Deploy and upload ARE models.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_state.html",text:"ARE Model State"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Get information and change the state of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/sse.html",text:"Server Sent Events"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Subscribe to server sent events (SSE) of the current ARE model.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/311.4e9336ae.js b/assets/js/311.2c94ed87.js similarity index 85% rename from assets/js/311.4e9336ae.js rename to assets/js/311.2c94ed87.js index af7abd0fb2..0958e8effa 100644 --- a/assets/js/311.4e9336ae.js +++ b/assets/js/311.2c94ed87.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[311],{955:function(t,s,n){"use strict";n.r(s);var i=n(2),e=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"unit-testing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#unit-testing"}},[this._v("#")]),this._v(" Unit Testing")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[311],{956:function(t,s,n){"use strict";n.r(s);var i=n(2),e=Object(i.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"unit-testing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#unit-testing"}},[this._v("#")]),this._v(" Unit Testing")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/312.3f9ae104.js b/assets/js/312.c17ebc44.js similarity index 91% rename from assets/js/312.3f9ae104.js rename to assets/js/312.c17ebc44.js index 226fc473bf..4c98132a8c 100644 --- a/assets/js/312.3f9ae104.js +++ b/assets/js/312.c17ebc44.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[312],{957:function(e,t,r){"use strict";r.r(t);var s=r(2),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-remote-apis"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-remote-apis"}},[e._v("#")]),e._v(" ARE Remote APIs")]),e._v(" "),t("p",[e._v("The ARE provides several web-based interfaces which will be explained in the following tutorials:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"./Webserver"}},[e._v("Webserver")])]),e._v(" "),t("li",[t("a",{attrs:{href:"./REST-API"}},[e._v("REST API")])]),e._v(" "),t("li",[t("a",{attrs:{href:"./Websocket"}},[e._v("Websocket")])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[312],{955:function(e,t,r){"use strict";r.r(t);var s=r(2),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-remote-apis"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-remote-apis"}},[e._v("#")]),e._v(" ARE Remote APIs")]),e._v(" "),t("p",[e._v("The ARE provides several web-based interfaces which will be explained in the following tutorials:")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"./Webserver"}},[e._v("Webserver")])]),e._v(" "),t("li",[t("a",{attrs:{href:"./REST-API"}},[e._v("REST API")])]),e._v(" "),t("li",[t("a",{attrs:{href:"./Websocket"}},[e._v("Websocket")])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/313.2c8882a9.js b/assets/js/313.1ba60539.js similarity index 99% rename from assets/js/313.2c8882a9.js rename to assets/js/313.1ba60539.js index e8f75f500f..6cce54f868 100644 --- a/assets/js/313.2c8882a9.js +++ b/assets/js/313.1ba60539.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[313],{956:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"rest-api-tutorial"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rest-api-tutorial"}},[t._v("#")]),t._v(" REST API Tutorial")]),t._v(" "),a("p",[t._v("This tutorial demonstrates how to use the AsTeRICS REST API with the Javascript library provided with AsTeRICS 3.0.")]),t._v(" "),a("h2",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[t._v("To allow remote communication with the AsTeRICS Runtime Environment (ARE), the ARE REST API was developed. It allows manipulation of resources through a set of HTTP methods such as GET, POST, PUT and DELETE.\nApart from the regular REST functions, an event mechanism through "),a("a",{attrs:{href:"https://www.w3schools.com/html/html5_serversentevents.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("Server Sent Events (SSE)"),a("OutboundLink")],1),t._v(" is provided. With this mechanism, ARE can broadcast messages to anyone who subscribes and inform when an event occurs.\nThe API uses HTTP status codes to declare an error in a call. Specifically, when an error occurs, the response will contain a 500 HTTP status code (Internal Server Error) with an ARE-produced error message inside the HTTP response body.")]),t._v(" "),a("p",[t._v("The base URI for REST operations is:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("http://localhost:8081/rest/\n")])])]),a("p",[t._v("or")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("https://localhost:8083/rest/\n")])])]),a("p",[a("em",[t._v("The default port number is 8081, but can be overridden in the file "),a("code",[t._v("ARE/areProperties")])])]),t._v(" "),a("p",[t._v("In order to get a list of all available REST methods, use the "),a("code",[t._v("restfunctions")]),t._v(" http://localhost:8081/rest/restfunctions call.")]),t._v(" "),a("p",[t._v("There are client libraries facilitating the function calls for "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE_RestAPIlibraries/clientExample/javascript",target:"_blank",rel:"noopener noreferrer"}},[t._v("Javascript"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE_RestAPIlibraries/JavaLibrary",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed and ARE running"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE_RestAPIlibraries/clientExample/javascript",target:"_blank",rel:"noopener noreferrer"}},[t._v("areCommunicator.js, JSMap.js and jquery-3.2.1.min.js libraries"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"example-1-model-start-stop"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-1-model-start-stop"}},[t._v("#")]),t._v(" Example 1 - Model start/stop")]),t._v(" "),a("p",[t._v("In this example you will learn how to stop and start the currently deployed ARE model.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-start_stop-model.html")]),t._v(" somewhere on your hard drive.")]),t._v(" "),a("li",[t._v("Open the file in a browser.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model stop/start"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("START_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("startModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//stopModel")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STOP_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stopModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model stop/start"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("START_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Description: Changes the state of the deployed model to STARTED "),a("span",{pre:!0,attrs:{class:"token entity",title:" "}},[t._v(" ")]),t._v("Ouput: alert"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Start model "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STOP_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Description: Changes the state of the deployed model to STOPPED "),a("span",{pre:!0,attrs:{class:"token entity",title:" "}},[t._v(" ")]),t._v("Ouput: alert"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Stop model "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"example-2-model-upload"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-2-model-upload"}},[t._v("#")]),t._v(" Example 2 - Model upload")]),t._v(" "),a("p",[t._v("This examples shows how a model (XML string) can be uploaded to the ARE.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-upload-model.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model upload"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//uploadModel")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("UPLOAD_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" modelInXML "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UMmodel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" modelInXML"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model upload"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("UPLOAD_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Description: Deploys the model given as a parameter "),a("span",{pre:!0,attrs:{class:"token entity",title:" "}},[t._v(" ")]),t._v("Ouput: alert"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Upload model "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("modelInXML"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("UMmodel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Open the following "),a("a",{attrs:{href:"https://raw.githubusercontent.com/asterics/AsTeRICS/v3.0/bin/ARE/models/ImageDemo.acs",target:"_blank",rel:"noopener noreferrer"}},[t._v("model file"),a("OutboundLink")],1),t._v(" with a text editor and copy and paste the model xml string into the given field.")]),t._v(" "),a("li",[t._v("Click onto "),a("code",[t._v("Upload Model")])])]),t._v(" "),a("h2",{attrs:{id:"example-3-change-plugin-property-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-3-change-plugin-property-values"}},[t._v("#")]),t._v(" Example 3 - Change plugin property values")]),t._v(" "),a("p",[t._v("This example show how to parametrize a model by overriding default property values of plugins in a model. We use the default autostart model (ARE/models/autostart.acs) of the ARE, which is deployed and started automatically upon startup. The model contains a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/TextDisplay.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("TextDisplay plugin"),a("OutboundLink")],1),t._v(" with id "),a("code",[t._v("TextDisplay.1")]),t._v(" and a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&sensors/CellBoard.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("CellBoard plugin"),a("OutboundLink")],1),t._v(" with id "),a("code",[t._v("CellBoard.1")]),t._v(". With the function "),a("code",[t._v("setRuntimeComponentProperties")]),t._v(" you can provide a JSON string with plugin property key/value pairs.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-change-property-values.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Change property values"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SET_RUNTIME_COMPONENT_PROPERTIES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//The JSON object must be sent as JSON string, the keys and values must be Strings as well.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" propertyMap"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Set the default property of the plugin with id TextDisplay.1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"TextDisplay.1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"default"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Change the cellText1 and cellText2 properties of the plugin with id CellBoard.1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"CellBoard.1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"cellText1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cellText1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"cellText2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cellText2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRuntimeComponentProperties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If the ARE could be reached and the method call was successful, the success callback is called.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//The variable data contains an array with key/value pairs of properties which could be set successfully.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If the length of the array == 0, no property could be set successfully. ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" errorMsg"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The property settings could not be applied."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorMsg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'The following properties could be set: '")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" propertyMap"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Change property values"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SET_RUNTIME_COMPONENT_PROPERTIES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Apply Settings "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Cell Text 1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("cellText1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Cell Text 2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("cellText2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Change parameter values for title, cellText1 and cellText2 and click onto "),a("code",[t._v("Apply Settings")])]),t._v(" "),a("li",[t._v("Not all plugin properties can be changed live, so to ensure that the changes are active stop and start the model.")])]),t._v(" "),a("h2",{attrs:{id:"example-4-send-data-to-input-port"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-4-send-data-to-input-port"}},[t._v("#")]),t._v(" Example 4 - Send data to input port")]),t._v(" "),a("p",[t._v("In this example you will learn how to send data to an input port of a plugin. We will use the "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mouse plugin"),a("OutboundLink")],1),t._v(" and send absolute coordinates to the input ports (mouseX, mouseY) to change the absolute mouse position.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Open the "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/?areBaseURI=http://localhost:8081",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebACS"),a("OutboundLink")],1),t._v(" and create a model with a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mouse plugin"),a("OutboundLink")],1),t._v(" and an "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&sensors/EditBox.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("EditBox plugin"),a("OutboundLink")],1),t._v(", where the output port is connected to "),a("code",[t._v("mouseX")]),t._v(" and "),a("code",[t._v("mouseIn")]),t._v(" of the Mouse plugin (see pic below). The EditBox plugin is a workaround for the known "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/issues/230",target:"_blank",rel:"noopener noreferrer"}},[t._v("issue #230"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("p",[a("img",{attrs:{src:"images/Mouse.JPG",alt:"Mouse plugin"}})]),t._v(" "),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Deploy and start the model")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-send-data-to-input-port.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Send Data to Input Ports"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SEND_DATA_TO_INPUT_PORT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Fetch values of input fields and send them to the input ports mouseX and mouseY of the Mouse plugin instance with id Mouse.1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendDataToInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Mouse.1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'mouseX'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x-coordinate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendDataToInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Mouse.1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'mouseY'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"y-coordinate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Send Data to Input Ports"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SEND_DATA_TO_INPUT_PORT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Apply Settings "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter X coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("x-coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Y coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("y-coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"4"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Enter values for X and Y coordinate of the Mouse and press "),a("code",[t._v("Apply Settings")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"example-5-trigger-event-listener"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-5-trigger-event-listener"}},[t._v("#")]),t._v(" Example 5 - Trigger event listener")]),t._v(" "),a("p",[t._v("In this example you will learn how to trigger an event listener of a plugin. The "),a("a",{attrs:{href:"(http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm)"}},[t._v("Mouse plugin")]),t._v(" has event listener for triggering a mouse click (leftClick, middleClick, rightClick). The example triggers the "),a("code",[t._v("rightClick")]),t._v(" event listener.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Open the "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/?areBaseURI=http://localhost:8081",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebACS"),a("OutboundLink")],1),t._v(" and create a model with a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mouse plugin"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[t._v("Deploy and start the model")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-trigger-event-listener.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Trigger event listener"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRIGGER_EVENT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("triggerEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Mouse.1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'rightClick'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Trigger event listener"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRIGGER_EVENT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Generate right click "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"5"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Click on the button "),a("code",[t._v("Generate right click")])])]),t._v(" "),a("h2",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/Documentation/REST_API.pdf",target:"_blank",rel:"noopener noreferrer"}},[t._v("Complete REST API documentation"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/index.html#submenuRest",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST API demo page"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/doc/lib-js-api/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper 2"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/ARE_RestAPIlibraries/JavaLibrary",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Java Client Wrapper"),a("OutboundLink")],1)])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[313],{958:function(t,a,s){"use strict";s.r(a);var n=s(2),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"rest-api-tutorial"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rest-api-tutorial"}},[t._v("#")]),t._v(" REST API Tutorial")]),t._v(" "),a("p",[t._v("This tutorial demonstrates how to use the AsTeRICS REST API with the Javascript library provided with AsTeRICS 3.0.")]),t._v(" "),a("h2",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[t._v("To allow remote communication with the AsTeRICS Runtime Environment (ARE), the ARE REST API was developed. It allows manipulation of resources through a set of HTTP methods such as GET, POST, PUT and DELETE.\nApart from the regular REST functions, an event mechanism through "),a("a",{attrs:{href:"https://www.w3schools.com/html/html5_serversentevents.asp",target:"_blank",rel:"noopener noreferrer"}},[t._v("Server Sent Events (SSE)"),a("OutboundLink")],1),t._v(" is provided. With this mechanism, ARE can broadcast messages to anyone who subscribes and inform when an event occurs.\nThe API uses HTTP status codes to declare an error in a call. Specifically, when an error occurs, the response will contain a 500 HTTP status code (Internal Server Error) with an ARE-produced error message inside the HTTP response body.")]),t._v(" "),a("p",[t._v("The base URI for REST operations is:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("http://localhost:8081/rest/\n")])])]),a("p",[t._v("or")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("https://localhost:8083/rest/\n")])])]),a("p",[a("em",[t._v("The default port number is 8081, but can be overridden in the file "),a("code",[t._v("ARE/areProperties")])])]),t._v(" "),a("p",[t._v("In order to get a list of all available REST methods, use the "),a("code",[t._v("restfunctions")]),t._v(" http://localhost:8081/rest/restfunctions call.")]),t._v(" "),a("p",[t._v("There are client libraries facilitating the function calls for "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE_RestAPIlibraries/clientExample/javascript",target:"_blank",rel:"noopener noreferrer"}},[t._v("Javascript"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE_RestAPIlibraries/JavaLibrary",target:"_blank",rel:"noopener noreferrer"}},[t._v("Java"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/releases/tag/v3.0",target:"_blank",rel:"noopener noreferrer"}},[t._v("AsTeRICS 3.0 installed and ARE running"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/v3.0/ARE_RestAPIlibraries/clientExample/javascript",target:"_blank",rel:"noopener noreferrer"}},[t._v("areCommunicator.js, JSMap.js and jquery-3.2.1.min.js libraries"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"example-1-model-start-stop"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-1-model-start-stop"}},[t._v("#")]),t._v(" Example 1 - Model start/stop")]),t._v(" "),a("p",[t._v("In this example you will learn how to stop and start the currently deployed ARE model.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-start_stop-model.html")]),t._v(" somewhere on your hard drive.")]),t._v(" "),a("li",[t._v("Open the file in a browser.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model stop/start"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("START_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("startModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//stopModel")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STOP_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stopModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model stop/start"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("START_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Description: Changes the state of the deployed model to STARTED "),a("span",{pre:!0,attrs:{class:"token entity",title:" "}},[t._v(" ")]),t._v("Ouput: alert"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Start model "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STOP_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Description: Changes the state of the deployed model to STOPPED "),a("span",{pre:!0,attrs:{class:"token entity",title:" "}},[t._v(" ")]),t._v("Ouput: alert"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Stop model "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h2",{attrs:{id:"example-2-model-upload"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-2-model-upload"}},[t._v("#")]),t._v(" Example 2 - Model upload")]),t._v(" "),a("p",[t._v("This examples shows how a model (XML string) can be uploaded to the ARE.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-upload-model.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model upload"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//uploadModel")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("UPLOAD_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" modelInXML "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UMmodel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uploadModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" modelInXML"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Model upload"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("UPLOAD_MODEL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Description: Deploys the model given as a parameter "),a("span",{pre:!0,attrs:{class:"token entity",title:" "}},[t._v(" ")]),t._v("Ouput: alert"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Upload model "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("modelInXML"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("UMmodel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Open the following "),a("a",{attrs:{href:"https://raw.githubusercontent.com/asterics/AsTeRICS/v3.0/bin/ARE/models/ImageDemo.acs",target:"_blank",rel:"noopener noreferrer"}},[t._v("model file"),a("OutboundLink")],1),t._v(" with a text editor and copy and paste the model xml string into the given field.")]),t._v(" "),a("li",[t._v("Click onto "),a("code",[t._v("Upload Model")])])]),t._v(" "),a("h2",{attrs:{id:"example-3-change-plugin-property-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-3-change-plugin-property-values"}},[t._v("#")]),t._v(" Example 3 - Change plugin property values")]),t._v(" "),a("p",[t._v("This example show how to parametrize a model by overriding default property values of plugins in a model. We use the default autostart model (ARE/models/autostart.acs) of the ARE, which is deployed and started automatically upon startup. The model contains a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/TextDisplay.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("TextDisplay plugin"),a("OutboundLink")],1),t._v(" with id "),a("code",[t._v("TextDisplay.1")]),t._v(" and a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&sensors/CellBoard.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("CellBoard plugin"),a("OutboundLink")],1),t._v(" with id "),a("code",[t._v("CellBoard.1")]),t._v(". With the function "),a("code",[t._v("setRuntimeComponentProperties")]),t._v(" you can provide a JSON string with plugin property key/value pairs.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-change-property-values.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Change property values"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SET_RUNTIME_COMPONENT_PROPERTIES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//The JSON object must be sent as JSON string, the keys and values must be Strings as well.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" propertyMap"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Set the default property of the plugin with id TextDisplay.1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"TextDisplay.1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"default"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Change the cellText1 and cellText2 properties of the plugin with id CellBoard.1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"CellBoard.1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"cellText1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cellText1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"cellText2"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cellText2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRuntimeComponentProperties")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If the ARE could be reached and the method call was successful, the success callback is called.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//The variable data contains an array with key/value pairs of properties which could be set successfully.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//If the length of the array == 0, no property could be set successfully. ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("parse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" errorMsg"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The property settings could not be applied."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorMsg"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n console"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("log")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'The following properties could be set: '")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" propertyMap"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Change property values"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SET_RUNTIME_COMPONENT_PROPERTIES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Apply Settings "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Cell Text 1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("cellText1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Cell Text 2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("cellText2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Change parameter values for title, cellText1 and cellText2 and click onto "),a("code",[t._v("Apply Settings")])]),t._v(" "),a("li",[t._v("Not all plugin properties can be changed live, so to ensure that the changes are active stop and start the model.")])]),t._v(" "),a("h2",{attrs:{id:"example-4-send-data-to-input-port"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-4-send-data-to-input-port"}},[t._v("#")]),t._v(" Example 4 - Send data to input port")]),t._v(" "),a("p",[t._v("In this example you will learn how to send data to an input port of a plugin. We will use the "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mouse plugin"),a("OutboundLink")],1),t._v(" and send absolute coordinates to the input ports (mouseX, mouseY) to change the absolute mouse position.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Open the "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/?areBaseURI=http://localhost:8081",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebACS"),a("OutboundLink")],1),t._v(" and create a model with a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mouse plugin"),a("OutboundLink")],1),t._v(" and an "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&sensors/EditBox.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("EditBox plugin"),a("OutboundLink")],1),t._v(", where the output port is connected to "),a("code",[t._v("mouseX")]),t._v(" and "),a("code",[t._v("mouseIn")]),t._v(" of the Mouse plugin (see pic below). The EditBox plugin is a workaround for the known "),a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/issues/230",target:"_blank",rel:"noopener noreferrer"}},[t._v("issue #230"),a("OutboundLink")],1),t._v(".")])]),t._v(" "),a("p",[a("img",{attrs:{src:"images/Mouse.JPG",alt:"Mouse plugin"}})]),t._v(" "),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Deploy and start the model")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-send-data-to-input-port.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Send Data to Input Ports"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SEND_DATA_TO_INPUT_PORT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Fetch values of input fields and send them to the input ports mouseX and mouseY of the Mouse plugin instance with id Mouse.1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendDataToInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Mouse.1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'mouseX'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x-coordinate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sendDataToInputPort")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Mouse.1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'mouseY'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" document"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"y-coordinate"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Send Data to Input Ports"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SEND_DATA_TO_INPUT_PORT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Apply Settings "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter X coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("x-coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Enter Y coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("y-coordinate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"4"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Enter values for X and Y coordinate of the Mouse and press "),a("code",[t._v("Apply Settings")]),t._v(".")])]),t._v(" "),a("h2",{attrs:{id:"example-5-trigger-event-listener"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-5-trigger-event-listener"}},[t._v("#")]),t._v(" Example 5 - Trigger event listener")]),t._v(" "),a("p",[t._v("In this example you will learn how to trigger an event listener of a plugin. The "),a("a",{attrs:{href:"(http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm)"}},[t._v("Mouse plugin")]),t._v(" has event listener for triggering a mouse click (leftClick, middleClick, rightClick). The example triggers the "),a("code",[t._v("rightClick")]),t._v(" event listener.")]),t._v(" "),a("ol",[a("li",[t._v("Start the ARE (ARE.exe|start.bat|start.sh)")]),t._v(" "),a("li",[t._v("Open the "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/?areBaseURI=http://localhost:8081",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebACS"),a("OutboundLink")],1),t._v(" and create a model with a "),a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/WebACS/help/index.html?plugins&actuators/Mouse.htm",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mouse plugin"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("li",[t._v("Deploy and start the model")]),t._v(" "),a("li",[t._v("Copy and paste the following HTML/Javascript snippet into a text editor, save it as "),a("code",[t._v("restapi-trigger-event-listener.html")]),t._v(" somewhere on your hard drive.")])]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("http-equiv")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Content-Type"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/html; charset=UTF-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Include areCommunicator.js library and it's dependencies, you could also include jquery directly from their page. --\x3e")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/jquery-3.2.1.min.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("src")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("https://cdn.rawgit.com/asterics/AsTeRICS/v3.0/ARE_RestAPIlibraries/clientExample/javascript/JSmap.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}}),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Trigger event listener"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* This is an example of how to use the ARE Javascipt framework for the communication\n with the ARE Restful Services.\n \n The location of the server should be defined with the 'setBaseURI()' method.\n \n A success-callback function and an error-callback function should be passed as an argument\n for every function.\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBaseURI")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://localhost:8081/rest/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRIGGER_EVENT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("triggerEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("defaultSuccessCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" defaultErrorCallback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Mouse.1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'rightClick'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//Callback functions to be called in case of success or error.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultSuccessCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" HTTPstatus")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Success message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("defaultErrorCallback")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("HTTPstatus"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" AREerrorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("alert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Error message: "')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("AREerrorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n ")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("content"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REST client - Trigger event listener"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("button")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token special-attr"}},[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onclick")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token value javascript language-javascript"}},[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("TRIGGER_EVENT")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Generate right click "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("ol",{attrs:{start:"5"}},[a("li",[t._v("Open the file in a browser.")]),t._v(" "),a("li",[t._v("Click on the button "),a("code",[t._v("Generate right click")])])]),t._v(" "),a("h2",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/Documentation/REST_API.pdf",target:"_blank",rel:"noopener noreferrer"}},[t._v("Complete REST API documentation"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/index.html#submenuRest",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST API demo page"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/blob/master/ARE_RestAPIlibraries/clientExample/javascript/areCommunicator.js",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"http://asterics.github.io/AsTeRICS/webapps/startpage/doc/lib-js-api/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Javascript Client Wrapper 2"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/ARE_RestAPIlibraries/JavaLibrary",target:"_blank",rel:"noopener noreferrer"}},[t._v("REST Java Client Wrapper"),a("OutboundLink")],1)])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/314.89b09ecf.js b/assets/js/314.51b100bf.js similarity index 97% rename from assets/js/314.89b09ecf.js rename to assets/js/314.51b100bf.js index 680e9a5e92..f2525c7d7a 100644 --- a/assets/js/314.89b09ecf.js +++ b/assets/js/314.51b100bf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[314],{958:function(t,e,a){"use strict";a.r(e);var s=a(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rest-demos-with-javascript-client-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-demos-with-javascript-client-library"}},[t._v("#")]),t._v(" REST demos with Javascript client library")]),t._v(" "),e("p",[t._v("The ARE provides a REST API with several functionalities. The base REST URI is:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("http://localhost:8081/rest/\n")])])]),e("p",[t._v("In order to get a list of all available rest methods use: "),e("StaticLink",{attrs:{href:"http://localhost:8081/rest/restfunctions",target:"_blank",text:"http://localhost:8081/rest/restfunctions"}})],1),t._v(" "),e("h2",{attrs:{id:"examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),e("p",[t._v("One way to use the REST API ist to use the Javascript library "),e("a",{attrs:{target:"_blank",href:"./javascript/areCommunicator.js"}},[t._v("areCommunicator.js")]),t._v(". Use the following links to navigate to examples using this library:")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/are_repository.html",text:"ARE Repository"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("REST methods to interact with the ARE model repository (list, store, delete).")]),t._v(" "),e("ul",[e("li",[t._v('"/>:\n')])]),t._v(" "),e("p",[t._v("Interact with data channels and event channels of the ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_components.html",text:"ARE Model Components"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Interact with components of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_deployment.html",text:"ARE Model Deployment"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Deploy and upload ARE models.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_state.html",text:"ARE Model State"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Get information and change the state of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/sse.html",text:"Server Sent Events"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Subscribe to server sent events (SSE) of the current ARE model.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[314],{959:function(t,e,a){"use strict";a.r(e);var s=a(2),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"rest-demos-with-javascript-client-library"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rest-demos-with-javascript-client-library"}},[t._v("#")]),t._v(" REST demos with Javascript client library")]),t._v(" "),e("p",[t._v("The ARE provides a REST API with several functionalities. The base REST URI is:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("http://localhost:8081/rest/\n")])])]),e("p",[t._v("In order to get a list of all available rest methods use: "),e("StaticLink",{attrs:{href:"http://localhost:8081/rest/restfunctions",target:"_blank",text:"http://localhost:8081/rest/restfunctions"}})],1),t._v(" "),e("h2",{attrs:{id:"examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),e("p",[t._v("One way to use the REST API ist to use the Javascript library "),e("a",{attrs:{target:"_blank",href:"./javascript/areCommunicator.js"}},[t._v("areCommunicator.js")]),t._v(". Use the following links to navigate to examples using this library:")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/are_repository.html",text:"ARE Repository"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("REST methods to interact with the ARE model repository (list, store, delete).")]),t._v(" "),e("ul",[e("li",[t._v('"/>:\n')])]),t._v(" "),e("p",[t._v("Interact with data channels and event channels of the ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_components.html",text:"ARE Model Components"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Interact with components of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_deployment.html",text:"ARE Model Deployment"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Deploy and upload ARE models.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/runtime_model_state.html",text:"ARE Model State"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Get information and change the state of the current ARE model.")]),t._v(" "),e("ul",[e("li",[e("StaticLink",{attrs:{href:"demos/clientExample/sse.html",text:"Server Sent Events"}}),t._v(":\n")],1)]),t._v(" "),e("p",[t._v("Subscribe to server sent events (SSE) of the current ARE model.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/315.9be4dac4.js b/assets/js/315.2f5dd7bf.js similarity index 98% rename from assets/js/315.9be4dac4.js rename to assets/js/315.2f5dd7bf.js index f95a08fd77..dbc2aff64c 100644 --- a/assets/js/315.9be4dac4.js +++ b/assets/js/315.2f5dd7bf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[315],{959:function(e,t,s){"use strict";s.r(t);var a=s(2),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-webserver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver"}},[e._v("#")]),e._v(" ARE Webserver")]),e._v(" "),t("p",[e._v("The ARE provides a webserver with the document root at")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ARE/web/\n")])])]),t("p",[e._v("If you start the ARE, you can open the start page of the webserver by")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("http://localhost:8081/\n")])])]),t("p",[e._v("or")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("https://localhost:8083/\n")])])]),t("h2",{attrs:{id:"document-root-subpath-definitions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#document-root-subpath-definitions"}},[e._v("#")]),e._v(" Document root subpath definitions")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("/ or /index.html")]),e._v(": Landing page of the webserver. This URL provides some general informations about AsTeRICS and should link to the WebACS, REST demos and model demos. Can be overridden in case of an APE project. ("),t("em",[e._v("readonly")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("rest/")]),e._v(": This is the base path of the "),t("RouterLink",{attrs:{to:"/develop/are-remote-apis/REST-API.html"}},[e._v("REST interface")]),e._v(".\n("),t("em",[e._v("read, write")]),e._v(")")],1),e._v(" "),t("li",[t("strong",[e._v("ws/")]),e._v(": This is the base path of the websocket functionality. "),t("em",[e._v("(read, write)")])]),e._v(" "),t("li",[t("strong",[e._v("data/")]),e._v(": Reserved for providing access to the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/bin/ARE/data/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ARE/data"),t("OutboundLink")],1),e._v(" folder containing model data files, plugin config files, plugin images,… ("),t("em",[e._v("read, write")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("models/")]),e._v(": Reserved for providing access to "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/bin/ARE/models/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ARE/models"),t("OutboundLink")],1),e._v(". ("),t("em",[e._v("read, write")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("modelSettings/")]),e._v(": Reserved for static or dynamically generated settings dialogs of a model targeted for end users (users with disabilities or care takers, personal assistents, occupational therapists,…) ("),t("em",[e._v("readonly")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("componentCollections/")]),e._v(": Reserved for providing various component collections describing the set of plugins available on an ARE installation. ("),t("em",[e._v("readonly")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("webapps")]),e._v("/: Reserved for web applications. Could be used to extend web functionality by (optional) web applications. ("),t("em",[e._v("read, write")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("WebACS/")]),e._v(": Base URL of the webbased AsTeRICS Configuration Suite "),t("a",{attrs:{href:"https://github.com/asterics/WebACS",target:"_blank",rel:"noopener noreferrer"}},[e._v("(WebACS)"),t("OutboundLink")],1),e._v(" including help of WebACS "),t("strong",[e._v("without plugin help files")]),e._v(". ("),t("em",[e._v("read, write")]),e._v(")")])]),e._v(" "),t("h2",{attrs:{id:"physical-folder-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#physical-folder-structure"}},[e._v("#")]),e._v(" Physical folder structure")]),e._v(" "),t("p",[e._v("The virtual paths are represented by the following physical folder structure on the ARE:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ARE\n |-data/\n |-models/\n |-web/\n |index.html\n |-modelSettings/\n |-componentCollections/\n |-WebACS/\n |-webapps/\n")])])]),t("p",[e._v("The subpaths "),t("em",[e._v("rest/")]),e._v(" and "),t("em",[e._v("ws/")]),e._v(" are only virtual paths needed for the REST API and websocket functionalities.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[315],{960:function(e,t,s){"use strict";s.r(t);var a=s(2),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"are-webserver"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-webserver"}},[e._v("#")]),e._v(" ARE Webserver")]),e._v(" "),t("p",[e._v("The ARE provides a webserver with the document root at")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ARE/web/\n")])])]),t("p",[e._v("If you start the ARE, you can open the start page of the webserver by")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("http://localhost:8081/\n")])])]),t("p",[e._v("or")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("https://localhost:8083/\n")])])]),t("h2",{attrs:{id:"document-root-subpath-definitions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#document-root-subpath-definitions"}},[e._v("#")]),e._v(" Document root subpath definitions")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("/ or /index.html")]),e._v(": Landing page of the webserver. This URL provides some general informations about AsTeRICS and should link to the WebACS, REST demos and model demos. Can be overridden in case of an APE project. ("),t("em",[e._v("readonly")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("rest/")]),e._v(": This is the base path of the "),t("RouterLink",{attrs:{to:"/develop/are-remote-apis/REST-API.html"}},[e._v("REST interface")]),e._v(".\n("),t("em",[e._v("read, write")]),e._v(")")],1),e._v(" "),t("li",[t("strong",[e._v("ws/")]),e._v(": This is the base path of the websocket functionality. "),t("em",[e._v("(read, write)")])]),e._v(" "),t("li",[t("strong",[e._v("data/")]),e._v(": Reserved for providing access to the "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/bin/ARE/data/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ARE/data"),t("OutboundLink")],1),e._v(" folder containing model data files, plugin config files, plugin images,… ("),t("em",[e._v("read, write")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("models/")]),e._v(": Reserved for providing access to "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS/tree/master/bin/ARE/models/",target:"_blank",rel:"noopener noreferrer"}},[e._v("ARE/models"),t("OutboundLink")],1),e._v(". ("),t("em",[e._v("read, write")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("modelSettings/")]),e._v(": Reserved for static or dynamically generated settings dialogs of a model targeted for end users (users with disabilities or care takers, personal assistents, occupational therapists,…) ("),t("em",[e._v("readonly")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("componentCollections/")]),e._v(": Reserved for providing various component collections describing the set of plugins available on an ARE installation. ("),t("em",[e._v("readonly")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("webapps")]),e._v("/: Reserved for web applications. Could be used to extend web functionality by (optional) web applications. ("),t("em",[e._v("read, write")]),e._v(")")]),e._v(" "),t("li",[t("strong",[e._v("WebACS/")]),e._v(": Base URL of the webbased AsTeRICS Configuration Suite "),t("a",{attrs:{href:"https://github.com/asterics/WebACS",target:"_blank",rel:"noopener noreferrer"}},[e._v("(WebACS)"),t("OutboundLink")],1),e._v(" including help of WebACS "),t("strong",[e._v("without plugin help files")]),e._v(". ("),t("em",[e._v("read, write")]),e._v(")")])]),e._v(" "),t("h2",{attrs:{id:"physical-folder-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#physical-folder-structure"}},[e._v("#")]),e._v(" Physical folder structure")]),e._v(" "),t("p",[e._v("The virtual paths are represented by the following physical folder structure on the ARE:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ARE\n |-data/\n |-models/\n |-web/\n |index.html\n |-modelSettings/\n |-componentCollections/\n |-WebACS/\n |-webapps/\n")])])]),t("p",[e._v("The subpaths "),t("em",[e._v("rest/")]),e._v(" and "),t("em",[e._v("ws/")]),e._v(" are only virtual paths needed for the REST API and websocket functionalities.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/316.c191dd3d.js b/assets/js/316.f6d92900.js similarity index 99% rename from assets/js/316.c191dd3d.js rename to assets/js/316.f6d92900.js index 1498866221..9b194b1c68 100644 --- a/assets/js/316.c191dd3d.js +++ b/assets/js/316.f6d92900.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[316],{961:function(e,t,r){"use strict";r.r(t);var n=r(2),o=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#structure"}},[e._v("#")]),e._v(" Structure")]),e._v(" "),t("p",[e._v("This chapter is about the general structure of the AsTeRICS Grid project:")]),e._v(" "),t("ol",[t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/01_structure.html#project-structure"}},[e._v("Project structure")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/01_structure.html#sources-structure"}},[e._v("Sources structure")])],1)]),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/develop/asterics-grid/"}},[e._v("Back to Overview")])],1),e._v(" "),t("h2",{attrs:{id:"project-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#project-structure"}},[e._v("#")]),e._v(" Project structure")]),e._v(" "),t("p",[e._v("The AsTeRICS Grid project is hosted on "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub"),t("OutboundLink")],1),e._v(". These are the main folders and files in the project:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("app/")]),e._v(": folder containing static and built resources for the actual AsTeRICS Grid application. Host this folder in addition to "),t("code",[e._v("../index.html")]),e._v(" in the root folder on webserver in order to and open the "),t("code",[e._v("../index.html")]),e._v(" file in order to start AsTeRICS Grid.")]),e._v(" "),t("li",[t("strong",[e._v("docs/")]),e._v(": folder containing various documentation resources, e.g. this manual")]),e._v(" "),t("li",[t("strong",[e._v("scripts/")]),e._v(": folder containing shell scripts, e.g. for releasing a new AsTeRICS Grid release")]),e._v(" "),t("li",[t("strong",[e._v("src/")]),e._v(": folder containing Javascript sources")]),e._v(" "),t("li",[t("strong",[e._v("superlogin/")]),e._v(": folder containing configuration of "),t("a",{attrs:{href:"https://github.com/sen-su/superlogin",target:"_blank",rel:"noopener noreferrer"}},[e._v("superlogin"),t("OutboundLink")],1),e._v(", a tool that handles users and databases for "),t("a",{attrs:{href:"http://couchdb.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("CouchDB"),t("OutboundLink")],1),e._v(", the database backend used by AsTeRICS Grid.")]),e._v(" "),t("li",[t("strong",[e._v(".babelrc")]),e._v(": configuration for "),t("a",{attrs:{href:"https://babeljs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Babel"),t("OutboundLink")],1),e._v(" Javascript compiler, only needed for running "),t("a",{attrs:{href:"https://jestjs.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jest"),t("OutboundLink")],1),e._v(" tests, other Babel configuration is found in "),t("code",[e._v("webpack.config.js")])]),e._v(" "),t("li",[t("strong",[e._v(".gitignore")]),e._v(": file specifying which files to ignore by "),t("a",{attrs:{href:"https://git-scm.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Git"),t("OutboundLink")],1),e._v(" version control")]),e._v(" "),t("li",[t("strong",[e._v("CNAME")]),e._v(": configuration file of GitHub, specifying which alternative domain points to the version that is found on the GitHub "),t("a",{attrs:{href:"https://github.com/asterics/AsTeRICS-Grid/tree/gh-pages",target:"_blank",rel:"noopener noreferrer"}},[e._v("gh-pages branch"),t("OutboundLink")],1),e._v(". Therefore the version found on this branch is the version that is delivered when opening "),t("a",{attrs:{href:"https://grid.asterics.eu/",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://grid.asterics.eu/"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("index.html")]),e._v(": entry point of the application, uses resources from the "),t("code",[e._v("app/")]),e._v(" folder")]),e._v(" "),t("li",[t("strong",[e._v("LICENSE")]),e._v(": file specifying the license of AsTeRICS Grid which is "),t("a",{attrs:{href:"https://www.gnu.org/licenses/agpl-3.0.de.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("AGPL3"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[t("strong",[e._v("README.md")]),e._v(": markdown readme file for the GitHub project page")]),e._v(" "),t("li",[t("strong",[e._v("package.json")]),e._v(": "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" configuration file specifying dependencies and scripts for the AsTeRICS Grid project")]),e._v(" "),t("li",[t("strong",[e._v("package-lock.json")]),e._v(": file generated by "),t("a",{attrs:{href:"https://www.npmjs.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("npm"),t("OutboundLink")],1),e._v(" specifying the exact version of dependencies used in the project")]),e._v(" "),t("li",[t("strong",[e._v("webpack.config.js")]),e._v(": "),t("a",{attrs:{href:"https://webpack.js.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack"),t("OutboundLink")],1),e._v(" configuration file specifying options for building and bundling the application")])]),e._v(" "),t("h2",{attrs:{id:"sources-structure"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sources-structure"}},[e._v("#")]),e._v(" Sources structure")]),e._v(" "),t("p",[e._v("All custom sources are located in the "),t("code",[e._v("src")]),e._v(" folder which has the following structure:")]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("css/")]),e._v(": includes custom stylesheets")]),e._v(" "),t("li",[t("strong",[e._v("js/")]),e._v(": all pure Javascript sources\n"),t("ul",[t("li",[t("strong",[e._v("externals/")]),e._v(": folder including ES6 module wrapppers of libraries that are included externally within a "),t("code",[e._v(" + diff --git a/customize/environmental-control/index.html b/customize/environmental-control/index.html index 7c2be7a73b..39904942fe 100644 --- a/customize/environmental-control/index.html +++ b/customize/environmental-control/index.html @@ -17,8 +17,8 @@ - - + +
      - + diff --git a/customize/gaming-toys-music/index.html b/customize/gaming-toys-music/index.html index 0db83b093f..e47ec76e07 100644 --- a/customize/gaming-toys-music/index.html +++ b/customize/gaming-toys-music/index.html @@ -17,8 +17,8 @@ - - + +
      - + diff --git a/customize/grid/Grid-Creation.html b/customize/grid/Grid-Creation.html index 720a1f18f2..7498ce3e8d 100644 --- a/customize/grid/Grid-Creation.html +++ b/customize/grid/Grid-Creation.html @@ -17,8 +17,8 @@ - - + +
      - + diff --git a/customize/grid/Grid-Customization.html b/customize/grid/Grid-Customization.html index feeb7219ef..1a9c622b1d 100644 --- a/customize/grid/Grid-Customization.html +++ b/customize/grid/Grid-Customization.html @@ -17,8 +17,8 @@ - - + +
      - + diff --git a/customize/grid/index.html b/customize/grid/index.html index 7db1c8bfa8..84b0814012 100644 --- a/customize/grid/index.html +++ b/customize/grid/index.html @@ -17,8 +17,8 @@ - - + +

# Customize Grid

In this section you will find short and simple tutorials about grid creation or the customization of an existing one.

Note

In case you need more detailed information, please check the AsTeRICS Grid user manual.

- + diff --git a/customize/index.html b/customize/index.html index 854e70cdd1..a942a4389f 100644 --- a/customize/index.html +++ b/customize/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/customize/model/Model-Creation.html b/customize/model/Model-Creation.html index b79c313731..1ace90e7eb 100644 --- a/customize/model/Model-Creation.html +++ b/customize/model/Model-Creation.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/customize/model/Model-Customization.html b/customize/model/Model-Customization.html index e1deb11f1b..575ab05148 100644 --- a/customize/model/Model-Customization.html +++ b/customize/model/Model-Customization.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/customize/model/index.html b/customize/model/index.html index 1ddadc3339..15e84f47f2 100644 --- a/customize/model/index.html +++ b/customize/model/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/customize/other/index.html b/customize/other/index.html index 6e83813860..0737032a6c 100644 --- a/customize/other/index.html +++ b/customize/other/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/APE.html b/develop/APE.html index c7a8352a99..a61e2bb9c9 100644 --- a/develop/APE.html +++ b/develop/APE.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/ARE API.html b/develop/ARE API.html index 57239ef455..65a37f8a7f 100644 --- a/develop/ARE API.html +++ b/develop/ARE API.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/ARE-HW-Interfacing-CIM.html b/develop/ARE-HW-Interfacing-CIM.html index b0df776a22..5b578a0632 100644 --- a/develop/ARE-HW-Interfacing-CIM.html +++ b/develop/ARE-HW-Interfacing-CIM.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/ARE-Keyboard-Mouse-Services.html b/develop/ARE-Keyboard-Mouse-Services.html index 3c96a437a3..ad52c01e39 100644 --- a/develop/ARE-Keyboard-Mouse-Services.html +++ b/develop/ARE-Keyboard-Mouse-Services.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/ARE-Webserver.html b/develop/ARE-Webserver.html index 54cabe94e8..04dcad1ddd 100644 --- a/develop/ARE-Webserver.html +++ b/develop/ARE-Webserver.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/ARE.html b/develop/ARE.html index 5474ec1854..242ff4c5df 100644 --- a/develop/ARE.html +++ b/develop/ARE.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/ARE/ARE-Development-Manual.html b/develop/ARE/ARE-Development-Manual.html index 81f297e4b5..8a03869051 100644 --- a/develop/ARE/ARE-Development-Manual.html +++ b/develop/ARE/ARE-Development-Manual.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/ARE/index.html b/develop/ARE/index.html index 8cdce29c48..d3002136df 100644 --- a/develop/ARE/index.html +++ b/develop/ARE/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/AT-solution-demos.html b/develop/AT-solution-demos.html index bebe94950c..6d82cc12e6 100644 --- a/develop/AT-solution-demos.html +++ b/develop/AT-solution-demos.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/AT_solution_development.html b/develop/AT_solution_development.html index c0d662df9a..aba990c873 100644 --- a/develop/AT_solution_development.html +++ b/develop/AT_solution_development.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/Coding-Guidelines.html b/develop/Coding-Guidelines.html index 6ab1e50796..210f04f4a3 100644 --- a/develop/Coding-Guidelines.html +++ b/develop/Coding-Guidelines.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/Development-Environment.html b/develop/Development-Environment.html index 5ce942af7c..d0e0dce4fc 100644 --- a/develop/Development-Environment.html +++ b/develop/Development-Environment.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/Plugin-Advanced.html b/develop/Plugin-Advanced.html index 8295fce4b4..d77d92150a 100644 --- a/develop/Plugin-Advanced.html +++ b/develop/Plugin-Advanced.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/Plugin-Introduction.html b/develop/Plugin-Introduction.html index ff4c0663ca..7a0b45fb07 100644 --- a/develop/Plugin-Introduction.html +++ b/develop/Plugin-Introduction.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/Plugin-Tutorial.html b/develop/Plugin-Tutorial.html index cae3dde424..c5733c31b3 100644 --- a/develop/Plugin-Tutorial.html +++ b/develop/Plugin-Tutorial.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/REST-API-java-client.html b/develop/REST-API-java-client.html index a9b4a790e5..f3d239eb32 100644 --- a/develop/REST-API-java-client.html +++ b/develop/REST-API-java-client.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/REST-API-js-areCommunicator.html b/develop/REST-API-js-areCommunicator.html index f760b9bf57..aa878f6962 100644 --- a/develop/REST-API-js-areCommunicator.html +++ b/develop/REST-API-js-areCommunicator.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/REST-API-js-wrapper-ext.html b/develop/REST-API-js-wrapper-ext.html index a237799329..2bc5e64e21 100644 --- a/develop/REST-API-js-wrapper-ext.html +++ b/develop/REST-API-js-wrapper-ext.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/REST-API.html b/develop/REST-API.html index 6c7e3863c6..9e71b4b78c 100644 --- a/develop/REST-API.html +++ b/develop/REST-API.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/REST-demos.html b/develop/REST-demos.html index 9012e494b0..806c6bfbc0 100644 --- a/develop/REST-demos.html +++ b/develop/REST-demos.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/Unit-Testing.html b/develop/Unit-Testing.html index 9210f765c0..8cede21ca0 100644 --- a/develop/Unit-Testing.html +++ b/develop/Unit-Testing.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/are-remote-apis/REST-API.html b/develop/are-remote-apis/REST-API.html index eecfd891e7..95fa6acb5a 100644 --- a/develop/are-remote-apis/REST-API.html +++ b/develop/are-remote-apis/REST-API.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/are-remote-apis/REST-demos.html b/develop/are-remote-apis/REST-demos.html index dbde62e7fe..a132975e62 100644 --- a/develop/are-remote-apis/REST-demos.html +++ b/develop/are-remote-apis/REST-demos.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/are-remote-apis/Webserver.html b/develop/are-remote-apis/Webserver.html index 9543bb2a55..3970ff9422 100644 --- a/develop/are-remote-apis/Webserver.html +++ b/develop/are-remote-apis/Webserver.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/are-remote-apis/Websocket.html b/develop/are-remote-apis/Websocket.html index 66350d6c7a..3397c6a555 100644 --- a/develop/are-remote-apis/Websocket.html +++ b/develop/are-remote-apis/Websocket.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/are-remote-apis/index.html b/develop/are-remote-apis/index.html index cd870ed71a..d1312ede72 100644 --- a/develop/are-remote-apis/index.html +++ b/develop/are-remote-apis/index.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-grid/01_structure.html b/develop/asterics-grid/01_structure.html index 30be2bf8c2..ba1782cce8 100644 --- a/develop/asterics-grid/01_structure.html +++ b/develop/asterics-grid/01_structure.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/02_tools.html b/develop/asterics-grid/02_tools.html index 38be459ebf..9c4e7f1f22 100644 --- a/develop/asterics-grid/02_tools.html +++ b/develop/asterics-grid/02_tools.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/03_grid.html b/develop/asterics-grid/03_grid.html index 82572558ac..8d103a7130 100644 --- a/develop/asterics-grid/03_grid.html +++ b/develop/asterics-grid/03_grid.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/04_vuejs.html b/develop/asterics-grid/04_vuejs.html index fae7907cf6..15720d42ef 100644 --- a/develop/asterics-grid/04_vuejs.html +++ b/develop/asterics-grid/04_vuejs.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/05_datamodel.html b/develop/asterics-grid/05_datamodel.html index fea3dfd250..d1a94ce395 100644 --- a/develop/asterics-grid/05_datamodel.html +++ b/develop/asterics-grid/05_datamodel.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/06_data_storage.html b/develop/asterics-grid/06_data_storage.html index f9a8f3bd5c..7ec9986b15 100644 --- a/develop/asterics-grid/06_data_storage.html +++ b/develop/asterics-grid/06_data_storage.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/07_i18n.html b/develop/asterics-grid/07_i18n.html index 9b024090bf..fa8bd7f897 100644 --- a/develop/asterics-grid/07_i18n.html +++ b/develop/asterics-grid/07_i18n.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-grid/collaboration.html b/develop/asterics-grid/collaboration.html index 1c6b6aa341..420247a704 100644 --- a/develop/asterics-grid/collaboration.html +++ b/develop/asterics-grid/collaboration.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-grid/index.html b/develop/asterics-grid/index.html index 786953c5c7..fee1e17459 100644 --- a/develop/asterics-grid/index.html +++ b/develop/asterics-grid/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-wiki/api/AsTeRICS Websocket.html b/develop/asterics-wiki/api/AsTeRICS Websocket.html index ec084a0a3e..b0d177be7e 100644 --- a/develop/asterics-wiki/api/AsTeRICS Websocket.html +++ b/develop/asterics-wiki/api/AsTeRICS Websocket.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-wiki/api/REST-API.html b/develop/asterics-wiki/api/REST-API.html index 8843727486..b983cfb774 100644 --- a/develop/asterics-wiki/api/REST-API.html +++ b/develop/asterics-wiki/api/REST-API.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-wiki/api/Resource Handling.html b/develop/asterics-wiki/api/Resource Handling.html index dc155091c1..00bd8f17dc 100644 --- a/develop/asterics-wiki/api/Resource Handling.html +++ b/develop/asterics-wiki/api/Resource Handling.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-wiki/coding_instructions/AsTeRICS Solutions.html b/develop/asterics-wiki/coding_instructions/AsTeRICS Solutions.html index 3c318e0215..f5f284a3c4 100644 --- a/develop/asterics-wiki/coding_instructions/AsTeRICS Solutions.html +++ b/develop/asterics-wiki/coding_instructions/AsTeRICS Solutions.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/asterics-wiki/coding_instructions/AsTeRICS Webserver Document Root.html b/develop/asterics-wiki/coding_instructions/AsTeRICS Webserver Document Root.html index e7edaa8cd9..6f499ab0f3 100644 --- a/develop/asterics-wiki/coding_instructions/AsTeRICS Webserver Document Root.html +++ b/develop/asterics-wiki/coding_instructions/AsTeRICS Webserver Document Root.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-wiki/coding_instructions/JavaCV.html b/develop/asterics-wiki/coding_instructions/JavaCV.html index 500f41c8b7..83baf0a93d 100644 --- a/develop/asterics-wiki/coding_instructions/JavaCV.html +++ b/develop/asterics-wiki/coding_instructions/JavaCV.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-wiki/coding_instructions/Unit Tests.html b/develop/asterics-wiki/coding_instructions/Unit Tests.html index e7cd6ea520..d5f4705088 100644 --- a/develop/asterics-wiki/coding_instructions/Unit Tests.html +++ b/develop/asterics-wiki/coding_instructions/Unit Tests.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/asterics-wiki/components/AsTeRICS Plugins.html b/develop/asterics-wiki/components/AsTeRICS Plugins.html index afa9f5665a..02d1f644de 100644 --- a/develop/asterics-wiki/components/AsTeRICS Plugins.html +++ b/develop/asterics-wiki/components/AsTeRICS Plugins.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/develop/at-solution/APE.html b/develop/at-solution/APE.html index a608b709f2..02e1837d33 100644 --- a/develop/at-solution/APE.html +++ b/develop/at-solution/APE.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/at-solution/AT-solution-tutorial.html b/develop/at-solution/AT-solution-tutorial.html index e5e25b55ec..b777090626 100644 --- a/develop/at-solution/AT-solution-tutorial.html +++ b/develop/at-solution/AT-solution-tutorial.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/at-solution/index.html b/develop/at-solution/index.html index 4392b033cd..3b0807d5cb 100644 --- a/develop/at-solution/index.html +++ b/develop/at-solution/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/get-started/Coding-Guidelines.html b/develop/get-started/Coding-Guidelines.html index f2a8fe56a9..1f0202e54c 100644 --- a/develop/get-started/Coding-Guidelines.html +++ b/develop/get-started/Coding-Guidelines.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/get-started/Development-Environment.html b/develop/get-started/Development-Environment.html index 35284c03ae..2a7696532d 100644 --- a/develop/get-started/Development-Environment.html +++ b/develop/get-started/Development-Environment.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/get-started/index.html b/develop/get-started/index.html index 3a169b9902..596acaeafb 100644 --- a/develop/get-started/index.html +++ b/develop/get-started/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/index.html b/develop/index.html index a6dafa2dda..796a953a94 100644 --- a/develop/index.html +++ b/develop/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/plugin/Computer-Vision.html b/develop/plugin/Computer-Vision.html index cc148b11c9..be1e0a6f0f 100644 --- a/develop/plugin/Computer-Vision.html +++ b/develop/plugin/Computer-Vision.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/plugin/Plugin-Advanced.html b/develop/plugin/Plugin-Advanced.html index d0e27baecd..b53df5f821 100644 --- a/develop/plugin/Plugin-Advanced.html +++ b/develop/plugin/Plugin-Advanced.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/plugin/Plugin-Averager.html b/develop/plugin/Plugin-Averager.html index 80ebdb91af..0eb45d0153 100644 --- a/develop/plugin/Plugin-Averager.html +++ b/develop/plugin/Plugin-Averager.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/plugin/Resource-Handling.html b/develop/plugin/Resource-Handling.html index 6ae858ca02..1424e5cec6 100644 --- a/develop/plugin/Resource-Handling.html +++ b/develop/plugin/Resource-Handling.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/develop/plugin/index.html b/develop/plugin/index.html index 91b713cb04..142d9ba757 100644 --- a/develop/plugin/index.html +++ b/develop/plugin/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-involved/About-us.html b/get-involved/About-us.html index 45ccfcfec2..fed6408583 100644 --- a/get-involved/About-us.html +++ b/get-involved/About-us.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-involved/Contact.html b/get-involved/Contact.html index f44fa1b378..9f815769c9 100644 --- a/get-involved/Contact.html +++ b/get-involved/Contact.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-involved/Contribute.html b/get-involved/Contribute.html index 14f0a00f78..704d9b033a 100644 --- a/get-involved/Contribute.html +++ b/get-involved/Contribute.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-involved/Legal-Notice.html b/get-involved/Legal-Notice.html index 6bc54152b5..633a8c87de 100644 --- a/get-involved/Legal-Notice.html +++ b/get-involved/Legal-Notice.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-involved/index.html b/get-involved/index.html index 7cc2992b6e..52c7c2206a 100644 --- a/get-involved/index.html +++ b/get-involved/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-started/Demos.html b/get-started/Demos.html index b8089741bb..a6bfdecf62 100644 --- a/get-started/Demos.html +++ b/get-started/Demos.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/get-started/Installation.html b/get-started/Installation.html index 7314fc01ec..44b609676b 100644 --- a/get-started/Installation.html +++ b/get-started/Installation.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-started/Overview.html b/get-started/Overview.html index 9bd25d47bc..c01e2f4e01 100644 --- a/get-started/Overview.html +++ b/get-started/Overview.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/get-started/index.html b/get-started/index.html index 2242152c07..6930139d75 100644 --- a/get-started/index.html +++ b/get-started/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/guide/docs.html b/guide/docs.html index e64d1c20af..be2f9f089d 100644 --- a/guide/docs.html +++ b/guide/docs.html @@ -17,8 +17,8 @@ - - + + - + diff --git a/guide/editor.html b/guide/editor.html index 31d583157f..f605b0c414 100644 --- a/guide/editor.html +++ b/guide/editor.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/guide/markdown.html b/guide/markdown.html index 5bd52c15a7..1fcb0ad97a 100644 --- a/guide/markdown.html +++ b/guide/markdown.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/index.html b/index.html index 6d29945cf4..899b91b044 100644 --- a/index.html +++ b/index.html @@ -17,8 +17,8 @@ - - + +
Accessible Music
Generate sounds or play adapted music instruments.

# Why AsTeRICS?

There are many Assistive Technologies available on the market, but in many cases they are too expensive or not suitable for a certain combination of disabilities.

AsTeRICS

  • provides support for many consumer devices which can be used as input devices (e.g. switches, eye-tracker, webcam, …).
  • let’s you combine several input devices depending on your capabilities (e.g. 2 switches + 1 eye-tracker).
  • provides support for many use cases (e.g. computer control, environmental control).
  • has more than 160 plugins.
  • allows easily customizing existing solutions or designing new ones.
  • is Open Source, which means that it is free forever and others can contribute to the framework.

# Partners & Funding

The AsTeRICS project was funded by international and national research grants. AsTeRICS was initiated by KI-I Linz (opens new window) and the UAS Technikum Wien (opens new window). The creation of this web page was funded by the City of Vienna, MA23, in course of the project StudyATHome Internationally (opens new window) (Grant Nr. 22-07). Please read the About Us section for a full list of contributions.

  • MA23, City of Vienna - Logo
  • UAS Technikum Wien - Logo
  • ToRaDes - Project Logo
  • KI-I
  • StudyATHome Internationally - Project Logo

# AsTeRICS Project Web Page

This is a newly created web page to present AsTeRICS technologies and corresponding documentation. If you are looking for the web page of the original AsTeRICS project, please go to https://project.asterics.eu (opens new window).

- + diff --git a/manuals/ACS/Actuators.html b/manuals/ACS/Actuators.html index 39d8108d23..544cff1390 100644 --- a/manuals/ACS/Actuators.html +++ b/manuals/ACS/Actuators.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Channels.html b/manuals/ACS/Channels.html index 30b8b75aff..c1282d91ca 100644 --- a/manuals/ACS/Channels.html +++ b/manuals/ACS/Channels.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Colours_settings.html b/manuals/ACS/Colours_settings.html index 8e33d63bbc..ad8f57622b 100644 --- a/manuals/ACS/Colours_settings.html +++ b/manuals/ACS/Colours_settings.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Component_Collection_Manager.html b/manuals/ACS/Component_Collection_Manager.html index 327bb841aa..e92e9c029b 100644 --- a/manuals/ACS/Component_Collection_Manager.html +++ b/manuals/ACS/Component_Collection_Manager.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Component_Context_Menu.html b/manuals/ACS/Component_Context_Menu.html index 8c1bed0552..33d2aecda7 100644 --- a/manuals/ACS/Component_Context_Menu.html +++ b/manuals/ACS/Component_Context_Menu.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Connected.html b/manuals/ACS/Connected.html index b4e58a6df1..71fe3f847e 100644 --- a/manuals/ACS/Connected.html +++ b/manuals/ACS/Connected.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Control_the_ARE.html b/manuals/ACS/Control_the_ARE.html index 48d3f9ab69..ad5a570933 100644 --- a/manuals/ACS/Control_the_ARE.html +++ b/manuals/ACS/Control_the_ARE.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Create_and_Edit_a_Model.html b/manuals/ACS/Create_and_Edit_a_Model.html index cb3286bb77..2636dc2107 100644 --- a/manuals/ACS/Create_and_Edit_a_Model.html +++ b/manuals/ACS/Create_and_Edit_a_Model.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Dialogs_settings.html b/manuals/ACS/Dialogs_settings.html index bd51cd8ca0..79d9ca3368 100644 --- a/manuals/ACS/Dialogs_settings.html +++ b/manuals/ACS/Dialogs_settings.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Disconnected.html b/manuals/ACS/Disconnected.html index 1d51d814ca..d81e477a57 100644 --- a/manuals/ACS/Disconnected.html +++ b/manuals/ACS/Disconnected.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Events.html b/manuals/ACS/Events.html index c82d9a313b..ee2f517520 100644 --- a/manuals/ACS/Events.html +++ b/manuals/ACS/Events.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/External_Tools.html b/manuals/ACS/External_Tools.html index 486e58b457..2c0c8e1bd3 100644 --- a/manuals/ACS/External_Tools.html +++ b/manuals/ACS/External_Tools.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/External_Tools_Options.html b/manuals/ACS/External_Tools_Options.html index ec50d35266..4391787d11 100644 --- a/manuals/ACS/External_Tools_Options.html +++ b/manuals/ACS/External_Tools_Options.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/GUI_Designer.html b/manuals/ACS/GUI_Designer.html index d773c34a20..2b7ab80a53 100644 --- a/manuals/ACS/GUI_Designer.html +++ b/manuals/ACS/GUI_Designer.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/General_settings.html b/manuals/ACS/General_settings.html index 993cf3f69b..ef63146ced 100644 --- a/manuals/ACS/General_settings.html +++ b/manuals/ACS/General_settings.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Keyboard_control.html b/manuals/ACS/Keyboard_control.html index c1ac11af3b..4c707400f0 100644 --- a/manuals/ACS/Keyboard_control.html +++ b/manuals/ACS/Keyboard_control.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Load_and_Save_Models.html b/manuals/ACS/Load_and_Save_Models.html index 5ba4ec2841..fe0ec67f9d 100644 --- a/manuals/ACS/Load_and_Save_Models.html +++ b/manuals/ACS/Load_and_Save_Models.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Miscellaneous.html b/manuals/ACS/Miscellaneous.html index 395941d3e2..9aaa4ae837 100644 --- a/manuals/ACS/Miscellaneous.html +++ b/manuals/ACS/Miscellaneous.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Modes.html b/manuals/ACS/Modes.html index cfb5809520..b8eac5eccb 100644 --- a/manuals/ACS/Modes.html +++ b/manuals/ACS/Modes.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Options.html b/manuals/ACS/Options.html index 49864137db..96c75e57f3 100644 --- a/manuals/ACS/Options.html +++ b/manuals/ACS/Options.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Pause.html b/manuals/ACS/Pause.html index 4b9d5cdde8..20aff4bd55 100644 --- a/manuals/ACS/Pause.html +++ b/manuals/ACS/Pause.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Print.html b/manuals/ACS/Print.html index 4f1acaa08e..bfd15928ce 100644 --- a/manuals/ACS/Print.html +++ b/manuals/ACS/Print.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Processors.html b/manuals/ACS/Processors.html index 9ae54698cb..c13d3d58a0 100644 --- a/manuals/ACS/Processors.html +++ b/manuals/ACS/Processors.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Running.html b/manuals/ACS/Running.html index f3e599d30d..9c65ed7408 100644 --- a/manuals/ACS/Running.html +++ b/manuals/ACS/Running.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Sensors.html b/manuals/ACS/Sensors.html index fea333036c..fb96f0820b 100644 --- a/manuals/ACS/Sensors.html +++ b/manuals/ACS/Sensors.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Setting_the_Properties.html b/manuals/ACS/Setting_the_Properties.html index 4c6e209824..e7622034ee 100644 --- a/manuals/ACS/Setting_the_Properties.html +++ b/manuals/ACS/Setting_the_Properties.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Status_Reporting_and_Error_Logging.html b/manuals/ACS/Status_Reporting_and_Error_Logging.html index 1a628b0477..87d6da46d6 100644 --- a/manuals/ACS/Status_Reporting_and_Error_Logging.html +++ b/manuals/ACS/Status_Reporting_and_Error_Logging.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Synchronized.html b/manuals/ACS/Synchronized.html index 5606721aad..922b810e7d 100644 --- a/manuals/ACS/Synchronized.html +++ b/manuals/ACS/Synchronized.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/The_Edit_Tab.html b/manuals/ACS/The_Edit_Tab.html index 34c5c57b4f..f2493880f6 100644 --- a/manuals/ACS/The_Edit_Tab.html +++ b/manuals/ACS/The_Edit_Tab.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/Tooltips.html b/manuals/ACS/Tooltips.html index 3dc68cd8e1..4a7ef3730d 100644 --- a/manuals/ACS/Tooltips.html +++ b/manuals/ACS/Tooltips.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ACS/index.html b/manuals/ACS/index.html index 814b76e576..dddb5b199e 100644 --- a/manuals/ACS/index.html +++ b/manuals/ACS/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/ARE/index.html b/manuals/ARE/index.html index 8fbc9cbc13..d06b27114f 100644 --- a/manuals/ARE/index.html +++ b/manuals/ARE/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/AREStatus.html b/manuals/WebACS/AREStatus.html index 63d9e1515d..92b11f655d 100644 --- a/manuals/WebACS/AREStatus.html +++ b/manuals/WebACS/AREStatus.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Channels.html b/manuals/WebACS/Channels.html index 05c26e2ac0..7c10a15633 100644 --- a/manuals/WebACS/Channels.html +++ b/manuals/WebACS/Channels.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Control_the_ARE.html b/manuals/WebACS/Control_the_ARE.html index a98a967ceb..3a27956f26 100644 --- a/manuals/WebACS/Control_the_ARE.html +++ b/manuals/WebACS/Control_the_ARE.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Create_and_Edit_a_Model.html b/manuals/WebACS/Create_and_Edit_a_Model.html index 5b25050dfb..55de92ea77 100644 --- a/manuals/WebACS/Create_and_Edit_a_Model.html +++ b/manuals/WebACS/Create_and_Edit_a_Model.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Events.html b/manuals/WebACS/Events.html index 5d1b3208d0..0af36d4088 100644 --- a/manuals/WebACS/Events.html +++ b/manuals/WebACS/Events.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/GUI_Designer.html b/manuals/WebACS/GUI_Designer.html index f080cecf5d..2a03600535 100644 --- a/manuals/WebACS/GUI_Designer.html +++ b/manuals/WebACS/GUI_Designer.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Keyboard_control.html b/manuals/WebACS/Keyboard_control.html index a7e88fd6ef..41004c6db3 100644 --- a/manuals/WebACS/Keyboard_control.html +++ b/manuals/WebACS/Keyboard_control.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/List_View.html b/manuals/WebACS/List_View.html index 8eaa09eabb..974d1e0b31 100644 --- a/manuals/WebACS/List_View.html +++ b/manuals/WebACS/List_View.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Miscellaneous.html b/manuals/WebACS/Miscellaneous.html index 0688d2c35c..45407e9b34 100644 --- a/manuals/WebACS/Miscellaneous.html +++ b/manuals/WebACS/Miscellaneous.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Open_and_Save_Models.html b/manuals/WebACS/Open_and_Save_Models.html index a126164a83..983bd47c51 100644 --- a/manuals/WebACS/Open_and_Save_Models.html +++ b/manuals/WebACS/Open_and_Save_Models.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/Setting_the_Properties.html b/manuals/WebACS/Setting_the_Properties.html index 75da9d2bf5..88aa4a2b23 100644 --- a/manuals/WebACS/Setting_the_Properties.html +++ b/manuals/WebACS/Setting_the_Properties.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/The_Edit_Tab.html b/manuals/WebACS/The_Edit_Tab.html index e3cc0e915a..49fae38f79 100644 --- a/manuals/WebACS/The_Edit_Tab.html +++ b/manuals/WebACS/The_Edit_Tab.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/WebACS/index.html b/manuals/WebACS/index.html index cc44fbded4..71aa49e1ba 100644 --- a/manuals/WebACS/index.html +++ b/manuals/WebACS/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/010_settings.html b/manuals/asterics-grid/010_settings.html index 3c7aeed0c0..33aa823cf6 100644 --- a/manuals/asterics-grid/010_settings.html +++ b/manuals/asterics-grid/010_settings.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/01_terms.html b/manuals/asterics-grid/01_terms.html index 6218ddc974..e7fea721e9 100644 --- a/manuals/asterics-grid/01_terms.html +++ b/manuals/asterics-grid/01_terms.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/02_navigation.html b/manuals/asterics-grid/02_navigation.html index 05f3ec4924..a729ba8e12 100644 --- a/manuals/asterics-grid/02_navigation.html +++ b/manuals/asterics-grid/02_navigation.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/03_appearance_layout.html b/manuals/asterics-grid/03_appearance_layout.html index 524acb4710..ca88a9d83b 100644 --- a/manuals/asterics-grid/03_appearance_layout.html +++ b/manuals/asterics-grid/03_appearance_layout.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/04_input_options.html b/manuals/asterics-grid/04_input_options.html index 98ea9aa79d..b191795a10 100644 --- a/manuals/asterics-grid/04_input_options.html +++ b/manuals/asterics-grid/04_input_options.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/05_actions.html b/manuals/asterics-grid/05_actions.html index 30fbc13a96..98b5bd3ee2 100644 --- a/manuals/asterics-grid/05_actions.html +++ b/manuals/asterics-grid/05_actions.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/06_users.html b/manuals/asterics-grid/06_users.html index 7b62b00509..f53153ef77 100644 --- a/manuals/asterics-grid/06_users.html +++ b/manuals/asterics-grid/06_users.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/07_dictionaries.html b/manuals/asterics-grid/07_dictionaries.html index 4e4e9aa37d..402fb8ccf3 100644 --- a/manuals/asterics-grid/07_dictionaries.html +++ b/manuals/asterics-grid/07_dictionaries.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/08_keyboard_shortcuts.html b/manuals/asterics-grid/08_keyboard_shortcuts.html index 7b49b7460e..4e0371e701 100644 --- a/manuals/asterics-grid/08_keyboard_shortcuts.html +++ b/manuals/asterics-grid/08_keyboard_shortcuts.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/09_translation.html b/manuals/asterics-grid/09_translation.html index 252972740b..d1bde72d99 100644 --- a/manuals/asterics-grid/09_translation.html +++ b/manuals/asterics-grid/09_translation.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/10_faq.html b/manuals/asterics-grid/10_faq.html index 5d692d3912..14f38afd1f 100644 --- a/manuals/asterics-grid/10_faq.html +++ b/manuals/asterics-grid/10_faq.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/10_word_forms.html b/manuals/asterics-grid/10_word_forms.html index f2fa9fc210..9ba50cd59e 100644 --- a/manuals/asterics-grid/10_word_forms.html +++ b/manuals/asterics-grid/10_word_forms.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/513_http-action-tutorials.html b/manuals/asterics-grid/513_http-action-tutorials.html index 409724d0e1..bb82393434 100644 --- a/manuals/asterics-grid/513_http-action-tutorials.html +++ b/manuals/asterics-grid/513_http-action-tutorials.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/514_uart-action-tutorials.html b/manuals/asterics-grid/514_uart-action-tutorials.html index 5624cd5db2..148fd158e1 100644 --- a/manuals/asterics-grid/514_uart-action-tutorials.html +++ b/manuals/asterics-grid/514_uart-action-tutorials.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/asterics-grid/index.html b/manuals/asterics-grid/index.html index a2562994b8..03286048f6 100644 --- a/manuals/asterics-grid/index.html +++ b/manuals/asterics-grid/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/fabi/index.html b/manuals/fabi/index.html index cc241aad5a..9795cb088e 100644 --- a/manuals/fabi/index.html +++ b/manuals/fabi/index.html @@ -17,8 +17,8 @@ - - + +
- + diff --git a/manuals/flipmouse/index.html b/manuals/flipmouse/index.html index 78b4c6ea41..6f500e015f 100644 --- a/manuals/flipmouse/index.html +++ b/manuals/flipmouse/index.html @@ -17,8 +17,8 @@ - - + +