Serial-Studio/doc/architecture/architecture.svg

3 lines
51 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1911px" height="799px" viewBox="-0.5 -0.5 1911 799" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2021-09-04T05:15:25.899Z&quot; agent=&quot;5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15&quot; etag=&quot;_eQFNWouAKuycveK2qfA&quot; version=&quot;15.0.6&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;tiPRVdgSWE0wsroL0zit&quot; name=&quot;Page-1&quot;&gt;7V1Zc9u2Fv41mnEerOGm7dFxrNRtnKa1m+TelwxEQhJvKULhYtn+9fdgI0ESlCmLkugkzdQWYRAEcbbvLIB69uXq4X2E1ssb4uGgZxneQ89+17Msa2Q48Iu2PIoW2x7ylkXke7zNzBtu/ScsGg3RmvoejgsdE0KCxF8XG10ShthNCm0oisim2G1OguJT12iBKw23LgqqrV98L1ny1vHAyNt/w/5iKZ9sGuIvKyQ7i4Z4iTyyUZrsq559GRGS8E+rh0sc0NWT68Lvm9b8NZtYhMOkyQ3fp39Mvzx++8O6/vphZj7NFunH23O5zHHyKN8Ye7AA4pJEyZIsSIiCq7z1bUTS0MN0WAOu8j4fCFlDowmN/8NJ8iioidKEQNMyWQXir/jBT74qn/9Dh+oPxNW7BzEyu3iUF2ESPX5VL5S76GV+G7sq3PcJR/4KJzgSjdW1E8sZkzRy8ZYFswUPomiBky39JrwfXUzlAYIy7zGB2USP0CHCAUr8+yK3IcG0i6xfTlf4IEi7A5nFrO9RkIonXcM4f0LTDQqBhaMKF+Q0pkTaLP0E364RW5oNiHqRnrXLeY+jBD9sXQD5VykmUlFIztzkUmcORdtSkTjZts+akSs0W1jpl8/O09Ngs3r6jMl/z8evRjLgoszgubT0rYEqMOYz4hIDZycXVHFCgxugOPZd2Tz1gyLFS9z9MokaNZQo+5QCNKoI0C2sOKL3rYHM1MLhex/es8wzcRKRfzPTYRWpDSZhTfutHhbUfPbnAdm4S1jpvudHYM2+eShBNeLXgsyd20WZs4camRscSOb05sj6MYRuNxP1ctmZNJQd0+yUOTIHpyRzTlpOnvH4BZT2pI4MSYh5i1CP9O8eipeZ8TwCee1OkXdSUZY9a4hWVGuFs5grL2MaoRWoSyPwY1Cf0+8pTlvTnqsUHIRzj7jpiq25VoGiwF+EcBngedKOPs305zYMYx1Vn066I2jmdinLAUsBr+Taci+8oghs3imX2f3EVGrX5+XU6ZScWs6rsbYvtKwF7hCaWmUNozOsYXVLhct5Kzr899s/P0LLexziCCXk9C7joIm6PZTLuNUOK6t24XnQcAfoAfgOTCBV/8IW8p80KCVMYZiuZhpXfE38EKDH1T0sVZzbPh5MKqANo2QgmfW8JAGJcvafA1vLpp5lDwz6D9oDNMPBJxL7iU+oWXRxyPDOW0oQ3wUBL3WYkSQhK6XDhTCoCVUEb0maBH4IT5dxOUOxudngZRtO5nPwovouCV28TuK+GxD333bYxTGs/qDo74yyFoVl7EGVY2Rb+xwzPKmB3kkFHwXyShP52jCvedJw0S5Ia6cIz2FJOOoWCZ2K9r68/QwN1yse45lePYhgzw3x0qDqrpzaAmoDOEe1gLbO9zu+XBSU0Y4gUKvdFPdktFM8dQ8xahoYtVrPNYhbP1HgkXPbqBSiH5hOv2QX+VzFfSVWyiayh4RWw7BXDwAkQhaI5cIKRKsK5k8IoWIc0YB03McPLg6+yct2FM/QLLKCM6kqHp3ecSYH0jtSzZxY75zc37QahyK6FRG2av3NG0SdprlOql+aWxFxQavGRsecuiJz1oaZnhSlRWeljWNaaWvUHbCa4dOdwoI7pTFPIohNCwWsQbcE8dX4Ma1EjLvNGsNOsYb9w9cKvSLW6FZ9kVUNfP518wEa3tECBsv4FJF73+tAmdGkczFj26wsSuel6rUp3MErlapBjVSxYtsui9Xp41Ancf/alKruI9zhK5WqYY1UgSNJX6TDYtWB+O4PXzKgrRfvQpWJFKPnC2W7lRmzT5vibCHY8BzAeZ5lXph1aCmn2phzrNaDguxWeEf0qHRg0fhYGbmUaDDtms0A06Y3nJf3wpRuGDpb+8MHPudWsxfOuGJ4bnGA3QRITItAyAp+/RNTu2Nc0+D+nJoWCx5mBAR5rNeMrmO1EsdY6ROSlJAs6VAUjkoOoZx/WPmex+UQx/4TmrHxKEcK0sHgg7e9wTtomZMwUZIhY4P+07LrVu1QMYrZli7x9J66a0pbzW70zZExLtBVjLRn4ktun5HMYpZGIPN5jA+S8JKSW8EqVTY5MVQxLeOEnrV2A89pfYCdDI+mxLyg++uEbHdcorUzWq3/wv1x+27TqdPw45LGHpXYpib1vLPtGVgD7YMOahrsavxMUzLfZpOSN18H6cIP44qwvK7ie9NxGiig0VEV0GkC5m06PrtroZeHIuizPqGE8iVrsQynV67AqCKMVrSW0zjuflJXyqmqiXc4diN/huOeqCM+i9/QjyRaoYR/rhYcL4EOdB89/PD8eB0wDYmRu5Rj9+GegArmDFDGcMFFlLd4/r1sulviHI2ulDw9hW4JYjrF8EOP1Z1Yxhnc9z0lfLCByZEtfLKyT7bag7b1+336BqBB6Nz4BGDllDlopgX0h3vSmAFm9pIRXgOQxUzPo5C+a4BX/FLMlPX16Z8S9lIRdjGQ02v8ULb2cY7j+TBuGkX8OXx7aL9uvJKaAJ2X6CG7UJh7AHaqMUSJwzahbkElW6OqBradY4arnCp+bupyrdjG+MznqqsEfQ2OVx3hdnaxTHNg9A3DARw/toemLMeT9YDWpD+ZjMeWDZ8cU1ZEt25WT7qnrcWN+bsVkh50Y74evjS0icfamL9tkoqAf8TJhkT/9k61JV8jZpXVrw9ilLbkO7YGxB5qS752gSWKLromzIil0n59JAn86UIxbmlu2gwSBo/sF7WIHi8IEMwHGojZYy3cOKT7M1MgAmKwAP5fALcyCAAS2z+lTX626lg2bTUBrTLiwNAw4ljDiPbBGLFaIlrAYQqtJIikJDsXVALuNBihFIjJWe0DSjDdg278Pr1mw0Spm6QMRPoU0QngyJAkg3VlbnoWIr54av/QCcl0JIDhveFjG8Cje8w6Krv+RnVbnzk5KrPqAjrHRy1NPPOCi3+YSKF+iaw9cYM+gDc2iqjUcko0bilQWHnOYHvK6Zn+e8cV9Wt8moNWXnr4VOvbtlpn18Y7+U+Fh+U0FcXDjMjfeA6afSnQDfV3zxza77enNxUW+Ql3S9VsON/PKpW2fVhjTTjkQJvN9bxR3eAqAQU1ziweIOmUIxFpqau4yV/5VEOKWBdjs7yXPNQgAnSl3guSxm6hqLsM+vlAMZknGx7E8wiLqYWETg4YGD/h+sgkrAl/jdog3T5vu1ky34C6ln64YFRMqDgtgXB8ct9THLqPwsfpPzOr7gQAm+K3A+C0LBioSESGyVSRGBwMp1VrMvZhEnlvvKZuLW9TMm35DVnOTREMVsiB1usA6EpVXpy5x0wdI1cjMQo7qc8UvJmdUXibpJ5P5W7GLRHyGA9PNxEoV8bN3C8vD09C4RqDVmQD3V1+6mVHHp6N4L83W3IFecsXLj1IswiFNaATYiKfe1uFZ15Wh66+JOh4Rnlw3LxeNaJf867KE2vD9g1eUT+CmA1zJynrLtmqt/k2Wp9U/3bcQrKbMz6cqoy37X23LQBlrjRmR9lkQThKN5DaaS+P8sDTsmHeYhfxWzbsB2Kq8pmXgTXFAVnjKOMUxjf8Df1Ifa8sqUObi+OuIzzHQCav+oB1RAAerFZcNgIULlK0YHyJGBGu313FPE0gTBPh0Sx4zqpm7flL/pVsWduKqfgpjEI1ca/BSZYu1HQ4912WE3bpGIsDZ9/r8+zVvLzVsms1OUgkwCkVhToNIwGtOd/aczDbxRY8Z69YAwm7WeQSND0TTU+qSWp/eb6+olJlvU6GEdYBcrn+42Zjt+x9nvcvP0nJshdqBgRmEQmCwis1yahvM813S7YcoNVhRrFcHfyA3TTJM//0sZ4/B5sgAr5LCpS4dq+OifVL32g+JaMnCxbkatPHCvOyETkSbmbACkVgILHGCeIOVYVU4BSv00JgWdZrSILHbOkZN7uEs07YAE6w55DIByvL4AqJPB5ViDFnvzjlM7HtQTOIeB0qwzBuBffSXyBh132xImLdC3xOWVVnxgEB+B7ulXGnWAF5Au11yKtlaJSh4KgqiYCz36fXutcQnKV2zWpf8oRY3v8cOhTKZnK503X9+yuXCLhhSuM2+l7T0vmBxlkKKm3ofEto8cx5Rk2ZkGPc7qKYL6zCN/RxU/64CsH9fLmFm44ybmFO8HnZBeZ91gHehidLjsvPDYWs0n4vR7PfK9vqUEBCB0v/ag5maduIiX0MmKN1RRYNylB+hDMdbHgR2ig2qcxUyHVxgCPCCy5EGc9aKI4ZEk0LlDIsf8lV3hrFUrUkbjHH9osz63Yi6uoStBj9cBDdPgUi3/OgktFO+8raq/rfvhuxFRAvPaSGJ0+dKj8ip6nos5u/7u56bZ7p2GqM9JhbfvUrVp812K+4oRrqyoqBZIAwnQU+TVopqExCItRTfBpBwhnVh1GPh1IPV5WRt8TpjJdfF6bIpxXm80rIGoRPV4mdl1/7IdiiQiz2aFUmZ9L1wA/ITVixVgHi6Sq8UQ4EK/SiJCh4gqCZQhe/6de9RGMT+oOXr6gwT7dT5WBpEM1JI22jvKq0LxTcR4WYl1gXowGVaLcCEOvdMbkLgckgWBWmE1jJn88KuPOACEkYt5bTLme4v4DhjSt6dqY2Tn9zcffh4m2GG98IpWOQNeabCWpTMGgB3uEvj6iZaJSPThwMNQe268zh4USlenxI26LCAwTyG/pW8hv6aPzqnn0bprAuaAaUAI3NnSUwI4LPkw2mqajnU0s8maHmg3hQjTrshpAlFAT0SzRzTq4MK0fjiRie9RHcz/YCroNK4S8vq0SrAMdx8PhLGBrW5JrlihJTIw3mUaXhhz8u8nU5YV37MkX9LDv0rVTPbMyXTGMWWEYpazwZ12jOhjkuC1mtZO12LbstHzNR2p7f/OCAxjdYAhwftFDXqp5sfwlQlHQgIFH+Zl7NUe9HPtfj8CHpO1kowymQ7fIU+6opfFHjECI4rfjyW9Oe/1xTfCWORuVOCnNOxAB5RjKkT6PrcXZxe3l9/YbPRBP4Zs9nt8z8ENE1ni7Bmfew6/MB6G2NsnB0M6yu8KzokGnKm1jWmNYosVBCeVg2f+kjyTnK5bv36c/frr72lK3adS7eL2TYBBmOGgLDye5CCpf5l9Zz/UcrqW+Aw2iP/wM=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><path d="M 470 318 L 543.63 318" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 548.88 318 L 541.88 321.5 L 543.63 318 L 541.88 314.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="310" y="288" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 318px; margin-left: 311px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">I/O Manager</div></div></div></foreignObject><text x="390" y="322" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">I/O Manager</text></switch></g><path d="M 316.37 468 L 350 468 L 350 354.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.12 468 L 318.12 464.5 L 316.37 468 L 318.12 471.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 350 349.12 L 353.5 356.12 L 350 354.37 L 346.5 356.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 173.78 438 L 296.22 438 C 301.15 438 305.69 443.72 308.15 453 C 310.62 462.28 310.62 473.72 308.15 483 C 305.69 492.28 301.15 498 296.22 498 L 173.78 498 C 168.85 498 164.31 492.28 161.85 483 C 159.38 473.72 159.38 462.28 161.85 453 C 164.31 443.72 168.85 438 173.78 438 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 296.22 438 C 291.3 438 286.76 443.72 284.29 453 C 281.83 462.28 281.83 473.72 284.29 483 C 286.76 492.28 291.3 498 296.22 498" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 468px; margin-left: 161px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Serial port device</div></div></div></foreignObject><text x="235" y="472" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Serial port device</text></switch></g><path d="M 670 318 L 743.63 318" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 748.88 318 L 741.88 321.5 L 743.63 318 L 741.88 314.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 610 340.8 L 610 450.5" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 563.64 292.98 C 563.64 291.66 564.35 290.39 565.63 289.46 C 566.91 288.52 568.65 288 570.45 288 L 663.18 288 C 664.99 288 666.72 288.52 668 289.46 C 669.28 290.39 670 291.66 670 292.98 L 670 332.79 C 653 327.54 633.81 327.54 616.82 332.79 C 599.82 338.05 580.63 338.05 563.64 332.79 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 556.82 297.95 C 556.82 295.2 559.87 292.98 563.64 292.98 L 656.36 292.98 C 660.13 292.98 663.18 295.2 663.18 297.95 L 663.18 337.77 C 646.19 332.51 627 332.51 610 337.77 C 593 343.02 573.81 343.02 556.82 337.77 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 550 302.93 C 550 301.61 550.72 300.34 552 299.41 C 553.28 298.48 555.01 297.95 556.82 297.95 L 649.55 297.95 C 651.35 297.95 653.09 298.48 654.37 299.41 C 655.65 300.34 656.36 301.61 656.36 302.93 L 656.36 342.74 C 639.37 337.49 620.18 337.49 603.18 342.74 C 586.19 348 567 348 550 342.74 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 118px; height: 1px; padding-top: 318px; margin-left: 552px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">  Frame list/queue</div></div></div></foreignObject><text x="552" y="322" fill="#000000" font-family="Helvetica" font-size="12px">  Frame list/queue</text></switch></g><path d="M 830 354.37 L 830 431.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 830 349.12 L 833.5 356.12 L 830 354.37 L 826.5 356.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 830 436.88 L 826.5 429.88 L 830 431.63 L 833.5 429.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 910 318 L 1143.63 318" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1148.88 318 L 1141.88 321.5 L 1143.63 318 L 1141.88 314.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="750" y="288" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 318px; margin-left: 751px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">JSON Generator</div></div></div></foreignObject><text x="830" y="322" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">JSON Generator</text></switch></g><rect x="592.5" y="450.5" width="35" height="35" fill="none" stroke="none" pointer-events="all"/><path d="M 617.91 474.08 C 618.24 474.37 618.3 474.9 617.96 475.29 C 617.68 475.57 617.22 475.71 616.81 475.44 L 609.17 469.56 C 609 469.39 608.85 469.21 608.85 468.84 L 608.85 456.03 C 608.85 455.51 609.32 455.17 609.73 455.17 C 610.28 455.17 610.6 455.67 610.6 456.03 L 610.6 468.47 Z M 610.09 482.61 C 618.71 482.61 624.59 475.34 624.59 468.02 C 624.59 459.12 617.26 453.42 610.04 453.42 C 600.46 453.42 595.43 461.71 595.43 467.61 C 595.43 477.56 603.33 482.61 610.09 482.61 Z M 609.91 485.5 C 601.28 485.5 592.71 478.9 592.5 467.79 C 592.5 459.29 599.66 450.5 609.93 450.5 C 618.97 450.5 627.5 457.49 627.5 468.1 C 627.5 477.49 619.91 485.5 609.91 485.5 Z" fill="#505050" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 493px; margin-left: 610px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Add Timestamp &amp; frame number</div></div></div></foreignObject><text x="610" y="505" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Add Ti...</text></switch></g><path d="M 750 468 L 627.5 468" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 830 504.37 L 830 561.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 830 499.12 L 833.5 506.12 L 830 504.37 L 826.5 506.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 830 566.88 L 826.5 559.88 L 830 561.63 L 833.5 559.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="750" y="438" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 468px; margin-left: 751px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CSV Import/Export Module</div></div></div></foreignObject><text x="830" y="472" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">CSV Import/Export Module</text></switch></g><path d="M 860 592.57 L 1510 592.57 L 1510 348" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="800" y="568" width="60" height="49" fill="none" stroke="none" pointer-events="all"/><path d="M 847.95 594.22 C 848.69 594.53 849.12 595.15 849.02 595.89 L 847.91 600.41 C 847.64 601.02 847.2 601.38 846.45 601.31 L 841.11 600.1 C 840.07 602.11 838.68 603.97 837.06 605.66 L 839.82 610.21 C 840.26 610.94 839.96 611.66 839.53 611.98 L 835.05 614.76 C 834.42 614.98 833.83 615.02 833.42 614.26 L 830.58 609.59 C 828.83 610.41 826.56 610.9 824.12 610.68 L 822.9 615.92 C 822.67 616.49 822.37 617 821.44 616.93 L 816.43 615.73 C 815.69 615.37 815.3 614.84 815.59 613.97 L 817.1 609.18 C 814.89 608.01 812.99 606.69 811.43 605.23 L 806.95 607.95 C 806.24 608.36 805.6 608.27 805.04 607.64 L 802.4 603.38 C 802.1 602.81 802.14 602.07 802.8 601.61 L 807.41 598.66 C 806.86 596.55 806.5 594.4 806.35 592.22 L 806.35 592.22 L 801.16 591 C 800.39 590.72 800 590.21 800.15 589.35 L 801.29 584.64 C 801.59 583.92 802.05 583.45 802.94 583.64 L 807.85 585.19 C 809.03 583.25 810.34 581.3 811.86 579.53 L 809.09 574.99 C 808.84 574.44 808.69 573.89 809.45 573.2 L 813.7 570.55 C 814.53 570.14 815.08 570.44 815.46 570.9 L 818.31 575.55 C 820.3 574.81 822.3 574.29 824.8 574.61 L 826.04 569.23 C 826.38 568.46 826.93 568.18 827.66 568.32 L 832.28 569.4 L 832.28 582.9 C 829.58 580.76 826.05 579.74 822.69 580.28 C 816.62 581.26 810.97 586.85 812.21 594.48 C 813.43 602.1 820.49 605.81 826.62 604.82 C 832.75 603.83 837.14 598.24 836.99 592.24 Z" fill="#505050" stroke="none" pointer-events="all"/><path d="M 852.5 575.48 L 852.5 573.24 L 856.99 573.24 L 856.99 575.48 Z M 852.5 578.47 L 852.5 576.23 L 856.99 576.23 L 856.99 578.47 Z M 852.5 581.46 L 852.5 579.21 L 856.99 579.21 L 856.99 581.46 Z M 852.5 584.44 L 852.5 582.2 L 856.99 582.2 L 856.99 584.44 Z M 852.5 587.42 L 852.5 585.19 L 856.99 585.19 L 856.99 587.42 Z M 848.76 589.29 L 858.88 589.29 L 858.88 571.36 L 848.76 571.36 L 848.76 573.24 L 851.76 573.24 L 851.76 575.48 L 848.76 575.48 L 848.76 576.23 L 851.76 576.23 L 851.76 578.47 L 848.76 578.47 L 848.76 579.21 L 851.76 579.21 L 851.76 581.46 L 848.76 581.46 L 848.76 582.2 L 851.76 582.2 L 851.76 584.44 L 848.76 584.44 L 848.76 585.19 L 851.76 585.19 L 851.76 587.42 L 848.76 587.42 Z M 834.53 589.66 L 834.53 570.24 L 848.76 568 L 848.76 570.25 L 858.88 570.25 C 859.57 570.25 860 570.84 860 571.35 L 860 589.32 C 860 589.77 859.57 590.41 858.89 590.41 L 848.76 590.42 L 848.76 591.9 Z M 837.83 584.58 L 839.7 584.73 L 841.14 581.44 L 842.55 584.81 L 844.65 584.96 L 842.25 580.1 L 844.8 575.32 L 842.85 575.47 L 841.34 579.02 L 839.99 575.62 L 838.06 575.77 L 840.07 580.18 Z" fill="#02723b" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 624px; margin-left: 830px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">External CSV File</div></div></div></foreignObject><text x="830" y="636" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">External C...</text></switch></g><path d="M 830 198 L 830 281.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 830 286.88 L 826.5 279.88 L 830 281.63 L 833.5 279.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 875 138 C 877.76 138 880 140.24 880 143 L 880 190.5 Q 855 177 830 190.5 Q 805 204 780 190.5 L 780 145.5 L 780 143 C 780 140.24 782.24 138 785 138 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 168px; margin-left: 781px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">JSON Map file</div></div></div></foreignObject><text x="830" y="172" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">JSON Map file</text></switch></g><path d="M 1230 288 L 1230 204.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1230 199.12 L 1233.5 206.12 L 1230 204.37 L 1226.5 206.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1230 348 L 1230 431.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1230 436.88 L 1226.5 429.88 L 1230 431.63 L 1233.5 429.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1310 318 L 1383.63 318" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1388.88 318 L 1381.88 321.5 L 1383.63 318 L 1381.88 314.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1150" y="288" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 318px; margin-left: 1151px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QML Data Provider</div></div></div></foreignObject><text x="1230" y="322" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QML Data Provider</text></switch></g><path d="M 1310 168 L 1470 168 L 1470 281.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1470 286.88 L 1466.5 279.88 L 1470 281.63 L 1473.5 279.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1150" y="138" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 168px; margin-left: 1151px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QML Graph Provider</div></div></div></foreignObject><text x="1230" y="172" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QML Graph Provider</text></switch></g><path d="M 1310 468 L 1470 468 L 1470 354.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1470 349.12 L 1473.5 356.12 L 1470 354.37 L 1466.5 356.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1150" y="438" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 468px; margin-left: 1151px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QML Widget Provider</div></div></div></foreignObject><text x="1230" y="472" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QML Widget Provider</text></switch></g><path d="M 1556.37 318 L 1623.63 318" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1551.12 318 L 1558.12 314.5 L 1556.37 318 L 1558.12 321.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1628.88 318 L 1621.88 321.5 L 1623.63 318 L 1621.88 314.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1470 288 L 1510 288 L 1510 58 L 830 58 L 830 138" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 49px; margin-left: 1351px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #808080; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Selected from User Interface, loaded by JSON Generator module</div></div></div></foreignObject><text x="1351" y="52" fill="#808080" font-family="Helvetica" font-size="11px" text-anchor="middle">Selected from User Interface, loaded by JSON Generator module</text></switch></g><rect x="1390" y="288" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 318px; margin-left: 1391px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">QML User Interface</div></div></div></foreignObject><text x="1470" y="322" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">QML User Interface</text></switch></g><path d="M 1715 281.63 L 1715 8 L 1570 8" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 1715 286.88 L 1711.5 279.88 L 1715 281.63 L 1718.5 279.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1649.32 292.98 C 1649.32 290.23 1653.64 288 1658.98 288 L 1790.34 288 C 1795.68 288 1800 290.23 1800 292.98 L 1800 332.79 C 1775.92 327.54 1748.74 327.54 1724.66 332.79 C 1700.58 338.05 1673.4 338.05 1649.32 332.79 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1639.66 297.95 C 1639.66 295.2 1643.98 292.98 1649.32 292.98 L 1780.68 292.98 C 1786.02 292.98 1790.34 295.2 1790.34 297.95 L 1790.34 337.77 C 1766.26 332.51 1739.08 332.51 1715 337.77 C 1690.92 343.02 1663.74 343.02 1639.66 337.77 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1630 302.93 C 1630 301.61 1631.02 300.34 1632.83 299.41 C 1634.64 298.48 1637.1 297.95 1639.66 297.95 L 1771.02 297.95 C 1773.58 297.95 1776.04 298.48 1777.85 299.41 C 1779.66 300.34 1780.68 301.61 1780.68 302.93 L 1780.68 342.74 C 1756.6 337.49 1729.42 337.49 1705.34 342.74 C 1681.26 348 1654.08 348 1630 342.74 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 168px; height: 1px; padding-top: 318px; margin-left: 1632px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">          External plugins</div></div></div></foreignObject><text x="1632" y="322" fill="#000000" font-family="Helvetica" font-size="12px">          External plugins</text></switch></g><path d="M 630 138 L 630 168 L 773.63 168" fill="none" stroke="#808080" stroke-miterlimit="10" stroke-dasharray="1 4" pointer-events="stroke"/><path d="M 778.88 168 L 771.88 171.5 L 773.63 168 L 771.88 164.5 Z" fill="#808080" stroke="#808080" stroke-miterlimit="10" pointer-events="all"/><rect x="460" y="78" width="340" height="60" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 108px; margin-left: 462px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #808080; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Describes frame(s) format(s) &amp; how to display each value.<br /><div>The JSON map file contains indices ("%1, %2, %3", ...) which</div><div>are used to represent an element contained in the received</div><div>frames from the current device.</div></div></div></div></foreignObject><text x="462" y="112" fill="#808080" font-family="Helvetica" font-size="12px">Describes frame(s) format(s) &amp; how to display each value...</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 609px; margin-left: 1341px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #808080; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Selected from User Interface, managed by CSV Import/Export module</div></div></div></foreignObject><text x="1341" y="612" fill="#808080" font-family="Helvetica" font-size="11px" text-anchor="middle">Selected from User Interface, managed by CSV Import/Export module</text></switch></g><path d="M 316.37 538 L 430 538 L 430 354.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311.12 538 L 318.12 534.5 L 316.37 538 L 318.12 541.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 430 349.12 L 433.5 356.12 L 430 354.37 L 426.5 356.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 173.78 508 L 296.22 508 C 301.15 508 305.69 513.72 308.15 523 C 310.62 532.28 310.62 543.72 308.15 553 C 305.69 562.28 301.15 568 296.22 568 L 173.78 568 C 168.85 568 164.31 562.28 161.85 553 C 159.38 543.72 159.38 532.28 161.85 523 C 164.31 513.72 168.85 508 173.78 508 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 296.22 508 C 291.3 508 286.76 513.72 284.29 523 C 281.83 532.28 281.83 543.72 284.29 553 C 286.76 562.28 291.3 568 296.22 568" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 538px; margin-left: 161px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Network device</div></div></div></foreignObject><text x="235" y="542" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Network device</text></switch></g><rect x="160" y="578" width="180" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 593px; margin-left: 162px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #808080; line-height: 1.2; pointer-events: all; white-space: nowrap; "><u>Note:</u> only one data source can <br />          be used at a given time.</div></div></div></foreignObject><text x="162" y="597" fill="#808080" font-family="Helvetica" font-size="12px">Note: only one data source can...</text></switch></g><rect x="930" y="283" width="190" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 298px; margin-left: 1025px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #808080; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div style="text-align: left">Latest JFI structure is sent to the </div><div style="text-align: left">UI Provider...</div></div></div></div></foreignObject><text x="1025" y="302" fill="#808080" font-family="Helvetica" font-size="12px" text-anchor="middle">Latest JFI structure is sent to...</text></switch></g><path d="M 997.43 358 L 997.43 328 L 997 318" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 1015 375.57 L 1190 375.57 L 1190 348" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="980" y="358" width="35" height="35" fill="none" stroke="none" pointer-events="all"/><path d="M 1005.41 381.58 C 1005.74 381.87 1005.8 382.4 1005.46 382.79 C 1005.18 383.07 1004.72 383.21 1004.31 382.94 L 996.67 377.06 C 996.5 376.89 996.35 376.71 996.35 376.34 L 996.35 363.53 C 996.35 363.01 996.82 362.67 997.23 362.67 C 997.78 362.67 998.1 363.17 998.1 363.53 L 998.1 375.97 Z M 997.59 390.11 C 1006.21 390.11 1012.09 382.84 1012.09 375.52 C 1012.09 366.62 1004.76 360.92 997.54 360.92 C 987.96 360.92 982.93 369.21 982.93 375.11 C 982.93 385.06 990.83 390.11 997.59 390.11 Z M 997.41 393 C 988.78 393 980.21 386.4 980 375.29 C 980 366.79 987.16 358 997.43 358 C 1006.47 358 1015 364.99 1015 375.6 C 1015 384.99 1007.41 393 997.41 393 Z" fill="#505050" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 400px; margin-left: 998px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">UI Refresh timer (42 Hz)</div></div></div></foreignObject><text x="998" y="412" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">UI Ref...</text></switch></g><rect x="930" y="418" width="230" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 443px; margin-left: 932px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080">Limits the UI "frame rate" so that<br />the software does not freeze<br /></font><div><font color="#808080">when working with high frequency data.</font></div></div></div></div></foreignObject><text x="932" y="447" fill="#000000" font-family="Helvetica" font-size="12px">Limits the UI "frame rate" so that...</text></switch></g><rect x="1630" y="358" width="280" height="230" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 473px; margin-left: 1632px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080"><span>External "plugins" or applications can interact<br /></span>with Serial Studio by reading/writing data<br />on a local TCP port (7777).<br /><br />When a "plugin" writes to the TCP port,<br />Serial Studio shall send the received data<br />to the current device.<br /><br />When the current device sends something,<br />Serial Studio shall send the received data <br />to the connected plugins/applications.<br /><b><br />Why use network ports? </b>Because we want <br />developers to write their plugins in their preferred<br />programming languages and IDEs, not force them<br />to use Qt.<br /></font></div></div></div></foreignObject><text x="1632" y="477" fill="#000000" font-family="Helvetica" font-size="12px">External "plugins" or applications can interac...</text></switch></g><path d="M 610 538 L 610 518 L 610 538 L 610 524.37" fill="none" stroke="#808080" stroke-miterlimit="10" stroke-dasharray="1 2" pointer-events="stroke"/><path d="M 610 519.12 L 613.5 526.12 L 610 524.37 L 606.5 526.12 Z" fill="#808080" stroke="#808080" stroke-miterlimit="10" pointer-events="all"/><rect x="450" y="538" width="320" height="260" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 668px; margin-left: 452px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080"><span>Each received frame is converted to a JSON<br />document by replacing the "%1, %2, %3" indices<br />in the map file with data received from the current device.<br /><br />This process is executed in a different thread for<br />each received frame.<br /><br />Because we are using threads, we cannot guarantee<br />that the "output" JSON documents will come in <br />the original order (see issue #35).<br /><br />In order to mitigate this, each frame is placed<br />inside a "JSON Frame Information" structure (JFI).<br />This structure contains:<br />- The JSON document<br />- RX date/time<br />- Frame number (uint64_t) -&gt; in case that the RX/date<br />time is the same in high-frequency data samples.<br /></span></font></div></div></div></foreignObject><text x="452" y="672" fill="#000000" font-family="Helvetica" font-size="12px">Each received frame is converted to a JSON...</text></switch></g><rect x="1150" y="508" width="280" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 523px; margin-left: 1152px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080"><span>Generates information required for drawing the<br />accelerometer, maps, bar, gauges, compass, etc...</span></font></div></div></div></foreignObject><text x="1152" y="527" fill="#000000" font-family="Helvetica" font-size="12px">Generates information required for drawing the...</text></switch></g><path d="M 1010 204.37 L 1010 243 L 870 243 L 870 281.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1010 199.12 L 1013.5 206.12 L 1010 204.37 L 1006.5 206.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 870 286.88 L 866.5 279.88 L 870 281.63 L 873.5 279.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="930" y="138" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 168px; margin-left: 931px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">MQTT Module</div></div></div></foreignObject><text x="1010" y="172" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">MQTT Module</text></switch></g><rect x="930" y="78" width="370" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 103px; margin-left: 1115px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #808080; line-height: 1.2; pointer-events: all; white-space: nowrap; "><div style="text-align: left">Serial Studio can "publish" RX data to a MQTT broker or</div><div style="text-align: left">"subscribe" to an MQTT topic &amp; display incoming data </div><div style="text-align: left">(using exactly the same JSON map file as the "publisher" instance).</div></div></div></div></foreignObject><text x="1115" y="107" fill="#808080" font-family="Helvetica" font-size="12px" text-anchor="middle">Serial Studio can "publish" RX data to a MQTT broker or...</text></switch></g><rect x="780" y="643" width="360" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 668px; margin-left: 782px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080"><span>Serial Studio generates a CSV file with the received information.<br />This file can later be imported to other applications (e.g. Excel,<br />MATLAB, etc) or opened with Serial Studio again.<br /></span></font></div></div></div></foreignObject><text x="782" y="672" fill="#000000" font-family="Helvetica" font-size="12px">Serial Studio generates a CSV file with the received informa...</text></switch></g><rect x="0" y="293" width="310" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 318px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080"><span>The I/O manager provides an abstraction layer between<br />Serial Studio and connected devices. This allows Serial<br />Studio to work with multiple data sources seamlessly.<br /></span></font></div></div></div></foreignObject><text x="2" y="322" fill="#000000" font-family="Helvetica" font-size="12px">The I/O manager provides an abstraction layer betwe...</text></switch></g><path d="M 390 234.37 L 390 281.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 390 229.12 L 393.5 236.12 L 390 234.37 L 386.5 236.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 390 286.88 L 386.5 279.88 L 390 281.63 L 393.5 279.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 390 161.63 L 390 8 L 1570 8 L 1570 303 L 1556.37 303" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 390 166.88 L 386.5 159.88 L 390 161.63 L 393.5 159.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1551.12 303 L 1558.12 299.5 L 1556.37 303 L 1558.12 306.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="310" y="168" width="160" height="60" rx="9" ry="9" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 198px; margin-left: 311px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Console</div></div></div></foreignObject><text x="390" y="202" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Console</text></switch></g><rect x="0" y="153" width="310" height="90" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 198px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; "><font color="#808080"><span>The console module formats RX data for display in<br />in the UI. Data can be displayed in normal (ASCII) mode<br />or in binary/hexadecimal mode.<br /><br />Users can interact with the current device by sending<br />ASCII or binary data via HEX representation.<br /></span></font></div></div></div></foreignObject><text x="2" y="202" fill="#000000" font-family="Helvetica" font-size="12px">The console module formats RX data for display in...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>