openc3-cosmos-tool-docs 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/tools/staticdocs/404.html +1 -1
- data/tools/staticdocs/assets/images/limitscolor-32147ddf199a0f1cb68aae5992356bbd745074821e5244d913494a4ad0b638f5.png +0 -0
- data/tools/staticdocs/assets/js/6831b732.0a867cbc.js +1 -0
- data/tools/staticdocs/assets/js/{9424f0b3.5385d87f.js → 9424f0b3.96e6dac4.js} +1 -1
- data/tools/staticdocs/assets/js/{97535711.88c7444a.js → 97535711.78660098.js} +1 -1
- data/tools/staticdocs/assets/js/9d6e81d0.44e2d544.js +1 -0
- data/tools/staticdocs/assets/js/a677c089.18f98b70.js +1 -0
- data/tools/staticdocs/assets/js/{aa6b6c1b.40e48e37.js → aa6b6c1b.08f58887.js} +1 -1
- data/tools/staticdocs/assets/js/c24eae19.aaae7796.js +1 -0
- data/tools/staticdocs/assets/js/{ebec1ccb.120a5b80.js → ebec1ccb.f938ebaa.js} +1 -1
- data/tools/staticdocs/assets/js/{main.d3e77dd5.js → main.fd11211a.js} +1 -1
- data/tools/staticdocs/assets/js/{runtime~main.92ff792a.js → runtime~main.e660d304.js} +1 -1
- data/tools/staticdocs/docs/configuration/accessors.html +1 -1
- data/tools/staticdocs/docs/configuration/command.html +1 -1
- data/tools/staticdocs/docs/configuration/format.html +1 -1
- data/tools/staticdocs/docs/configuration/interfaces.html +12 -4
- data/tools/staticdocs/docs/configuration/plugins.html +7 -3
- data/tools/staticdocs/docs/configuration/protocols.html +1 -1
- data/tools/staticdocs/docs/configuration/ssl-tls.html +1 -1
- data/tools/staticdocs/docs/configuration/table.html +1 -1
- data/tools/staticdocs/docs/configuration/target.html +1 -1
- data/tools/staticdocs/docs/configuration/telemetry-screens.html +4 -4
- data/tools/staticdocs/docs/configuration/telemetry.html +1 -1
- data/tools/staticdocs/docs/configuration.html +1 -1
- data/tools/staticdocs/docs/development/curl.html +1 -1
- data/tools/staticdocs/docs/development/developing.html +6 -6
- data/tools/staticdocs/docs/development/json-api.html +1 -1
- data/tools/staticdocs/docs/development/log-structure.html +1 -1
- data/tools/staticdocs/docs/development/roadmap.html +1 -1
- data/tools/staticdocs/docs/development/streaming-api.html +1 -1
- data/tools/staticdocs/docs/development/testing.html +2 -2
- data/tools/staticdocs/docs/development.html +1 -1
- data/tools/staticdocs/docs/getting-started/generators.html +1 -1
- data/tools/staticdocs/docs/getting-started/gettingstarted.html +1 -1
- data/tools/staticdocs/docs/getting-started/installation.html +1 -1
- data/tools/staticdocs/docs/getting-started/key_concepts.html +2 -2
- data/tools/staticdocs/docs/getting-started/podman.html +1 -1
- data/tools/staticdocs/docs/getting-started/requirements.html +1 -1
- data/tools/staticdocs/docs/getting-started/upgrading.html +1 -1
- data/tools/staticdocs/docs/getting-started.html +1 -1
- data/tools/staticdocs/docs/guides/bridges.html +1 -1
- data/tools/staticdocs/docs/guides/cfs.html +1 -1
- data/tools/staticdocs/docs/guides/custom-widgets.html +1 -1
- data/tools/staticdocs/docs/guides/exposing_microservices.html +1 -1
- data/tools/staticdocs/docs/guides/little-endian-bitfields.html +1 -1
- data/tools/staticdocs/docs/guides/local-mode.html +1 -1
- data/tools/staticdocs/docs/guides/logging.html +1 -1
- data/tools/staticdocs/docs/guides/monitoring.html +1 -1
- data/tools/staticdocs/docs/guides/performance.html +1 -1
- data/tools/staticdocs/docs/guides/raspberrypi.html +1 -1
- data/tools/staticdocs/docs/guides/script-writing.html +1 -1
- data/tools/staticdocs/docs/guides/scripting-api.html +9 -3
- data/tools/staticdocs/docs/guides.html +1 -1
- data/tools/staticdocs/docs/meta/contributing.html +1 -1
- data/tools/staticdocs/docs/meta/licenses.html +1 -1
- data/tools/staticdocs/docs/meta/philosophy.html +1 -1
- data/tools/staticdocs/docs/meta/xtce.html +1 -1
- data/tools/staticdocs/docs/meta.html +1 -1
- data/tools/staticdocs/docs/privacy.html +1 -1
- data/tools/staticdocs/docs/tools/admin.html +1 -1
- data/tools/staticdocs/docs/tools/autonomic.html +1 -1
- data/tools/staticdocs/docs/tools/bucket-explorer.html +1 -1
- data/tools/staticdocs/docs/tools/calendar.html +1 -1
- data/tools/staticdocs/docs/tools/cmd-sender.html +1 -1
- data/tools/staticdocs/docs/tools/cmd-tlm-server.html +1 -1
- data/tools/staticdocs/docs/tools/command_history.html +1 -1
- data/tools/staticdocs/docs/tools/data-extractor.html +1 -1
- data/tools/staticdocs/docs/tools/data-viewer.html +1 -1
- data/tools/staticdocs/docs/tools/handbooks.html +1 -1
- data/tools/staticdocs/docs/tools/limits-monitor.html +1 -1
- data/tools/staticdocs/docs/tools/packet-viewer.html +1 -1
- data/tools/staticdocs/docs/tools/script-runner.html +1 -1
- data/tools/staticdocs/docs/tools/table-manager.html +1 -1
- data/tools/staticdocs/docs/tools/tlm-grapher.html +1 -1
- data/tools/staticdocs/docs/tools/tlm-viewer.html +1 -1
- data/tools/staticdocs/docs/tools.html +1 -1
- data/tools/staticdocs/docs.html +1 -1
- data/tools/staticdocs/img/telemetry_viewer/widgets/limitscolor.png +0 -0
- data/tools/staticdocs/index.html +1 -1
- data/tools/staticdocs/lunr-index-1740870259469.json +1 -0
- data/tools/staticdocs/lunr-index.json +1 -1
- data/tools/staticdocs/markdown-page.html +1 -1
- data/tools/staticdocs/search-doc-1740870259469.json +1 -0
- data/tools/staticdocs/search-doc.json +1 -1
- metadata +15 -15
- data/tools/staticdocs/assets/images/limitscolor-7f8e24e4f27f476c3b4c57393ab797268b86aa8ad8b6e7b83d72dd5bf3ca7952.png +0 -0
- data/tools/staticdocs/assets/js/6831b732.bb38c0d0.js +0 -1
- data/tools/staticdocs/assets/js/9d6e81d0.28913d59.js +0 -1
- data/tools/staticdocs/assets/js/a677c089.2512b608.js +0 -1
- data/tools/staticdocs/assets/js/c24eae19.89738127.js +0 -1
- data/tools/staticdocs/lunr-index-1738736939408.json +0 -1
- data/tools/staticdocs/search-doc-1738736939408.json +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7306"],{5077:function(e,n,o){o.r(n),o.d(n,{default:()=>p,frontMatter:()=>c,metadata:()=>s,assets:()=>l,toc:()=>a,contentTitle:()=>r});var s=JSON.parse('{"id":"development/developing","title":"Developing COSMOS","description":"Building COSMOS and developing the frontend and backend","source":"@site/docs/development/developing.md","sourceDirName":"development","slug":"/development/developing","permalink":"/tools/staticdocs/docs/development/developing","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/development/developing.md","tags":[],"version":"current","frontMatter":{"title":"Developing COSMOS","description":"Building COSMOS and developing the frontend and backend","sidebar_custom_props":{"myEmoji":"\uD83D\uDCBB"}},"sidebar":"defaultSidebar","previous":{"title":"Testing with Curl","permalink":"/tools/staticdocs/docs/development/curl"},"next":{"title":"JSON API","permalink":"/tools/staticdocs/docs/development/json-api"}}'),t=o("2322"),i=o("2840");let c={title:"Developing COSMOS",description:"Building COSMOS and developing the frontend and backend",sidebar_custom_props:{myEmoji:"\uD83D\uDCBB"}},r="Developing COSMOS",l={},a=[{value:"Development Tools",id:"development-tools",level:2},{value:"Running a Frontend Application",id:"running-a-frontend-application",level:2},{value:"Running a Backend Server",id:"running-a-backend-server",level:2}];function d(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"developing-cosmos",children:"Developing COSMOS"})}),"\n",(0,t.jsxs)(n.p,{children:["So you want to help develop COSMOS? All of our open source COSMOS code is on ",(0,t.jsx)(n.a,{href:"https://github.com/",children:"Github"})," so the first thing to do is get an ",(0,t.jsx)(n.a,{href:"https://github.com/join",children:"account"}),". Next ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository",children:"clone"})," the ",(0,t.jsx)(n.a,{href:"https://github.com/openc3/cosmos",children:"COSMOS"})," repository. We accept contributions from others as ",(0,t.jsx)(n.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests",children:"Pull Requests"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"development-tools",children:"Development Tools"}),"\n",(0,t.jsxs)(n.p,{children:["The core COSMOS team develops with the ",(0,t.jsx)(n.a,{href:"https://code.visualstudio.com/",children:"Visual Studio Code"})," editor and we highly recommend it. We also utilize a number of extensions including docker, kubernetes, gitlens, prettier, eslint, python, vetur, and ruby. We commit our ",(0,t.jsx)(n.code,{children:"openc3.code-workspace"})," configuration for VSCode to help configure these plugins. You also need ",(0,t.jsx)(n.a,{href:"https://www.docker.com/products/docker-desktop",children:"Docker Desktop"})," which you should already have as it is a requirement to run COSMOS. You'll also need ",(0,t.jsx)(n.a,{href:"https://nodejs.org/en/download/",children:"NodeJS"})," and ",(0,t.jsx)(n.a,{href:"https://yarnpkg.com/getting-started/install",children:"yarn"})," installed."]}),"\n",(0,t.jsx)(n.h1,{id:"building-cosmos",children:"Building COSMOS"}),"\n",(0,t.jsx)(n.p,{children:"Note: We primarily develop COSMOS in MacOS so the commands here will reference bash scripts but the same files exist in Windows as batch scripts."}),"\n",(0,t.jsxs)(n.p,{children:["Build COSMOS using the ",(0,t.jsx)(n.code,{children:"openc3.sh"})," script:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"% ./openc3.sh build\n"})}),"\n",(0,t.jsx)(n.p,{children:"This will pull all the COSMOS container dependencies and build our local containers. Note: This can take a long time especially for your first build!"}),"\n",(0,t.jsx)(n.p,{children:"Once the build completes you can see the built images with the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'% docker image ls | grep "openc3"\nopenc3inc/openc3-cosmos-init latest 4cac7a3ea9d3 29 hours ago 446MB\nopenc3inc/openc3-cosmos-script-runner-api latest 4aacbaf49f7a 29 hours ago 431MB\nopenc3inc/openc3-cosmos-cmd-tlm-api latest 9a8806bd4be3 3 days ago 432MB\nopenc3inc/openc3-operator latest 223e98129fe9 3 days ago 405MB\nopenc3inc/openc3-base latest 98df5c0378c2 3 days ago 405MB\nopenc3inc/openc3-redis latest 5a3003a49199 8 days ago 111MB\nopenc3inc/openc3-traefik latest ec13a8d16a2f 8 days ago 104MB\nopenc3inc/openc3-minio latest 787f6e3fc0be 8 days ago 238MB\nopenc3inc/openc3-node latest b3ee86d3620a 8 days ago 372MB\nopenc3inc/openc3-ruby latest aa158bbb9539 8 days ago 326MB\n'})}),"\n",(0,t.jsxs)(n.admonition,{title:"Offline Building",type:"info",children:[(0,t.jsxs)(n.p,{children:["If you're building in a offline environment or want to use a private Rubygems, NPM or APK server (e.g. Nexus), you can update the following environment variables: RUBYGEMS_URL, NPM_URL, APK_URL, and more in the ",(0,t.jsx)(n.a,{href:"https://github.com/openc3/cosmos/blob/main/.env",children:".env"})," file. Example values:"]}),(0,t.jsxs)(n.p,{children:["ALPINE_VERSION=3.19",(0,t.jsx)("br",{}),"\nALPINE_BUILD=7",(0,t.jsx)("br",{}),"\nRUBYGEMS_URL=",(0,t.jsx)(n.a,{href:"https://rubygems.org",children:"https://rubygems.org"}),(0,t.jsx)("br",{}),"\nNPM_URL=",(0,t.jsx)(n.a,{href:"https://registry.npmjs.org",children:"https://registry.npmjs.org"}),(0,t.jsx)("br",{}),"\nAPK_URL=",(0,t.jsx)(n.a,{href:"http://dl-cdn.alpinelinux.org",children:"http://dl-cdn.alpinelinux.org"}),(0,t.jsx)("br",{})]})]}),"\n",(0,t.jsx)(n.h1,{id:"running-cosmos",children:"Running COSMOS"}),"\n",(0,t.jsxs)(n.p,{children:["Running COSMOS in development mode enables localhost access to internal API ports as well as sets ",(0,t.jsx)(n.code,{children:"RAILS_ENV=development"})," in the cmd-tlm-api and script-runner-api Rails servers. To run in development mode:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"% ./openc3.sh run\n"})}),"\n",(0,t.jsx)(n.p,{children:"You can now see the running containers (I removed CONTAINER ID, CREATED and STATUS to save space):"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'% docker ps\nIMAGE COMMAND PORTS NAMES\nopenc3/openc3-cmd-tlm-api:latest "/sbin/tini -- rails\u2026" 127.0.0.1:2901->2901/tcp cosmos-openc3-cmd-tlm-api-1\nopenc3/openc3-script-runner-api:latest "/sbin/tini -- rails\u2026" 127.0.0.1:2902->2902/tcp cosmos-openc3-script-runner-api-1\nopenc3/openc3-traefik:latest "/entrypoint.sh trae\u2026" 0.0.0.0:2900->80/tcp cosmos-openc3-traefik-1\nopenc3/openc3-operator:latest "/sbin/tini -- ruby \u2026" cosmos-openc3-operator-1\nopenc3/openc3-minio:latest "/usr/bin/docker-ent\u2026" 127.0.0.1:9000->9000/tcp cosmos-openc3-minio-1\nopenc3/openc3-redis:latest "docker-entrypoint.s\u2026" 127.0.0.1:6379->6379/tcp cosmos-openc3-redis-1\n'})}),"\n",(0,t.jsx)(n.p,{children:"If you go to localhost:2900 you should see COSMOS up and running!"}),"\n",(0,t.jsx)(n.h2,{id:"running-a-frontend-application",children:"Running a Frontend Application"}),"\n",(0,t.jsx)(n.p,{children:"So now that you have COSMOS up and running how do you develop an individual COSMOS application?"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Bootstrap the frontend with yarn"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"openc3-init/plugins % yarn\nopenc3-init/plugins % yarn build:common\n"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Serve a local COSMOS application (CmdTlmServer, ScriptRunner, etc)"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"openc3-init % cd plugins/packages/openc3-tool-scriptrunner\nopenc3-tool-scriptrunner % yarn serve\nbuilt in 128722ms\n"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Set the ",(0,t.jsx)(n.a,{href:"https://single-spa.js.org/",children:"single SPA"})," override for the application"]}),"\n",(0,t.jsxs)(n.p,{children:["Visit localhost:2900 and Right-click 'Inspect'",(0,t.jsx)("br",{}),"\nIn the console paste:"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:'localStorage.setItem("devtools", true);\n'})}),"\n",(0,t.jsxs)(n.p,{children:["Refresh and you should see ",(0,t.jsx)(n.code,{children:"{...}"})," in the bottom right",(0,t.jsx)("br",{}),"\nClick the Default button next to the application (@openc3/tool-scriptrunner)",(0,t.jsx)("br",{}),"\nPaste in the development path which is dependent on the port returned by the local yarn serve and the tool name (scriptrunner)"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"http://localhost:2914/tools/scriptrunner/main.js",children:"http://localhost:2914/tools/scriptrunner/main.js"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Refresh the page and you should see your local copy of the application (Script Runner in this example). If you dynamically add code (like ",(0,t.jsx)(n.code,{children:"console.log"}),") the yarn window should re-compile and the browser should refresh displaying your new code. It is highly recommended to get familiar with your browser's ",(0,t.jsx)(n.a,{href:"https://developer.chrome.com/docs/devtools/overview/",children:"development tools"})," if you plan to do frontend development."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"running-a-backend-server",children:"Running a Backend Server"}),"\n",(0,t.jsx)(n.p,{children:"If the code you want to develop is the cmd-tlm-api or script-runner-api backend servers there are several steps to enable access to a development copy."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Run a development version of traefik. COSMOS uses traefik to direct API requests to the correct locations."}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"% cd openc3-traefik\nopenc3-traefik % docker ps\n# Look for the container with name including traefik\nopenc3-traefik % docker stop cosmos-openc3-traefik-1\nopenc3-traefik % docker build --build-arg TRAEFIK_CONFIG=traefik-dev.yaml -t openc3-traefik-dev .\nopenc3-traefik % docker run --network=openc3-cosmos-network -p 2900:2900 -it --rm openc3-traefik-dev\n"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Run a local copy of the cmd-tlm-api or script-runner-api"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"% cd openc3-cosmos-cmd-tlm-api\nopenc3-cosmos-cmd-tlm-api % docker ps\n# Look for the container with name including cmd-tlm-api\nopenc3-cosmos-cmd-tlm-api % docker stop cosmos-openc3-cosmos-cmd-tlm-api-1\n# Run the following on Windows:\nopenc3-cosmos-cmd-tlm-api> dev_server.bat\n# In Linux, set all the environment variables in the .env file, but override REDIS to be local\nopenc3-cosmos-cmd-tlm-api % set -a; source ../.env; set +a\nopenc3-cosmos-cmd-tlm-api % export OPENC3_REDIS_HOSTNAME=127.0.0.1\nopenc3-cosmos-cmd-tlm-api % export OPENC3_REDIS_EPHEMERAL_HOSTNAME=127.0.0.1\nopenc3-cosmos-cmd-tlm-api % bundle install\nopenc3-cosmos-cmd-tlm-api % bundle exec rails s\n"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Once the ",(0,t.jsx)(n.code,{children:"bundle exec rails s"})," command returns you should see API requests coming from interactions in the frontend code. If you add code (like Ruby debugging statements) to the cmd-tlm-api code you need to stop the server (CTRL-C) and restart it to see the effect."]}),"\n"]})]})}function p(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},2840:function(e,n,o){o.d(n,{Z:function(){return r},a:function(){return c}});var s=o(2784);let t={},i=s.createContext(t);function c(e){let n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]);
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["8713"],{1035:function(e,s,t){t.r(s),t.d(s,{default:()=>h,frontMatter:()=>i,metadata:()=>n,assets:()=>c,toc:()=>d,contentTitle:()=>a});var n=JSON.parse('{"id":"getting-started/key_concepts","title":"Key Concepts","description":"Projects, Containerization, Frontend, Backend","source":"@site/docs/getting-started/key_concepts.md","sourceDirName":"getting-started","slug":"/getting-started/key_concepts","permalink":"/tools/staticdocs/docs/getting-started/key_concepts","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/getting-started/key_concepts.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_position":5,"title":"Key Concepts","description":"Projects, Containerization, Frontend, Backend","sidebar_custom_props":{"myEmoji":"\uD83D\uDCA1"}},"sidebar":"defaultSidebar","previous":{"title":"Upgrading","permalink":"/tools/staticdocs/docs/getting-started/upgrading"},"next":{"title":"Requirements and Design","permalink":"/tools/staticdocs/docs/getting-started/requirements"}}'),o=t("2322"),r=t("2840");let i={sidebar_position:5,title:"Key Concepts",description:"Projects, Containerization, Frontend, Backend",sidebar_custom_props:{myEmoji:"\uD83D\uDCA1"}},a="OpenC3 COSMOS Key Concepts",c={},d=[{value:"Projects",id:"projects",level:2},{value:"Containerization",id:"containerization",level:2},{value:"Images",id:"images",level:3},{value:"Containers",id:"containers",level:3},{value:"Docker Compose",id:"docker-compose",level:3},{value:"Environment File",id:"environment-file",level:3},{value:"Kubernetes",id:"kubernetes",level:3},{value:"Frontend",id:"frontend",level:2},{value:"Vue.js",id:"vuejs",level:3},{value:"Single-Spa",id:"single-spa",level:3},{value:"Astro UX",id:"astro-ux",level:3},{value:"Backend",id:"backend",level:2},{value:"Redis",id:"redis",level:3},{value:"MinIO",id:"minio",level:3},{value:"Ruby on Rails",id:"ruby-on-rails",level:3}];function l(e){let s={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"openc3-cosmos-key-concepts",children:"OpenC3 COSMOS Key Concepts"})}),"\n",(0,o.jsx)(s.h2,{id:"projects",children:"Projects"}),"\n",(0,o.jsxs)(s.p,{children:["The main COSMOS ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos",children:"repo"})," contains all the source code used to build and run COSMOS. However, users (not developers) of COSMOS should use the COSMOS ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project",children:"project"})," to launch COSMOS. The project consists of the ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/openc3.sh",children:"openc3.sh"})," and ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/openc3.bat",children:"openc3.bat"})," files for starting and stopping COSMOS, the ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/compose.yaml",children:"compose.yaml"})," for configuring the COSMOS containers, and the ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/.env",children:".env"})," file for setting runtime variables. Additionally, the COSMOS project contains user modifiable config files for both Redis and Traefik."]}),"\n",(0,o.jsx)(s.h2,{id:"containerization",children:"Containerization"}),"\n",(0,o.jsx)(s.h3,{id:"images",children:"Images"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/get-started/overview/#images",children:"Docker"}),', "An image is a read-only template with instructions for creating a Docker container." The base operating system COSMOS uses is called ',(0,o.jsx)(s.a,{href:"https://www.alpinelinux.org/",children:"Alpine Linux"}),". It is a simple and compact image with a full package system that allows us to install our dependencies. Starting with Alpine, we create a ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/engine/reference/builder/",children:"Dockerfile"})," to add Ruby and Python and a few other packages to create our own docker image. We further build upon that image to create a NodeJS image to support our frontend and additional images to support our backend."]}),"\n",(0,o.jsx)(s.h3,{id:"containers",children:"Containers"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://www.docker.com/resources/what-container/",children:"Docker"}),', "a container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another." Also per ',(0,o.jsx)(s.a,{href:"https://docs.docker.com/guides/walkthroughs/what-is-a-container/",children:"Docker"}),', "A container is an isolated environment for your code. This means that a container has no knowledge of your operating system, or your files. It runs on the environment provided to you by Docker Desktop. Containers have everything that your code needs in order to run, down to a base operating system." COSMOS utilizes containers to provide a consistent runtime environment. Containers make it easy to deploy to local on-prem servers, cloud environments, or air-gapped networks.']}),"\n",(0,o.jsx)(s.p,{children:"The COSMOS Open Source containers consist of the following:"}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Name"}),(0,o.jsx)(s.th,{children:"Description"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-cosmos-init-1"}),(0,o.jsx)(s.td,{children:"Copies files to Minio and configures COSMOS then exits"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-operator-1"}),(0,o.jsx)(s.td,{children:"Main COSMOS container that runs the interfaces and target microservices"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-cosmos-cmd-tlm-api-1"}),(0,o.jsx)(s.td,{children:"Rails server that provides all the COSMOS API endpoints"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-cosmos-script-runner-api-1"}),(0,o.jsx)(s.td,{children:"Rails server that provides the Script API endpoints"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-redis-1"}),(0,o.jsx)(s.td,{children:"Serves the static target configuration"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-redis-ephemeral-1"}),(0,o.jsxs)(s.td,{children:["Serves the ",(0,o.jsx)(s.a,{href:"https://redis.io/docs/data-types/streams",children:"streams"})," containing the raw and decomutated data"]})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-minio-1"}),(0,o.jsx)(s.td,{children:"Provides a S3 like bucket storage interface and also serves as a static webserver for the tool files"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-traefik-1"}),(0,o.jsx)(s.td,{children:"Provides a reverse proxy and load balancer with routes to the COSMOS endpoints"})]})]})]}),"\n",(0,o.jsxs)(s.p,{children:["The container list for ",(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"Enterprise COSMOS"})," consists of the following:"]}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Name"}),(0,o.jsx)(s.th,{children:"Description"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-enterprise-openc3-metrics-1"}),(0,o.jsx)(s.td,{children:"Rails server that provides metrics on COSMOS performance"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-enterprise-openc3-keycloak-1"}),(0,o.jsx)(s.td,{children:"Single-Sign On service for authentication"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-enterprise-openc3-postgresql-1"}),(0,o.jsx)(s.td,{children:"SQL Database for use by Keycloak"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"openc3-nfs *"}),(0,o.jsx)(s.td,{children:"Network File System pod only for use in Kubernetes to share code libraries between containers"})]})]})]}),"\n",(0,o.jsx)(s.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/compose/",children:"Docker"}),', "Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application\'s services. Then, with a single command, you create and start all the services from your configuration." OpenC3 uses compose files to both build and run COSMOS. The ',(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/compose.yaml",children:"compose.yaml"})," is where ports are exposed and environment variables are used."]}),"\n",(0,o.jsx)(s.h3,{id:"environment-file",children:"Environment File"}),"\n",(0,o.jsxs)(s.p,{children:["COSMOS uses an ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/compose/environment-variables/env-file/",children:"environment file"})," along with Docker Compose to pass environment variables into the COSMOS runtime. This ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/.env",children:".env"})," file consists of simple key value pairs that contain the version of COSMOS deployed, usernames and passwords, and much more."]}),"\n",(0,o.jsx)(s.h3,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://kubernetes.io/",children:"Kubernetes.io"}),', "Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications. It groups containers that make up an application into logical units for easy management and discovery." ',(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," provides ",(0,o.jsx)(s.a,{href:"https://helm.sh/docs/topics/charts/",children:"Helm charts"})," for easy deployment to Kubernetes in various cloud environments."]}),"\n",(0,o.jsxs)(s.p,{children:["COSMOS Enterprise also provides ",(0,o.jsx)(s.a,{href:"https://www.terraform.io/",children:"Terraform"})," scripts to deploy COSMOS infrastructure on various cloud environments."]}),"\n",(0,o.jsx)(s.h2,{id:"frontend",children:"Frontend"}),"\n",(0,o.jsx)(s.h3,{id:"vuejs",children:"Vue.js"}),"\n",(0,o.jsxs)(s.p,{children:["The COSMOS frontend is fully browser native and is implemented in the Vue.js framework. Per ",(0,o.jsx)(s.a,{href:"https://vuejs.org/guide/introduction.html",children:"Vue.js"}),', "Vue is a JavaScript framework for building user interfaces. It builds on top of standard HTML, CSS, and JavaScript and provides a declarative and component-based programming model that helps you efficiently develop user interfaces, be they simple or complex." COSMOS utilizes Vue.js and the ',(0,o.jsx)(s.a,{href:"https://vuetifyjs.com/en/",children:"Vuetify"})," Component Framework UI library to build all the COSMOS tools which run in the browser of your choice. COSMOS 5 utilized Vue.js 2.x and Vuetify 2.x while COSMOS 6 utilizes Vue.js 3.x and Vuetify 3.x."]}),"\n",(0,o.jsx)(s.h3,{id:"single-spa",children:"Single-Spa"}),"\n",(0,o.jsxs)(s.p,{children:["While COSMOS itself is written in Vue.js, we utilize a technology called ",(0,o.jsx)(s.a,{href:"https://single-spa.js.org/",children:"single-spa"})," to allow COSMOS developers to create applications in any javascript framework they choose. Single-spa is a micro frontend framework and acts as a top level router to render the application being requested. COSMOS provides sample applications ready to plug into single-spa in Angular, React, Svelte, and Vue."]}),"\n",(0,o.jsx)(s.h3,{id:"astro-ux",children:"Astro UX"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://www.astrouxds.com/",children:"AstroUXDS"}),', "The Astro Space UX Design System enables developers and designers to build rich space app experiences with established interaction patterns and best practices." COSMOS utilizes the Astro design guidelines for color, typograpy, and iconograpy. In some cases, e.g. ',(0,o.jsx)(s.a,{href:"https://www.astrouxds.com/components/clock/",children:"Astro Clock"}),", COSMOS directly incorporates Astro components."]}),"\n",(0,o.jsx)(s.h2,{id:"backend",children:"Backend"}),"\n",(0,o.jsx)(s.h3,{id:"redis",children:"Redis"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.a,{href:"https://redis.io/",children:"Redis"})," is an in-memory data store with support for strings, hashes, lists, sets, sorted sets, streams, and more. COSMOS uses Redis to store both our configuration and data. If you look back at our ",(0,o.jsx)(s.a,{href:"/docs/getting-started/key_concepts#containers",children:"container list"})," you'll notice two redis containers: cosmos-openc3-redis-1 and cosmos-openc3-redis-ephemeral-1. The ephemeral container contains all the real-time data pushed into ",(0,o.jsx)(s.a,{href:"https://redis.io/docs/data-types/streams/",children:"Redis streams"}),". The other redis container contains COSMOS configuration that is meant to persist. ",(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," provides helm charts that setup ",(0,o.jsx)(s.a,{href:"https://redis.io/docs/management/scaling/",children:"Redis Cluster"})," to perform horizontal scaling where data is shared across multiple Redis nodes."]}),"\n",(0,o.jsx)(s.h3,{id:"minio",children:"MinIO"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.a,{href:"https://min.io/",children:"MinIO"})," is a high-performance, S3 compatible object store. COSMOS uses this storage technology to host both the COSMOS tools themselves and the long term log files. ",(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," deployed in a cloud environment uses the available cloud native bucket storage technology, e.g. AWS S3, GCP Buckets, and Azure Blob Storage. Using bucket storage allows COSMOS to directly serve the tools as a static website and thus we don't need to deploy Tomcat or Nginx for example."]}),"\n",(0,o.jsx)(s.h3,{id:"ruby-on-rails",children:"Ruby on Rails"}),"\n",(0,o.jsxs)(s.p,{children:["The COSMOS API and Script Runner backends are powered by ",(0,o.jsx)(s.a,{href:"https://rubyonrails.org/",children:"Ruby on Rails"}),". Rails is a web application development framework written in the Ruby programming language. Rails (and our familiarity with Ruby) allows us to write less code while accomplishing more than many other languages and frameworks."]})]})}function h(e={}){let{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},2840:function(e,s,t){t.d(s,{Z:function(){return a},a:function(){return i}});var n=t(2784);let o={},r=n.createContext(o);function i(e){let s=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]);
|
1
|
+
"use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["8713"],{1035:function(e,s,t){t.r(s),t.d(s,{default:()=>h,frontMatter:()=>i,metadata:()=>n,assets:()=>c,toc:()=>d,contentTitle:()=>a});var n=JSON.parse('{"id":"getting-started/key_concepts","title":"Key Concepts","description":"Projects, Containerization, Frontend, Backend","source":"@site/docs/getting-started/key_concepts.md","sourceDirName":"getting-started","slug":"/getting-started/key_concepts","permalink":"/tools/staticdocs/docs/getting-started/key_concepts","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/getting-started/key_concepts.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_position":5,"title":"Key Concepts","description":"Projects, Containerization, Frontend, Backend","sidebar_custom_props":{"myEmoji":"\uD83D\uDCA1"}},"sidebar":"defaultSidebar","previous":{"title":"Upgrading","permalink":"/tools/staticdocs/docs/getting-started/upgrading"},"next":{"title":"Requirements and Design","permalink":"/tools/staticdocs/docs/getting-started/requirements"}}'),o=t("2322"),r=t("2840");let i={sidebar_position:5,title:"Key Concepts",description:"Projects, Containerization, Frontend, Backend",sidebar_custom_props:{myEmoji:"\uD83D\uDCA1"}},a="OpenC3 COSMOS Key Concepts",c={},d=[{value:"Projects",id:"projects",level:2},{value:"Containerization",id:"containerization",level:2},{value:"Images",id:"images",level:3},{value:"Containers",id:"containers",level:3},{value:"Docker Compose",id:"docker-compose",level:3},{value:"Environment File",id:"environment-file",level:3},{value:"Kubernetes",id:"kubernetes",level:3},{value:"Frontend",id:"frontend",level:2},{value:"Vue.js",id:"vuejs",level:3},{value:"Single-Spa",id:"single-spa",level:3},{value:"Astro UX",id:"astro-ux",level:3},{value:"Backend",id:"backend",level:2},{value:"Redis",id:"redis",level:3},{value:"MinIO",id:"minio",level:3},{value:"Ruby on Rails",id:"ruby-on-rails",level:3}];function l(e){let s={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"openc3-cosmos-key-concepts",children:"OpenC3 COSMOS Key Concepts"})}),"\n",(0,o.jsx)(s.h2,{id:"projects",children:"Projects"}),"\n",(0,o.jsxs)(s.p,{children:["The main COSMOS ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos",children:"repo"})," contains all the source code used to build and run COSMOS. However, users (not developers) of COSMOS should use the COSMOS ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project",children:"project"})," to launch COSMOS. The project consists of the ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/openc3.sh",children:"openc3.sh"})," and ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/openc3.bat",children:"openc3.bat"})," files for starting and stopping COSMOS, the ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/compose.yaml",children:"compose.yaml"})," for configuring the COSMOS containers, and the ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/.env",children:".env"})," file for setting runtime variables. Additionally, the COSMOS project contains user modifiable config files for both Redis and Traefik."]}),"\n",(0,o.jsx)(s.h2,{id:"containerization",children:"Containerization"}),"\n",(0,o.jsx)(s.h3,{id:"images",children:"Images"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/get-started/overview/#images",children:"Docker"}),', "An image is a read-only template with instructions for creating a Docker container." The base operating system COSMOS uses is called ',(0,o.jsx)(s.a,{href:"https://www.alpinelinux.org/",children:"Alpine Linux"}),". It is a simple and compact image with a full package system that allows us to install our dependencies. Starting with Alpine, we create a ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/engine/reference/builder/",children:"Dockerfile"})," to add Ruby and Python and a few other packages to create our own docker image. We further build upon that image to create a NodeJS image to support our frontend and additional images to support our backend."]}),"\n",(0,o.jsx)(s.h3,{id:"containers",children:"Containers"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://www.docker.com/resources/what-container/",children:"Docker"}),', "a container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another." Also per ',(0,o.jsx)(s.a,{href:"https://docs.docker.com/guides/walkthroughs/what-is-a-container/",children:"Docker"}),', "A container is an isolated environment for your code. This means that a container has no knowledge of your operating system, or your files. It runs on the environment provided to you by Docker Desktop. Containers have everything that your code needs in order to run, down to a base operating system." COSMOS utilizes containers to provide a consistent runtime environment. Containers make it easy to deploy to local on-prem servers, cloud environments, or air-gapped networks.']}),"\n",(0,o.jsx)(s.p,{children:"The COSMOS Open Source containers consist of the following:"}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Name"}),(0,o.jsx)(s.th,{children:"Description"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-cosmos-init-1"}),(0,o.jsx)(s.td,{children:"Copies files to Minio and configures COSMOS then exits"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-operator-1"}),(0,o.jsx)(s.td,{children:"Main COSMOS container that runs the interfaces and target microservices"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-cosmos-cmd-tlm-api-1"}),(0,o.jsx)(s.td,{children:"Rails server that provides all the COSMOS API endpoints"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-cosmos-script-runner-api-1"}),(0,o.jsx)(s.td,{children:"Rails server that provides the Script API endpoints"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-redis-1"}),(0,o.jsx)(s.td,{children:"Serves the static target configuration"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-redis-ephemeral-1"}),(0,o.jsxs)(s.td,{children:["Serves the ",(0,o.jsx)(s.a,{href:"https://redis.io/docs/data-types/streams",children:"streams"})," containing the raw and decomutated data"]})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-minio-1"}),(0,o.jsx)(s.td,{children:"Provides a S3 like bucket storage interface and also serves as a static webserver for the tool files"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-openc3-traefik-1"}),(0,o.jsx)(s.td,{children:"Provides a reverse proxy and load balancer with routes to the COSMOS endpoints"})]})]})]}),"\n",(0,o.jsxs)(s.p,{children:["The container list for ",(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"Enterprise COSMOS"})," consists of the following:"]}),"\n",(0,o.jsxs)(s.table,{children:[(0,o.jsx)(s.thead,{children:(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.th,{children:"Name"}),(0,o.jsx)(s.th,{children:"Description"})]})}),(0,o.jsxs)(s.tbody,{children:[(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-enterprise-openc3-metrics-1"}),(0,o.jsx)(s.td,{children:"Rails server that provides metrics on COSMOS performance"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-enterprise-openc3-keycloak-1"}),(0,o.jsx)(s.td,{children:"Single-Sign On service for authentication"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"cosmos-enterprise-openc3-postgresql-1"}),(0,o.jsx)(s.td,{children:"SQL Database for use by Keycloak"})]}),(0,o.jsxs)(s.tr,{children:[(0,o.jsx)(s.td,{children:"openc3-nfs *"}),(0,o.jsx)(s.td,{children:"Network File System pod only for use in Kubernetes to share code libraries between containers"})]})]})]}),"\n",(0,o.jsx)(s.h3,{id:"docker-compose",children:"Docker Compose"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/compose/",children:"Docker"}),', "Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application\'s services. Then, with a single command, you create and start all the services from your configuration." OpenC3 uses compose files to both build and run COSMOS. The ',(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/compose.yaml",children:"compose.yaml"})," is where ports are exposed and environment variables are used."]}),"\n",(0,o.jsx)(s.h3,{id:"environment-file",children:"Environment File"}),"\n",(0,o.jsxs)(s.p,{children:["COSMOS uses an ",(0,o.jsx)(s.a,{href:"https://docs.docker.com/compose/environment-variables/env-file/",children:"environment file"})," along with Docker Compose to pass environment variables into the COSMOS runtime. This ",(0,o.jsx)(s.a,{href:"https://github.com/OpenC3/cosmos-project/blob/main/.env",children:".env"})," file consists of simple key value pairs that contain the version of COSMOS deployed, usernames and passwords, and much more."]}),"\n",(0,o.jsx)(s.h3,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://kubernetes.io/",children:"Kubernetes.io"}),', "Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications. It groups containers that make up an application into logical units for easy management and discovery." ',(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," provides ",(0,o.jsx)(s.a,{href:"https://helm.sh/docs/topics/charts/",children:"Helm charts"})," for easy deployment to Kubernetes in various cloud environments."]}),"\n",(0,o.jsx)(s.p,{children:"COSMOS Enterprise also provides configuration to deploy COSMOS infrastructure on various cloud environments (e.g. CloudFormation template on AWS)."}),"\n",(0,o.jsx)(s.h2,{id:"frontend",children:"Frontend"}),"\n",(0,o.jsx)(s.h3,{id:"vuejs",children:"Vue.js"}),"\n",(0,o.jsxs)(s.p,{children:["The COSMOS frontend is fully browser native and is implemented in the Vue.js framework. Per ",(0,o.jsx)(s.a,{href:"https://vuejs.org/guide/introduction.html",children:"Vue.js"}),', "Vue is a JavaScript framework for building user interfaces. It builds on top of standard HTML, CSS, and JavaScript and provides a declarative and component-based programming model that helps you efficiently develop user interfaces, be they simple or complex." COSMOS utilizes Vue.js and the ',(0,o.jsx)(s.a,{href:"https://vuetifyjs.com/en/",children:"Vuetify"})," Component Framework UI library to build all the COSMOS tools which run in the browser of your choice. COSMOS 5 utilized Vue.js 2.x and Vuetify 2.x while COSMOS 6 utilizes Vue.js 3.x and Vuetify 3.x."]}),"\n",(0,o.jsx)(s.h3,{id:"single-spa",children:"Single-Spa"}),"\n",(0,o.jsxs)(s.p,{children:["While COSMOS itself is written in Vue.js, we utilize a technology called ",(0,o.jsx)(s.a,{href:"https://single-spa.js.org/",children:"single-spa"})," to allow COSMOS developers to create applications in any javascript framework they choose. Single-spa is a micro frontend framework and acts as a top level router to render the application being requested. COSMOS provides sample applications ready to plug into single-spa in Angular, React, Svelte, and Vue."]}),"\n",(0,o.jsx)(s.h3,{id:"astro-ux",children:"Astro UX"}),"\n",(0,o.jsxs)(s.p,{children:["Per ",(0,o.jsx)(s.a,{href:"https://www.astrouxds.com/",children:"AstroUXDS"}),', "The Astro Space UX Design System enables developers and designers to build rich space app experiences with established interaction patterns and best practices." COSMOS utilizes the Astro design guidelines for color, typograpy, and iconograpy. In some cases, e.g. ',(0,o.jsx)(s.a,{href:"https://www.astrouxds.com/components/clock/",children:"Astro Clock"}),", COSMOS directly incorporates Astro components."]}),"\n",(0,o.jsx)(s.h2,{id:"backend",children:"Backend"}),"\n",(0,o.jsx)(s.h3,{id:"redis",children:"Redis"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.a,{href:"https://redis.io/",children:"Redis"})," is an in-memory data store with support for strings, hashes, lists, sets, sorted sets, streams, and more. COSMOS uses Redis to store both our configuration and data. If you look back at our ",(0,o.jsx)(s.a,{href:"/docs/getting-started/key_concepts#containers",children:"container list"})," you'll notice two redis containers: cosmos-openc3-redis-1 and cosmos-openc3-redis-ephemeral-1. The ephemeral container contains all the real-time data pushed into ",(0,o.jsx)(s.a,{href:"https://redis.io/docs/data-types/streams/",children:"Redis streams"}),". The other redis container contains COSMOS configuration that is meant to persist. ",(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," provides helm charts that setup ",(0,o.jsx)(s.a,{href:"https://redis.io/docs/management/scaling/",children:"Redis Cluster"})," to perform horizontal scaling where data is shared across multiple Redis nodes."]}),"\n",(0,o.jsx)(s.h3,{id:"minio",children:"MinIO"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.a,{href:"https://min.io/",children:"MinIO"})," is a high-performance, S3 compatible object store. COSMOS uses this storage technology to host both the COSMOS tools themselves and the long term log files. ",(0,o.jsx)(s.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," deployed in a cloud environment uses the available cloud native bucket storage technology, e.g. AWS S3, GCP Buckets, and Azure Blob Storage. Using bucket storage allows COSMOS to directly serve the tools as a static website and thus we don't need to deploy Tomcat or Nginx for example."]}),"\n",(0,o.jsx)(s.h3,{id:"ruby-on-rails",children:"Ruby on Rails"}),"\n",(0,o.jsxs)(s.p,{children:["The COSMOS API and Script Runner backends are powered by ",(0,o.jsx)(s.a,{href:"https://rubyonrails.org/",children:"Ruby on Rails"}),". Rails is a web application development framework written in the Ruby programming language. Rails (and our familiarity with Ruby) allows us to write less code while accomplishing more than many other languages and frameworks."]})]})}function h(e={}){let{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},2840:function(e,s,t){t.d(s,{Z:function(){return a},a:function(){return i}});var n=t(2784);let o={},r=n.createContext(o);function i(e){let s=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]);
|
@@ -24,7 +24,7 @@ function insertBanner() {
|
|
24
24
|
: actualHomePagePath + '/';
|
25
25
|
suggestionContainer.innerHTML = suggestedBaseUrl;
|
26
26
|
}
|
27
|
-
`})})})}function D(){let{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,f.TH)();return t&&n===e?(0,r.jsx)(F,{}):null}function M(){let{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,b.ZP)(e),{htmlLang:s,direction:l}=a[o];return(0,r.jsxs)(m.Z,{children:[(0,r.jsx)("html",{lang:s,dir:l}),(0,r.jsx)("title",{children:t}),(0,r.jsx)("meta",{property:"og:title",content:t}),(0,r.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,r.jsx)("link",{rel:"icon",href:i})]})}var z=n("6400"),$=n("61");function B(){let e=(0,$.Z)();return(0,r.jsx)(m.Z,{children:(0,r.jsx)("html",{"data-has-hydrated":e})})}let U=(0,p.H)(d.Z);function H(){let e=function(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,p.f)(d.Z,e.pathname).some(e=>{let{route:t}=e;return!0===t.exact}))return T.set(e.pathname,e.pathname),e;let t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,f.TH)());return(0,r.jsx)(R,{location:e,children:U})}var Z=n("7138");let W=!function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise((t,n)=>{let r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)})}:function(e){return new Promise((t,n)=>{if("undefined"==typeof document){n();return}let r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();let o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)})};var V=n("316");let q=new Set,G=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,K=e=>!Y()&&!G.has(e)&&!q.has(e),Q=e=>!Y()&&!G.has(e),X=e=>Object.entries(Z).filter(t=>{let[n]=t;return n.replace(/-[^-]+$/,"")===e}).flatMap(e=>{let[,t]=e;return Object.values((0,V.Z)(t))}),J=Object.freeze({prefetch:e=>!!K(e)&&(q.add(e),Promise.all((0,p.f)(d.Z,e).flatMap(e=>X(e.route.path)).map(e=>{let t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch(()=>{}):Promise.resolve()}))),preload:e=>!!Q(e)&&(G.add(e),L(e))});if(e=n.hmd(e),c.Z.canUseDOM){window.docusaurus=J;let t=document.getElementById("__docusaurus"),n=(0,r.jsx)(i.B6,{children:(0,r.jsx)(function(e){let{children:t}=e;return"hash"===l.default.future.experimental_router?(0,r.jsx)(s.UT,{children:t}):(0,r.jsx)(s.VK,{children:t})},{children:(0,r.jsx)(function(){return(0,r.jsx)(z.Z,{children:(0,r.jsx)(O.M,{children:(0,r.jsxs)(A.t,{children:[(0,r.jsxs)(g,{children:[(0,r.jsx)(M,{}),(0,r.jsx)(C,{}),(0,r.jsx)(D,{}),(0,r.jsx)(H,{})]}),(0,r.jsx)(B,{})]})})})},{})})}),c=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},u=()=>{if(window.docusaurusRoot){window.docusaurusRoot.render(n);return}window.docusaurusRoot=a.hydrateRoot(t,n,{onRecoverableError:c})};L(window.location.pathname).then(()=>{(0,o.startTransition)(u)}),e.hot&&e.hot.accept()}},127:function(e,t,n){"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n("2322"),o=n("2784"),a=n("5150"),i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/tools/staticdocs/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/tools/staticdocs/docs","mainDocId":"introduction","docs":[{"id":"configuration/accessors","path":"/tools/staticdocs/docs/configuration/accessors","sidebar":"defaultSidebar"},{"id":"configuration/command","path":"/tools/staticdocs/docs/configuration/command","sidebar":"defaultSidebar"},{"id":"configuration/format","path":"/tools/staticdocs/docs/configuration/format","sidebar":"defaultSidebar"},{"id":"configuration/interfaces","path":"/tools/staticdocs/docs/configuration/interfaces","sidebar":"defaultSidebar"},{"id":"configuration/plugins","path":"/tools/staticdocs/docs/configuration/plugins","sidebar":"defaultSidebar"},{"id":"configuration/protocols","path":"/tools/staticdocs/docs/configuration/protocols","sidebar":"defaultSidebar"},{"id":"configuration/ssl-tls","path":"/tools/staticdocs/docs/configuration/ssl-tls","sidebar":"defaultSidebar"},{"id":"configuration/table","path":"/tools/staticdocs/docs/configuration/table","sidebar":"defaultSidebar"},{"id":"configuration/target","path":"/tools/staticdocs/docs/configuration/target","sidebar":"defaultSidebar"},{"id":"configuration/telemetry","path":"/tools/staticdocs/docs/configuration/telemetry","sidebar":"defaultSidebar"},{"id":"configuration/telemetry-screens","path":"/tools/staticdocs/docs/configuration/telemetry-screens","sidebar":"defaultSidebar"},{"id":"development/curl","path":"/tools/staticdocs/docs/development/curl","sidebar":"defaultSidebar"},{"id":"development/developing","path":"/tools/staticdocs/docs/development/developing","sidebar":"defaultSidebar"},{"id":"development/json-api","path":"/tools/staticdocs/docs/development/json-api","sidebar":"defaultSidebar"},{"id":"development/log-structure","path":"/tools/staticdocs/docs/development/log-structure","sidebar":"defaultSidebar"},{"id":"development/roadmap","path":"/tools/staticdocs/docs/development/roadmap","sidebar":"defaultSidebar"},{"id":"development/streaming-api","path":"/tools/staticdocs/docs/development/streaming-api","sidebar":"defaultSidebar"},{"id":"development/testing","path":"/tools/staticdocs/docs/development/testing","sidebar":"defaultSidebar"},{"id":"getting-started/generators","path":"/tools/staticdocs/docs/getting-started/generators","sidebar":"defaultSidebar"},{"id":"getting-started/gettingstarted","path":"/tools/staticdocs/docs/getting-started/gettingstarted","sidebar":"defaultSidebar"},{"id":"getting-started/installation","path":"/tools/staticdocs/docs/getting-started/installation","sidebar":"defaultSidebar"},{"id":"getting-started/key_concepts","path":"/tools/staticdocs/docs/getting-started/key_concepts","sidebar":"defaultSidebar"},{"id":"getting-started/podman","path":"/tools/staticdocs/docs/getting-started/podman","sidebar":"defaultSidebar"},{"id":"getting-started/requirements","path":"/tools/staticdocs/docs/getting-started/requirements","sidebar":"defaultSidebar"},{"id":"getting-started/upgrading","path":"/tools/staticdocs/docs/getting-started/upgrading","sidebar":"defaultSidebar"},{"id":"guides/bridges","path":"/tools/staticdocs/docs/guides/bridges","sidebar":"defaultSidebar"},{"id":"guides/cfs","path":"/tools/staticdocs/docs/guides/cfs","sidebar":"defaultSidebar"},{"id":"guides/custom-widgets","path":"/tools/staticdocs/docs/guides/custom-widgets","sidebar":"defaultSidebar"},{"id":"guides/exposing_microservices","path":"/tools/staticdocs/docs/guides/exposing_microservices","sidebar":"defaultSidebar"},{"id":"guides/little-endian-bitfields","path":"/tools/staticdocs/docs/guides/little-endian-bitfields","sidebar":"defaultSidebar"},{"id":"guides/local-mode","path":"/tools/staticdocs/docs/guides/local-mode","sidebar":"defaultSidebar"},{"id":"guides/logging","path":"/tools/staticdocs/docs/guides/logging","sidebar":"defaultSidebar"},{"id":"guides/monitoring","path":"/tools/staticdocs/docs/guides/monitoring","sidebar":"defaultSidebar"},{"id":"guides/performance","path":"/tools/staticdocs/docs/guides/performance","sidebar":"defaultSidebar"},{"id":"guides/raspberrypi","path":"/tools/staticdocs/docs/guides/raspberrypi","sidebar":"defaultSidebar"},{"id":"guides/script-writing","path":"/tools/staticdocs/docs/guides/script-writing","sidebar":"defaultSidebar"},{"id":"guides/scripting-api","path":"/tools/staticdocs/docs/guides/scripting-api","sidebar":"defaultSidebar"},{"id":"introduction","path":"/tools/staticdocs/docs/","sidebar":"defaultSidebar"},{"id":"meta/contributing","path":"/tools/staticdocs/docs/meta/contributing","sidebar":"defaultSidebar"},{"id":"meta/licenses","path":"/tools/staticdocs/docs/meta/licenses","sidebar":"defaultSidebar"},{"id":"meta/philosophy","path":"/tools/staticdocs/docs/meta/philosophy","sidebar":"defaultSidebar"},{"id":"meta/xtce","path":"/tools/staticdocs/docs/meta/xtce","sidebar":"defaultSidebar"},{"id":"privacy","path":"/tools/staticdocs/docs/privacy","sidebar":"defaultSidebar"},{"id":"tools/admin","path":"/tools/staticdocs/docs/tools/admin","sidebar":"defaultSidebar"},{"id":"tools/autonomic","path":"/tools/staticdocs/docs/tools/autonomic","sidebar":"defaultSidebar"},{"id":"tools/bucket-explorer","path":"/tools/staticdocs/docs/tools/bucket-explorer","sidebar":"defaultSidebar"},{"id":"tools/calendar","path":"/tools/staticdocs/docs/tools/calendar","sidebar":"defaultSidebar"},{"id":"tools/cmd-sender","path":"/tools/staticdocs/docs/tools/cmd-sender","sidebar":"defaultSidebar"},{"id":"tools/cmd-tlm-server","path":"/tools/staticdocs/docs/tools/cmd-tlm-server","sidebar":"defaultSidebar"},{"id":"tools/command_history","path":"/tools/staticdocs/docs/tools/command_history","sidebar":"defaultSidebar"},{"id":"tools/data-extractor","path":"/tools/staticdocs/docs/tools/data-extractor","sidebar":"defaultSidebar"},{"id":"tools/data-viewer","path":"/tools/staticdocs/docs/tools/data-viewer","sidebar":"defaultSidebar"},{"id":"tools/handbooks","path":"/tools/staticdocs/docs/tools/handbooks","sidebar":"defaultSidebar"},{"id":"tools/limits-monitor","path":"/tools/staticdocs/docs/tools/limits-monitor","sidebar":"defaultSidebar"},{"id":"tools/packet-viewer","path":"/tools/staticdocs/docs/tools/packet-viewer","sidebar":"defaultSidebar"},{"id":"tools/script-runner","path":"/tools/staticdocs/docs/tools/script-runner","sidebar":"defaultSidebar"},{"id":"tools/table-manager","path":"/tools/staticdocs/docs/tools/table-manager","sidebar":"defaultSidebar"},{"id":"tools/tlm-grapher","path":"/tools/staticdocs/docs/tools/tlm-grapher","sidebar":"defaultSidebar"},{"id":"tools/tlm-viewer","path":"/tools/staticdocs/docs/tools/tlm-viewer","sidebar":"defaultSidebar"},{"id":"/getting-started","path":"/tools/staticdocs/docs/getting-started","sidebar":"defaultSidebar"},{"id":"/configuration","path":"/tools/staticdocs/docs/configuration","sidebar":"defaultSidebar"},{"id":"/tools","path":"/tools/staticdocs/docs/tools","sidebar":"defaultSidebar"},{"id":"/guides","path":"/tools/staticdocs/docs/guides","sidebar":"defaultSidebar"},{"id":"/development","path":"/tools/staticdocs/docs/development","sidebar":"defaultSidebar"},{"id":"/meta","path":"/tools/staticdocs/docs/meta","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/tools/staticdocs/docs/","label":"introduction"}}}}],"breadcrumbs":true}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1738736939408.json","lunrIndex":"lunr-index-1738736939408.json"}}}}'),s=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}'),l=n("2627"),c=JSON.parse('{"docusaurusVersion":"3.7.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.7.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.7.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.7.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.7.0"},"docusaurus-plugin-svgr":{"type":"package","name":"@docusaurus/plugin-svgr","version":"3.7.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.7.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.7.0"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"3.6.0"}}}');let u={siteConfig:a.default,siteMetadata:c,globalData:i,i18n:s,codeTranslations:l},d=o.createContext(u);function f(e){let{children:t}=e;return(0,r.jsx)(d.Provider,{value:u,children:t})}},6400:function(e,t,n){"use strict";n.d(t,{Z:()=>m});var r=n("2322"),o=n("2784"),a=n("8724"),i=n("7505"),s=n("6643"),l=n("2427"),c=n("7373");function u(e){let{error:t,tryAgain:n}=e;return(0,r.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,r.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,r.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,r.jsx)(d,{error:t})]})}function d(e){let{error:t}=e,n=(0,s.getErrorCausalChain)(t).map(e=>e.message).join("\n\nCause:\n");return(0,r.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function f(e){let{children:t}=e;return(0,r.jsx)(c.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function p(e){let{error:t,tryAgain:n}=e;return(0,r.jsx)(f,{children:(0,r.jsxs)(m,{fallback:()=>(0,r.jsx)(u,{error:t,tryAgain:n}),children:[(0,r.jsx)(i.Z,{children:(0,r.jsx)("title",{children:"Page Error"})}),(0,r.jsx)(l.Z,{children:(0,r.jsx)(u,{error:t,tryAgain:n})})]})})}let g=e=>(0,r.jsx)(p,{...e});class m extends o.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){let{children:e}=this.props,{error:t}=this.state;return t?(this.props.fallback??g)({error:t,tryAgain:()=>this.setState({error:null})}):e??null}}},8724:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});let r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},7505:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(2322);n(2784);var o=n(2175);function a(e){return(0,r.jsx)(o.ql,{...e})}},8943:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(2322),o=n(2784),a=n(7933),i=n(6643),s=n(9221),l=n(4197),c=n(8724),u=n(3432),d=n(5961);let f=e=>e.startsWith("/"),p=o.forwardRef(function(e,t){let{isNavLink:n,to:p,href:g,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":b,autoAddBaseUrl:y=!0,...v}=e,{siteConfig:w}=(0,s.Z)(),{trailingSlash:k,baseUrl:S}=w,x=w.future.experimental_router,{withBaseUrl:E}=(0,d.Cg)(),_=(0,u.Z)(),C=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,()=>C.current);let T=p||g,A=(0,l.Z)(T),O=T?.replace("pathname://",""),N=void 0!==O?y&&f(O)?E(O):O:void 0;"hash"===x&&N?.startsWith("./")&&(N=N?.slice(1)),N&&A&&(N=(0,i.applyTrailingSlash)(N,{trailingSlash:k,baseUrl:S}));let P=(0,o.useRef)(!1),j=n?a.OL:a.rU,L=c.Z.canUseIntersectionObserver,R=(0,o.useRef)(),I=()=>{P.current||null==N||(window.docusaurus.preload(N),P.current=!0)};(0,o.useEffect)(()=>(!L&&A&&c.Z.canUseDOM&&null!=N&&window.docusaurus.prefetch(N),()=>{L&&R.current&&R.current.disconnect()}),[R,N,L,A]);let F=N?.startsWith("#")??!1,D=!v.target||"_self"===v.target,M=!N||!A||!D||F&&"hash"!==x;b||!F&&M||_.collectLink(N),v.id&&_.collectAnchor(v.id);let z={};return M?(0,r.jsx)("a",{ref:C,href:N,...T&&!A&&{target:"_blank",rel:"noopener noreferrer"},...v,...z}):(0,r.jsx)(j,{...v,onMouseEnter:I,onTouchStart:I,innerRef:e=>{C.current=e,L&&e&&A&&(R.current=new window.IntersectionObserver(t=>{t.forEach(t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=N&&window.docusaurus.prefetch(N))})}),R.current.observe(e))},to:N,...n&&{isActive:h,activeClassName:m},...z})})},7025:function(e,t,n){"use strict";n.d(t,{I:()=>l,Z:()=>c});var r=n("2322"),o=n("2784");function a(e,t){let n=e.split(/(\{\w+\})/).map((e,n)=>{if(n%2==1){let n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e});return n.some(e=>(0,o.isValidElement)(e))?n.map((e,t)=>(0,o.isValidElement)(e)?o.cloneElement(e,{key:t}):e).filter(e=>""!==e):n.join("")}var i=n("2627");function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),Error("The Docusaurus <Translate> component only accept simple string values");let i=s({message:t,id:n});return(0,r.jsx)(r.Fragment,{children:a(i,o)})}},1554:function(e,t,n){"use strict";n.d(t,{m:function(){return r}});let r="default"},4197:function(e,t,n){"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:function(){return o},b:function(){return r}})},5961:function(e,t,n){"use strict";n.d(t,{Cg:function(){return i},ZP:function(){return s}});var r=n(2784),o=n(9221),a=n(4197);function i(){let{siteConfig:e}=(0,o.Z)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router;return{withBaseUrl:(0,r.useCallback)((e,r)=>(function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.b)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;let l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l})({siteUrl:n,baseUrl:t,url:e,options:r,router:i}),[n,t,i])}}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{withBaseUrl:n}=i();return n(e,t)}},3432:function(e,t,n){"use strict";n.d(t,{Z:()=>i}),n("2322");var r=n("2784");let o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},9221:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(2784),o=n(127);function a(){return(0,r.useContext)(o._)}},5367:function(e,t,n){"use strict";n.d(t,{OD:function(){return a},eZ:function(){return i}});var r=n(9221),o=n(1554);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(){let{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.m,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=a(e),i=r?.[t];if(!i&&n.failfast)throw Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},61:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(2784),o=n(7288);function a(){return(0,r.useContext)(o._)}},4294:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(2784);let o=n(8724).Z.canUseDOM?r.useLayoutEffect:r.useEffect},316:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});let r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){let t={};return!function e(n,o){Object.entries(n).forEach(n=>{let[a,i]=n,s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i})}(e),t}},7373:function(e,t,n){"use strict";n.d(t,{_:function(){return a},z:function(){return i}});var r=n(2322),o=n(2784);let a=o.createContext(null);function i(e){let{children:t,value:n}=e,i=o.useContext(a),s=(0,o.useMemo)(()=>(function(e){let{parent:t,value:n}=e;if(!t){if(n){if(!("plugin"in n))throw Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute")}else throw Error("Unexpected: no Docusaurus route context found");return n}let r={...t.data,...n?.data};return{plugin:t.plugin,data:r}})({parent:i,value:n}),[i,n]);return(0,r.jsx)(a.Provider,{value:s,children:t})}},8226:function(e,t,n){"use strict";n.d(t,{J:function(){return y},L5:function(){return b}});var r=n(2322),o=n(2784),a=n(6128),i=n(1554),s=n(2408),l=n(9889),c=n(7327);let u=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,l.WA)(u(e),{persistence:t}).set(n)},f=(e,t)=>(0,l.WA)(u(e),{persistence:t}).get(),p=(e,t)=>{(0,l.WA)(u(e),{persistence:t}).del()},g=e=>Object.fromEntries(e.map(e=>[e,{preferredVersionName:null}])),m=o.createContext(null);function h(e){let{children:t}=e,n=function(){let e=(0,a._r)(),t=(0,s.L)().docs.versionPersistence,n=(0,o.useMemo)(()=>Object.keys(e),[e]),[r,i]=(0,o.useState)(()=>g(n));return(0,o.useEffect)(()=>{i(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;return Object.fromEntries(t.map(e=>[e,function(e){let t=f(e,n);return r[e].versions.some(e=>e.name===t)?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}(e)]))}({allDocsData:e,versionPersistence:t,pluginIds:n}))},[e,t,n]),[r,(0,o.useMemo)(()=>({savePreferredVersion:function(e,n){d(e,t,n),i(t=>({...t,[e]:{preferredVersionName:n}}))}}),[t])]}();return(0,r.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return(0,r.jsx)(h,{children:t})}function y(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.m,t=(0,a.zh)(e),[n,r]=function(){let e=(0,o.useContext)(m);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find(e=>e.name===s)??null,savePreferredVersionName:(0,o.useCallback)(t=>{r.savePreferredVersion(e,t)},[r,e])}}},4224:function(e,t,n){"use strict";n.d(t,{V:function(){return c},b:function(){return l}});var r=n(2322),o=n(2784),a=n(7327);let i=Symbol("EmptyContext"),s=o.createContext(i);function l(e){let{children:t,name:n,items:a}=e,i=(0,o.useMemo)(()=>n&&a?{name:n,items:a}:null,[n,a]);return(0,r.jsx)(s.Provider,{value:i,children:t})}function c(){let e=(0,o.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},6319:function(e,t,n){"use strict";n.d(t,{vY:()=>x,s1:()=>w,LM:()=>p,MN:()=>_,_F:()=>b,oz:()=>S,jA:()=>g,f:()=>y,xz:()=>f,SN:()=>E,lO:()=>k});var r=n("2784"),o=n("7267"),a=n("9702"),i=n("6128"),s=n("4918");function l(e){return Array.from(new Set(e))}var c=n("8226"),u=n("1530"),d=n("4224");function f(e){let t=(0,u.E)();if(!e)return;let n=t.docs[e];if(!n)throw Error(`no version doc found by id=${e}`);return n}function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(let t of e.items){let e=p(t);if(e)return e}}(e):void 0:e.href}function g(){let{pathname:e}=(0,o.TH)(),t=(0,d.V)();if(!t)throw Error("Unexpected: cant find current sidebar in context");let n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}let m=(e,t)=>void 0!==e&&(0,s.Mg)(e,t),h=(e,t)=>e.some(e=>b(e,t));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function y(e,t){return(0,r.useMemo)(()=>e.filter(e=>(function e(t,n){switch(t.type){case"category":return b(t,n)||void 0!==t.href&&!t.linkUnlisted||t.items.some(t=>e(t,n));case"link":return!t.unlisted||b(t,n);default:return!0}})(e,t)),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e,o=[];return!function e(t){for(let a of t)if("category"===a.type&&((0,s.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.Mg)(a.href,n))return r&&"category"!==a.type||o.unshift(a),!0;return!1}(t),o}function w(){let e=(0,d.V)(),{pathname:t}=(0,o.TH)();return!1!==i.gA()?.pluginData.breadcrumbs&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){let{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,c.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)(()=>l([t,n,o].filter(Boolean)),[t,n,o])}function S(e,t){let n=k(t);return(0,r.useMemo)(()=>{let t=n.flatMap(e=>e.sidebars?Object.entries(e.sidebars):[]),r=t.find(t=>t[0]===e);if(!r)throw Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map(e=>e.name).join(", ")}".
|
27
|
+
`})})})}function D(){let{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,f.TH)();return t&&n===e?(0,r.jsx)(F,{}):null}function M(){let{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,b.ZP)(e),{htmlLang:s,direction:l}=a[o];return(0,r.jsxs)(m.Z,{children:[(0,r.jsx)("html",{lang:s,dir:l}),(0,r.jsx)("title",{children:t}),(0,r.jsx)("meta",{property:"og:title",content:t}),(0,r.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,r.jsx)("link",{rel:"icon",href:i})]})}var z=n("6400"),$=n("61");function B(){let e=(0,$.Z)();return(0,r.jsx)(m.Z,{children:(0,r.jsx)("html",{"data-has-hydrated":e})})}let U=(0,p.H)(d.Z);function H(){let e=function(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,p.f)(d.Z,e.pathname).some(e=>{let{route:t}=e;return!0===t.exact}))return T.set(e.pathname,e.pathname),e;let t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,f.TH)());return(0,r.jsx)(R,{location:e,children:U})}var Z=n("7138");let W=!function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise((t,n)=>{let r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)})}:function(e){return new Promise((t,n)=>{if("undefined"==typeof document){n();return}let r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();let o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)})};var V=n("316");let q=new Set,G=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,K=e=>!Y()&&!G.has(e)&&!q.has(e),Q=e=>!Y()&&!G.has(e),X=e=>Object.entries(Z).filter(t=>{let[n]=t;return n.replace(/-[^-]+$/,"")===e}).flatMap(e=>{let[,t]=e;return Object.values((0,V.Z)(t))}),J=Object.freeze({prefetch:e=>!!K(e)&&(q.add(e),Promise.all((0,p.f)(d.Z,e).flatMap(e=>X(e.route.path)).map(e=>{let t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch(()=>{}):Promise.resolve()}))),preload:e=>!!Q(e)&&(G.add(e),L(e))});if(e=n.hmd(e),c.Z.canUseDOM){window.docusaurus=J;let t=document.getElementById("__docusaurus"),n=(0,r.jsx)(i.B6,{children:(0,r.jsx)(function(e){let{children:t}=e;return"hash"===l.default.future.experimental_router?(0,r.jsx)(s.UT,{children:t}):(0,r.jsx)(s.VK,{children:t})},{children:(0,r.jsx)(function(){return(0,r.jsx)(z.Z,{children:(0,r.jsx)(O.M,{children:(0,r.jsxs)(A.t,{children:[(0,r.jsxs)(g,{children:[(0,r.jsx)(M,{}),(0,r.jsx)(C,{}),(0,r.jsx)(D,{}),(0,r.jsx)(H,{})]}),(0,r.jsx)(B,{})]})})})},{})})}),c=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},u=()=>{if(window.docusaurusRoot){window.docusaurusRoot.render(n);return}window.docusaurusRoot=a.hydrateRoot(t,n,{onRecoverableError:c})};L(window.location.pathname).then(()=>{(0,o.startTransition)(u)}),e.hot&&e.hot.accept()}},127:function(e,t,n){"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n("2322"),o=n("2784"),a=n("5150"),i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/tools/staticdocs/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/tools/staticdocs/docs","mainDocId":"introduction","docs":[{"id":"configuration/accessors","path":"/tools/staticdocs/docs/configuration/accessors","sidebar":"defaultSidebar"},{"id":"configuration/command","path":"/tools/staticdocs/docs/configuration/command","sidebar":"defaultSidebar"},{"id":"configuration/format","path":"/tools/staticdocs/docs/configuration/format","sidebar":"defaultSidebar"},{"id":"configuration/interfaces","path":"/tools/staticdocs/docs/configuration/interfaces","sidebar":"defaultSidebar"},{"id":"configuration/plugins","path":"/tools/staticdocs/docs/configuration/plugins","sidebar":"defaultSidebar"},{"id":"configuration/protocols","path":"/tools/staticdocs/docs/configuration/protocols","sidebar":"defaultSidebar"},{"id":"configuration/ssl-tls","path":"/tools/staticdocs/docs/configuration/ssl-tls","sidebar":"defaultSidebar"},{"id":"configuration/table","path":"/tools/staticdocs/docs/configuration/table","sidebar":"defaultSidebar"},{"id":"configuration/target","path":"/tools/staticdocs/docs/configuration/target","sidebar":"defaultSidebar"},{"id":"configuration/telemetry","path":"/tools/staticdocs/docs/configuration/telemetry","sidebar":"defaultSidebar"},{"id":"configuration/telemetry-screens","path":"/tools/staticdocs/docs/configuration/telemetry-screens","sidebar":"defaultSidebar"},{"id":"development/curl","path":"/tools/staticdocs/docs/development/curl","sidebar":"defaultSidebar"},{"id":"development/developing","path":"/tools/staticdocs/docs/development/developing","sidebar":"defaultSidebar"},{"id":"development/json-api","path":"/tools/staticdocs/docs/development/json-api","sidebar":"defaultSidebar"},{"id":"development/log-structure","path":"/tools/staticdocs/docs/development/log-structure","sidebar":"defaultSidebar"},{"id":"development/roadmap","path":"/tools/staticdocs/docs/development/roadmap","sidebar":"defaultSidebar"},{"id":"development/streaming-api","path":"/tools/staticdocs/docs/development/streaming-api","sidebar":"defaultSidebar"},{"id":"development/testing","path":"/tools/staticdocs/docs/development/testing","sidebar":"defaultSidebar"},{"id":"getting-started/generators","path":"/tools/staticdocs/docs/getting-started/generators","sidebar":"defaultSidebar"},{"id":"getting-started/gettingstarted","path":"/tools/staticdocs/docs/getting-started/gettingstarted","sidebar":"defaultSidebar"},{"id":"getting-started/installation","path":"/tools/staticdocs/docs/getting-started/installation","sidebar":"defaultSidebar"},{"id":"getting-started/key_concepts","path":"/tools/staticdocs/docs/getting-started/key_concepts","sidebar":"defaultSidebar"},{"id":"getting-started/podman","path":"/tools/staticdocs/docs/getting-started/podman","sidebar":"defaultSidebar"},{"id":"getting-started/requirements","path":"/tools/staticdocs/docs/getting-started/requirements","sidebar":"defaultSidebar"},{"id":"getting-started/upgrading","path":"/tools/staticdocs/docs/getting-started/upgrading","sidebar":"defaultSidebar"},{"id":"guides/bridges","path":"/tools/staticdocs/docs/guides/bridges","sidebar":"defaultSidebar"},{"id":"guides/cfs","path":"/tools/staticdocs/docs/guides/cfs","sidebar":"defaultSidebar"},{"id":"guides/custom-widgets","path":"/tools/staticdocs/docs/guides/custom-widgets","sidebar":"defaultSidebar"},{"id":"guides/exposing_microservices","path":"/tools/staticdocs/docs/guides/exposing_microservices","sidebar":"defaultSidebar"},{"id":"guides/little-endian-bitfields","path":"/tools/staticdocs/docs/guides/little-endian-bitfields","sidebar":"defaultSidebar"},{"id":"guides/local-mode","path":"/tools/staticdocs/docs/guides/local-mode","sidebar":"defaultSidebar"},{"id":"guides/logging","path":"/tools/staticdocs/docs/guides/logging","sidebar":"defaultSidebar"},{"id":"guides/monitoring","path":"/tools/staticdocs/docs/guides/monitoring","sidebar":"defaultSidebar"},{"id":"guides/performance","path":"/tools/staticdocs/docs/guides/performance","sidebar":"defaultSidebar"},{"id":"guides/raspberrypi","path":"/tools/staticdocs/docs/guides/raspberrypi","sidebar":"defaultSidebar"},{"id":"guides/script-writing","path":"/tools/staticdocs/docs/guides/script-writing","sidebar":"defaultSidebar"},{"id":"guides/scripting-api","path":"/tools/staticdocs/docs/guides/scripting-api","sidebar":"defaultSidebar"},{"id":"introduction","path":"/tools/staticdocs/docs/","sidebar":"defaultSidebar"},{"id":"meta/contributing","path":"/tools/staticdocs/docs/meta/contributing","sidebar":"defaultSidebar"},{"id":"meta/licenses","path":"/tools/staticdocs/docs/meta/licenses","sidebar":"defaultSidebar"},{"id":"meta/philosophy","path":"/tools/staticdocs/docs/meta/philosophy","sidebar":"defaultSidebar"},{"id":"meta/xtce","path":"/tools/staticdocs/docs/meta/xtce","sidebar":"defaultSidebar"},{"id":"privacy","path":"/tools/staticdocs/docs/privacy","sidebar":"defaultSidebar"},{"id":"tools/admin","path":"/tools/staticdocs/docs/tools/admin","sidebar":"defaultSidebar"},{"id":"tools/autonomic","path":"/tools/staticdocs/docs/tools/autonomic","sidebar":"defaultSidebar"},{"id":"tools/bucket-explorer","path":"/tools/staticdocs/docs/tools/bucket-explorer","sidebar":"defaultSidebar"},{"id":"tools/calendar","path":"/tools/staticdocs/docs/tools/calendar","sidebar":"defaultSidebar"},{"id":"tools/cmd-sender","path":"/tools/staticdocs/docs/tools/cmd-sender","sidebar":"defaultSidebar"},{"id":"tools/cmd-tlm-server","path":"/tools/staticdocs/docs/tools/cmd-tlm-server","sidebar":"defaultSidebar"},{"id":"tools/command_history","path":"/tools/staticdocs/docs/tools/command_history","sidebar":"defaultSidebar"},{"id":"tools/data-extractor","path":"/tools/staticdocs/docs/tools/data-extractor","sidebar":"defaultSidebar"},{"id":"tools/data-viewer","path":"/tools/staticdocs/docs/tools/data-viewer","sidebar":"defaultSidebar"},{"id":"tools/handbooks","path":"/tools/staticdocs/docs/tools/handbooks","sidebar":"defaultSidebar"},{"id":"tools/limits-monitor","path":"/tools/staticdocs/docs/tools/limits-monitor","sidebar":"defaultSidebar"},{"id":"tools/packet-viewer","path":"/tools/staticdocs/docs/tools/packet-viewer","sidebar":"defaultSidebar"},{"id":"tools/script-runner","path":"/tools/staticdocs/docs/tools/script-runner","sidebar":"defaultSidebar"},{"id":"tools/table-manager","path":"/tools/staticdocs/docs/tools/table-manager","sidebar":"defaultSidebar"},{"id":"tools/tlm-grapher","path":"/tools/staticdocs/docs/tools/tlm-grapher","sidebar":"defaultSidebar"},{"id":"tools/tlm-viewer","path":"/tools/staticdocs/docs/tools/tlm-viewer","sidebar":"defaultSidebar"},{"id":"/getting-started","path":"/tools/staticdocs/docs/getting-started","sidebar":"defaultSidebar"},{"id":"/configuration","path":"/tools/staticdocs/docs/configuration","sidebar":"defaultSidebar"},{"id":"/tools","path":"/tools/staticdocs/docs/tools","sidebar":"defaultSidebar"},{"id":"/guides","path":"/tools/staticdocs/docs/guides","sidebar":"defaultSidebar"},{"id":"/development","path":"/tools/staticdocs/docs/development","sidebar":"defaultSidebar"},{"id":"/meta","path":"/tools/staticdocs/docs/meta","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/tools/staticdocs/docs/","label":"introduction"}}}}],"breadcrumbs":true}},"docusaurus-lunr-search":{"default":{"fileNames":{"searchDoc":"search-doc-1740870259469.json","lunrIndex":"lunr-index-1740870259469.json"}}}}'),s=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}'),l=n("2627"),c=JSON.parse('{"docusaurusVersion":"3.7.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.7.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.7.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.7.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.7.0"},"docusaurus-plugin-svgr":{"type":"package","name":"@docusaurus/plugin-svgr","version":"3.7.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.7.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.7.0"},"docusaurus-lunr-search":{"type":"package","name":"docusaurus-lunr-search","version":"3.6.0"}}}');let u={siteConfig:a.default,siteMetadata:c,globalData:i,i18n:s,codeTranslations:l},d=o.createContext(u);function f(e){let{children:t}=e;return(0,r.jsx)(d.Provider,{value:u,children:t})}},6400:function(e,t,n){"use strict";n.d(t,{Z:()=>m});var r=n("2322"),o=n("2784"),a=n("8724"),i=n("7505"),s=n("6643"),l=n("2427"),c=n("7373");function u(e){let{error:t,tryAgain:n}=e;return(0,r.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,r.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,r.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,r.jsx)(d,{error:t})]})}function d(e){let{error:t}=e,n=(0,s.getErrorCausalChain)(t).map(e=>e.message).join("\n\nCause:\n");return(0,r.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function f(e){let{children:t}=e;return(0,r.jsx)(c.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function p(e){let{error:t,tryAgain:n}=e;return(0,r.jsx)(f,{children:(0,r.jsxs)(m,{fallback:()=>(0,r.jsx)(u,{error:t,tryAgain:n}),children:[(0,r.jsx)(i.Z,{children:(0,r.jsx)("title",{children:"Page Error"})}),(0,r.jsx)(l.Z,{children:(0,r.jsx)(u,{error:t,tryAgain:n})})]})})}let g=e=>(0,r.jsx)(p,{...e});class m extends o.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){let{children:e}=this.props,{error:t}=this.state;return t?(this.props.fallback??g)({error:t,tryAgain:()=>this.setState({error:null})}):e??null}}},8724:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});let r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},7505:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(2322);n(2784);var o=n(2175);function a(e){return(0,r.jsx)(o.ql,{...e})}},8943:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(2322),o=n(2784),a=n(7933),i=n(6643),s=n(9221),l=n(4197),c=n(8724),u=n(3432),d=n(5961);let f=e=>e.startsWith("/"),p=o.forwardRef(function(e,t){let{isNavLink:n,to:p,href:g,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":b,autoAddBaseUrl:y=!0,...v}=e,{siteConfig:w}=(0,s.Z)(),{trailingSlash:k,baseUrl:S}=w,x=w.future.experimental_router,{withBaseUrl:E}=(0,d.Cg)(),_=(0,u.Z)(),C=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,()=>C.current);let T=p||g,A=(0,l.Z)(T),O=T?.replace("pathname://",""),N=void 0!==O?y&&f(O)?E(O):O:void 0;"hash"===x&&N?.startsWith("./")&&(N=N?.slice(1)),N&&A&&(N=(0,i.applyTrailingSlash)(N,{trailingSlash:k,baseUrl:S}));let P=(0,o.useRef)(!1),j=n?a.OL:a.rU,L=c.Z.canUseIntersectionObserver,R=(0,o.useRef)(),I=()=>{P.current||null==N||(window.docusaurus.preload(N),P.current=!0)};(0,o.useEffect)(()=>(!L&&A&&c.Z.canUseDOM&&null!=N&&window.docusaurus.prefetch(N),()=>{L&&R.current&&R.current.disconnect()}),[R,N,L,A]);let F=N?.startsWith("#")??!1,D=!v.target||"_self"===v.target,M=!N||!A||!D||F&&"hash"!==x;b||!F&&M||_.collectLink(N),v.id&&_.collectAnchor(v.id);let z={};return M?(0,r.jsx)("a",{ref:C,href:N,...T&&!A&&{target:"_blank",rel:"noopener noreferrer"},...v,...z}):(0,r.jsx)(j,{...v,onMouseEnter:I,onTouchStart:I,innerRef:e=>{C.current=e,L&&e&&A&&(R.current=new window.IntersectionObserver(t=>{t.forEach(t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=N&&window.docusaurus.prefetch(N))})}),R.current.observe(e))},to:N,...n&&{isActive:h,activeClassName:m},...z})})},7025:function(e,t,n){"use strict";n.d(t,{I:()=>l,Z:()=>c});var r=n("2322"),o=n("2784");function a(e,t){let n=e.split(/(\{\w+\})/).map((e,n)=>{if(n%2==1){let n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e});return n.some(e=>(0,o.isValidElement)(e))?n.map((e,t)=>(0,o.isValidElement)(e)?o.cloneElement(e,{key:t}):e).filter(e=>""!==e):n.join("")}var i=n("2627");function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),Error("The Docusaurus <Translate> component only accept simple string values");let i=s({message:t,id:n});return(0,r.jsx)(r.Fragment,{children:a(i,o)})}},1554:function(e,t,n){"use strict";n.d(t,{m:function(){return r}});let r="default"},4197:function(e,t,n){"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:function(){return o},b:function(){return r}})},5961:function(e,t,n){"use strict";n.d(t,{Cg:function(){return i},ZP:function(){return s}});var r=n(2784),o=n(9221),a=n(4197);function i(){let{siteConfig:e}=(0,o.Z)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router;return{withBaseUrl:(0,r.useCallback)((e,r)=>(function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.b)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;let l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l})({siteUrl:n,baseUrl:t,url:e,options:r,router:i}),[n,t,i])}}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{withBaseUrl:n}=i();return n(e,t)}},3432:function(e,t,n){"use strict";n.d(t,{Z:()=>i}),n("2322");var r=n("2784");let o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},9221:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(2784),o=n(127);function a(){return(0,r.useContext)(o._)}},5367:function(e,t,n){"use strict";n.d(t,{OD:function(){return a},eZ:function(){return i}});var r=n(9221),o=n(1554);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=function(){let{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.m,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=a(e),i=r?.[t];if(!i&&n.failfast)throw Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},61:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(2784),o=n(7288);function a(){return(0,r.useContext)(o._)}},4294:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(2784);let o=n(8724).Z.canUseDOM?r.useLayoutEffect:r.useEffect},316:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});let r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){let t={};return!function e(n,o){Object.entries(n).forEach(n=>{let[a,i]=n,s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i})}(e),t}},7373:function(e,t,n){"use strict";n.d(t,{_:function(){return a},z:function(){return i}});var r=n(2322),o=n(2784);let a=o.createContext(null);function i(e){let{children:t,value:n}=e,i=o.useContext(a),s=(0,o.useMemo)(()=>(function(e){let{parent:t,value:n}=e;if(!t){if(n){if(!("plugin"in n))throw Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute")}else throw Error("Unexpected: no Docusaurus route context found");return n}let r={...t.data,...n?.data};return{plugin:t.plugin,data:r}})({parent:i,value:n}),[i,n]);return(0,r.jsx)(a.Provider,{value:s,children:t})}},8226:function(e,t,n){"use strict";n.d(t,{J:function(){return y},L5:function(){return b}});var r=n(2322),o=n(2784),a=n(6128),i=n(1554),s=n(2408),l=n(9889),c=n(7327);let u=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,l.WA)(u(e),{persistence:t}).set(n)},f=(e,t)=>(0,l.WA)(u(e),{persistence:t}).get(),p=(e,t)=>{(0,l.WA)(u(e),{persistence:t}).del()},g=e=>Object.fromEntries(e.map(e=>[e,{preferredVersionName:null}])),m=o.createContext(null);function h(e){let{children:t}=e,n=function(){let e=(0,a._r)(),t=(0,s.L)().docs.versionPersistence,n=(0,o.useMemo)(()=>Object.keys(e),[e]),[r,i]=(0,o.useState)(()=>g(n));return(0,o.useEffect)(()=>{i(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;return Object.fromEntries(t.map(e=>[e,function(e){let t=f(e,n);return r[e].versions.some(e=>e.name===t)?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}(e)]))}({allDocsData:e,versionPersistence:t,pluginIds:n}))},[e,t,n]),[r,(0,o.useMemo)(()=>({savePreferredVersion:function(e,n){d(e,t,n),i(t=>({...t,[e]:{preferredVersionName:n}}))}}),[t])]}();return(0,r.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return(0,r.jsx)(h,{children:t})}function y(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.m,t=(0,a.zh)(e),[n,r]=function(){let e=(0,o.useContext)(m);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find(e=>e.name===s)??null,savePreferredVersionName:(0,o.useCallback)(t=>{r.savePreferredVersion(e,t)},[r,e])}}},4224:function(e,t,n){"use strict";n.d(t,{V:function(){return c},b:function(){return l}});var r=n(2322),o=n(2784),a=n(7327);let i=Symbol("EmptyContext"),s=o.createContext(i);function l(e){let{children:t,name:n,items:a}=e,i=(0,o.useMemo)(()=>n&&a?{name:n,items:a}:null,[n,a]);return(0,r.jsx)(s.Provider,{value:i,children:t})}function c(){let e=(0,o.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},6319:function(e,t,n){"use strict";n.d(t,{vY:()=>x,s1:()=>w,LM:()=>p,MN:()=>_,_F:()=>b,oz:()=>S,jA:()=>g,f:()=>y,xz:()=>f,SN:()=>E,lO:()=>k});var r=n("2784"),o=n("7267"),a=n("9702"),i=n("6128"),s=n("4918");function l(e){return Array.from(new Set(e))}var c=n("8226"),u=n("1530"),d=n("4224");function f(e){let t=(0,u.E)();if(!e)return;let n=t.docs[e];if(!n)throw Error(`no version doc found by id=${e}`);return n}function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(let t of e.items){let e=p(t);if(e)return e}}(e):void 0:e.href}function g(){let{pathname:e}=(0,o.TH)(),t=(0,d.V)();if(!t)throw Error("Unexpected: cant find current sidebar in context");let n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}let m=(e,t)=>void 0!==e&&(0,s.Mg)(e,t),h=(e,t)=>e.some(e=>b(e,t));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function y(e,t){return(0,r.useMemo)(()=>e.filter(e=>(function e(t,n){switch(t.type){case"category":return b(t,n)||void 0!==t.href&&!t.linkUnlisted||t.items.some(t=>e(t,n));case"link":return!t.unlisted||b(t,n);default:return!0}})(e,t)),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e,o=[];return!function e(t){for(let a of t)if("category"===a.type&&((0,s.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.Mg)(a.href,n))return r&&"category"!==a.type||o.unshift(a),!0;return!1}(t),o}function w(){let e=(0,d.V)(),{pathname:t}=(0,o.TH)();return!1!==i.gA()?.pluginData.breadcrumbs&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){let{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,c.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)(()=>l([t,n,o].filter(Boolean)),[t,n,o])}function S(e,t){let n=k(t);return(0,r.useMemo)(()=>{let t=n.flatMap(e=>e.sidebars?Object.entries(e.sidebars):[]),r=t.find(t=>t[0]===e);if(!r)throw Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map(e=>e.name).join(", ")}".
|
28
28
|
Available sidebar ids are:
|
29
29
|
- ${t.map(e=>e[0]).join("\n- ")}`);return r[1]},[e,n])}function x(e,t){let n=k(t);return(0,r.useMemo)(()=>{let t=n.flatMap(e=>e.docs),r=t.find(t=>t.id===e);if(!r){if(n.flatMap(e=>e.draftIds).includes(e))return null;throw Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map(e=>e.name).join(", ")}".
|
30
30
|
Available doc ids are:
|
@@ -1 +1 @@
|
|
1
|
-
(()=>{"use strict";var e,c,f,t,a,n,r,b,d={},o={};function u(e){var c=o[e];if(void 0!==c)return c.exports;var f=o[e]={id:e,loaded:!1,exports:{}};return d[e].call(f.exports,f,f.exports,u),f.loaded=!0,f.exports}u.m=d,u.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(c,{a:c}),c},c=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},u.t=function(f,t){if(1&t&&(f=this(f)),8&t||"object"==typeof f&&f&&(4&t&&f.__esModule||16&t&&"function"==typeof f.then))return f;var a=Object.create(null);u.r(a);var n={};e=e||[null,c({}),c([]),c(c)];for(var r=2&t&&f;"object"==typeof r&&!~e.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach(function(e){n[e]=function(){return f[e]}});return n.default=function(){return f},u.d(a,n),a},u.d=function(e,c){for(var f in c)u.o(c,f)&&!u.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:c[f]})},u.f={},u.e=function(e){return Promise.all(Object.keys(u.f).reduce(function(c,f){return u.f[f](e,c),c},[]))},u.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},u.u=function(e){return"assets/js/"+(({1029:"dc5f7beb",1131:"630e5448",1286:"53ca7c5b",1364:"a9987364",1417:"6b65133b",1536:"c2598f55",1615:"99581c43",1686:"ce89ef36",1848:"5e3ed378",2278:"9d6e81d0",2358:"b4596165",2415:"cd879be4",2434:"7f5b2696",2448:"75e64983",2977:"d24bf9b6",3041:"6b210247",3054:"d57a4b5d",314:"bd0034eb",3350:"13c1b4e4",3380:"26b8abb2",3522:"5b233ba7",3649:"867640d5",3658:"dfbae5fd",3800:"aa6b6c1b",3824:"97535711",3927:"6831b732",4045:"0ff569c9",442:"2047b354",4456:"89e76475",4521:"fd886806",4592:"75897369",4593:"40365d27",4706:"d1b923aa",4737:"db8fa1d0",4958:"019369f3",4986:"cb8c3f08",5162:"31436304",5360:"d5d77c37",5390:"6f92e431",5712:"62df909c",5878:"9fb6059a",5996:"1e02e6a3",602:"411898ad",6449:"8f7843ee",659:"5bc719f6",6603:"078dbab0",6649:"c5388ca4",6868:"d66bf9c0",7072:"80c97f38",7243:"0f5d161c",7258:"5c6ce5ec",7306:"c24eae19",7471:"54d0d530",7495:"058ffc22",7637:"2bb7bf90",7739:"0686a885",7810:"3dd7ef3b",8156:"9424f0b3",8197:"b6d70f94",8501:"f15615f1",8519:"a677c089",8530:"13196248",8593:"d8ca4191",8713:"ebec1ccb",8847:"42170351",8884:"e501b0d1",9146:"22b3ac48",9148:"d9b92eba",9278:"72c6d8a8",9474:"b9f60ba6",9564:"dbe31111",9607:"103cc3be",9879:"5fe211ef",9880:"696b4199",9945:"43652efd",9997:"d1bfc316"})[e]||e)+"."+({1029:"9e4e6681",1131:"699a9dec",1286:"fe331a71",1364:"81e9c91d",1417:"0376a397",1536:"812cdcd1",1615:"5e55992d",1686:"1d76e86a",1848:"8b51f7c0",2278:"
|
1
|
+
(()=>{"use strict";var e,c,f,t,a,n,r,b,d={},o={};function u(e){var c=o[e];if(void 0!==c)return c.exports;var f=o[e]={id:e,loaded:!1,exports:{}};return d[e].call(f.exports,f,f.exports,u),f.loaded=!0,f.exports}u.m=d,u.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(c,{a:c}),c},c=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},u.t=function(f,t){if(1&t&&(f=this(f)),8&t||"object"==typeof f&&f&&(4&t&&f.__esModule||16&t&&"function"==typeof f.then))return f;var a=Object.create(null);u.r(a);var n={};e=e||[null,c({}),c([]),c(c)];for(var r=2&t&&f;"object"==typeof r&&!~e.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach(function(e){n[e]=function(){return f[e]}});return n.default=function(){return f},u.d(a,n),a},u.d=function(e,c){for(var f in c)u.o(c,f)&&!u.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:c[f]})},u.f={},u.e=function(e){return Promise.all(Object.keys(u.f).reduce(function(c,f){return u.f[f](e,c),c},[]))},u.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},u.u=function(e){return"assets/js/"+(({1029:"dc5f7beb",1131:"630e5448",1286:"53ca7c5b",1364:"a9987364",1417:"6b65133b",1536:"c2598f55",1615:"99581c43",1686:"ce89ef36",1848:"5e3ed378",2278:"9d6e81d0",2358:"b4596165",2415:"cd879be4",2434:"7f5b2696",2448:"75e64983",2977:"d24bf9b6",3041:"6b210247",3054:"d57a4b5d",314:"bd0034eb",3350:"13c1b4e4",3380:"26b8abb2",3522:"5b233ba7",3649:"867640d5",3658:"dfbae5fd",3800:"aa6b6c1b",3824:"97535711",3927:"6831b732",4045:"0ff569c9",442:"2047b354",4456:"89e76475",4521:"fd886806",4592:"75897369",4593:"40365d27",4706:"d1b923aa",4737:"db8fa1d0",4958:"019369f3",4986:"cb8c3f08",5162:"31436304",5360:"d5d77c37",5390:"6f92e431",5712:"62df909c",5878:"9fb6059a",5996:"1e02e6a3",602:"411898ad",6449:"8f7843ee",659:"5bc719f6",6603:"078dbab0",6649:"c5388ca4",6868:"d66bf9c0",7072:"80c97f38",7243:"0f5d161c",7258:"5c6ce5ec",7306:"c24eae19",7471:"54d0d530",7495:"058ffc22",7637:"2bb7bf90",7739:"0686a885",7810:"3dd7ef3b",8156:"9424f0b3",8197:"b6d70f94",8501:"f15615f1",8519:"a677c089",8530:"13196248",8593:"d8ca4191",8713:"ebec1ccb",8847:"42170351",8884:"e501b0d1",9146:"22b3ac48",9148:"d9b92eba",9278:"72c6d8a8",9474:"b9f60ba6",9564:"dbe31111",9607:"103cc3be",9879:"5fe211ef",9880:"696b4199",9945:"43652efd",9997:"d1bfc316"})[e]||e)+"."+({1029:"9e4e6681",1131:"699a9dec",1286:"fe331a71",1364:"81e9c91d",1417:"0376a397",1536:"812cdcd1",1615:"5e55992d",1686:"1d76e86a",1848:"8b51f7c0",2278:"44e2d544",2358:"c648533a",2415:"59af1749",2434:"72e3b019",2448:"81988bef",2977:"9fef8263",3041:"ef28d4e5",3054:"c74b62b1",314:"8ad39448",3350:"eb5250f4",3380:"7f8d4cb0",3522:"2ea0179c",3649:"2c0fa6d9",3658:"3959d626",3800:"08f58887",3824:"78660098",3927:"0a867cbc",3969:"afdd070b",4045:"f81b787b",442:"d91f6c3e",4456:"a76d0072",4521:"124ffe26",4592:"522ccdd7",4593:"5ed2e9b5",4706:"a73e7e79",4737:"94b76b52",4958:"1a6a0205",4986:"07d1c9e9",5162:"a6b2eb4a",5205:"c6f31e57",5328:"3e2a53eb",5360:"e812e6e7",5390:"d2ce2753",5712:"dd5f3a0c",5761:"e7fabbc9",5878:"821f7504",5996:"f477eca7",602:"f7fc4d80",6449:"abe30983",651:"a043d7b1",659:"b84c55e3",6603:"5515d5e3",6649:"32f8f561",6868:"842d2efa",7072:"607160d3",7243:"7697df48",7258:"67d1d92e",7306:"aaae7796",7471:"ef91ba12",7495:"5cfabd67",7637:"4051cf46",7739:"0e2ea47d",7810:"c3455b97",8156:"96e6dac4",8197:"7813125e",8501:"49804e96",8519:"18f98b70",8530:"ea83002e",8593:"f5da7c6d",8713:"f938ebaa",8847:"fbc05869",8884:"d3a1e4bc",9146:"0df9587b",9148:"34e63ba6",9278:"b6fcfc30",9357:"9a7e89b5",9474:"4c0bb1dd",9564:"75e9fc53",9607:"e7943c80",9879:"63b46202",9880:"2a7ff897",9945:"60fa883f",9997:"a58b9bbd"})[e]+".js"},u.miniCssF=function(e){return""+e+".css"},u.h=function(){return"3ce4af15bf5d20e1"},u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},f={},t="docs-openc3-com:",u.l=function(e,c,a,n){if(f[e]){f[e].push(c);return}if(void 0!==a)for(var r,b,d=document.getElementsByTagName("script"),o=0;o<d.length;o++){var i=d[o];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")==t+a){r=i;break}}r||(b=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,u.nc&&r.setAttribute("nonce",u.nc),r.setAttribute("data-webpack",t+a),r.src=e),f[e]=[c];var s=function(c,t){r.onerror=r.onload=null,clearTimeout(l);var a=f[e];if(delete f[e],r.parentNode&&r.parentNode.removeChild(r),a&&a.forEach(function(e){return e(t)}),c)return c(t)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=s.bind(null,r.onerror),r.onload=s.bind(null,r.onload),b&&document.head.appendChild(r)},u.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a=[],u.O=function(e,c,f,t){if(c){t=t||0;for(var n=a.length;n>0&&a[n-1][2]>t;n--)a[n]=a[n-1];a[n]=[c,f,t];return}for(var r=1/0,n=0;n<a.length;n++){for(var c=a[n][0],f=a[n][1],t=a[n][2],b=!0,d=0;d<c.length;d++)(!1&t||r>=t)&&Object.keys(u.O).every(function(e){return u.O[e](c[d])})?c.splice(d--,1):(b=!1,t<r&&(r=t));if(b){a.splice(n--,1);var o=f();void 0!==o&&(e=o)}}return e},u.p="/tools/staticdocs/",u.rv=function(){return"1.2.0-alpha.0"},u.gca=function(e){return e=({0xc95bd8:"8530",0x1dfae10:"5162",0x28377ef:"8847",0x4861a19:"4592",0x5d046df:"3824",bd0034eb:"314","2047b354":"442","411898ad":"602","5bc719f6":"659",dc5f7beb:"1029","630e5448":"1131","53ca7c5b":"1286",a9987364:"1364","6b65133b":"1417",c2598f55:"1536","99581c43":"1615",ce89ef36:"1686","5e3ed378":"1848","9d6e81d0":"2278",b4596165:"2358",cd879be4:"2415","7f5b2696":"2434","75e64983":"2448",d24bf9b6:"2977","6b210247":"3041",d57a4b5d:"3054","13c1b4e4":"3350","26b8abb2":"3380","5b233ba7":"3522","867640d5":"3649",dfbae5fd:"3658",aa6b6c1b:"3800","6831b732":"3927","0ff569c9":"4045","89e76475":"4456",fd886806:"4521","40365d27":"4593",d1b923aa:"4706",db8fa1d0:"4737","019369f3":"4958",cb8c3f08:"4986",d5d77c37:"5360","6f92e431":"5390","62df909c":"5712","9fb6059a":"5878","1e02e6a3":"5996","8f7843ee":"6449","078dbab0":"6603",c5388ca4:"6649",d66bf9c0:"6868","80c97f38":"7072","0f5d161c":"7243","5c6ce5ec":"7258",c24eae19:"7306","54d0d530":"7471","058ffc22":"7495","2bb7bf90":"7637","0686a885":"7739","3dd7ef3b":"7810","9424f0b3":"8156",b6d70f94:"8197",f15615f1:"8501",a677c089:"8519",d8ca4191:"8593",ebec1ccb:"8713",e501b0d1:"8884","22b3ac48":"9146",d9b92eba:"9148","72c6d8a8":"9278",b9f60ba6:"9474",dbe31111:"9564","103cc3be":"9607","5fe211ef":"9879","696b4199":"9880","43652efd":"9945",d1bfc316:"9997"})[e]||e,u.p+u.u(e)},n={2580:0,6212:0},u.f.j=function(e,c){var f=u.o(n,e)?n[e]:void 0;if(0!==f){if(f)c.push(f[2]);else if(/^(2580|6212)$/.test(e))n[e]=0;else{var t=new Promise(function(c,t){f=n[e]=[c,t]});c.push(f[2]=t);var a=u.p+u.u(e),r=Error();u.l(a,function(c){if(u.o(n,e)&&(0!==(f=n[e])&&(n[e]=void 0),f)){var t=c&&("load"===c.type?"missing":c.type),a=c&&c.target&&c.target.src;r.message="Loading chunk "+e+" failed.\n("+t+": "+a+")",r.name="ChunkLoadError",r.type=t,r.request=a,f[1](r)}},"chunk-"+e,e)}}},u.O.j=function(e){return 0===n[e]},r=function(e,c){var f,t,a=c[0],r=c[1],b=c[2],d=0;if(a.some(function(e){return 0!==n[e]})){for(f in r)u.o(r,f)&&(u.m[f]=r[f]);if(b)var o=b(u)}for(e&&e(c);d<a.length;d++)t=a[d],u.o(n,t)&&n[t]&&n[t][0](),n[t]=0;return u.O(o)},(b=self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).forEach(r.bind(null,0)),b.push=r.bind(null,b.push.bind(b))})();
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-configuration/accessors" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>Accessors | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="Accessors | OpenC3 Docs"><meta data-rh=true name=description content="Responsible for reading and writing data to a buffer"><meta data-rh=true property=og:description content="Responsible for reading and writing data to a buffer"><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors hreflang=en><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors hreflang=x-default><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.1de6b959.css><script src=/tools/staticdocs/assets/js/runtime~main.92ff792a.js defer></script><script src=/tools/staticdocs/assets/js/main.d3e77dd5.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"dark",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_G6ar href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--light_DIHH"><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--dark_Bv2M"></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_bmvg><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_UyTV"><div class=docsWrapper_XLvK><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_z1FD" type=button></button><div class=docRoot_HciC><aside class="theme-doc-sidebar-container docSidebarContainer_e5ai"><div class=sidebarViewport_N8x0><div class=sidebar_vJCc><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_qiME"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs>Introduction</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/getting-started>Getting Started</a><button aria-label="Expand sidebar category 'Getting Started'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/tools/staticdocs/docs/configuration>Configuration</a><button aria-label="Collapse sidebar category 'Configuration'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul style=display:block;overflow:visible;height:auto class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/format>File Format</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/plugins>Plugins</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/target>Targets</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/command>Commands</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry>Telemetry</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/interfaces>Interfaces</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/protocols>Protocols</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/tools/staticdocs/docs/configuration/accessors>Accessors</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/table>Tables</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry-screens>Screens</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/ssl-tls>SSL-TLS</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/tools>Tools</a><button aria-label="Expand sidebar category 'Tools'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/guides>Guides</a><button aria-label="Expand sidebar category 'Guides'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/development>Development</a><button aria-label="Expand sidebar category 'Development'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/meta>Meta</a><button aria-label="Expand sidebar category 'Meta'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs/privacy>OpenC3, Inc. Privacy Policy</a></ul></nav></div></div></aside><main class=docMainContainer_namt><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_YAwJ"><div class=docItemContainer_Rv5Z><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_zCmv" aria-label=Breadcrumbs><ul class=breadcrumbs itemscope itemtype=https://schema.org/BreadcrumbList><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/tools/staticdocs/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_JFrk><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class=breadcrumbs__item><a class=breadcrumbs__link itemprop=item href=/tools/staticdocs/docs/configuration><span itemprop=name>Configuration</span></a><meta itemprop=position content=1><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link itemprop=name>Accessors</span><meta itemprop=position content=2></ul></nav><div class="tocCollapsible_O_Qc theme-doc-toc-mobile tocMobile_tjDr"><button type=button class="clean-btn tocCollapsibleButton_htYj">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Accessors</h1></header><p>Accessors are the low level code which know how to read and write data into a buffer. The buffer data then gets written out an interface which uses protocols to potentially change the data before it goes to the target. Accessors handle the different serializations formats such as binary (CCSDS), JSON, CBOR, XML, HTML, Protocol Buffers, etc.</p>
|
1
|
+
<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-configuration/accessors" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>Accessors | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="Accessors | OpenC3 Docs"><meta data-rh=true name=description content="Responsible for reading and writing data to a buffer"><meta data-rh=true property=og:description content="Responsible for reading and writing data to a buffer"><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors hreflang=en><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors hreflang=x-default><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.1de6b959.css><script src=/tools/staticdocs/assets/js/runtime~main.e660d304.js defer></script><script src=/tools/staticdocs/assets/js/main.fd11211a.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"dark",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_G6ar href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--light_DIHH"><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--dark_Bv2M"></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_bmvg><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_UyTV"><div class=docsWrapper_XLvK><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_z1FD" type=button></button><div class=docRoot_HciC><aside class="theme-doc-sidebar-container docSidebarContainer_e5ai"><div class=sidebarViewport_N8x0><div class=sidebar_vJCc><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_qiME"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs>Introduction</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/getting-started>Getting Started</a><button aria-label="Expand sidebar category 'Getting Started'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/tools/staticdocs/docs/configuration>Configuration</a><button aria-label="Collapse sidebar category 'Configuration'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul style=display:block;overflow:visible;height:auto class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/format>File Format</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/plugins>Plugins</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/target>Targets</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/command>Commands</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry>Telemetry</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/interfaces>Interfaces</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/protocols>Protocols</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/tools/staticdocs/docs/configuration/accessors>Accessors</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/table>Tables</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry-screens>Screens</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/ssl-tls>SSL-TLS</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/tools>Tools</a><button aria-label="Expand sidebar category 'Tools'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/guides>Guides</a><button aria-label="Expand sidebar category 'Guides'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/development>Development</a><button aria-label="Expand sidebar category 'Development'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/meta>Meta</a><button aria-label="Expand sidebar category 'Meta'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs/privacy>OpenC3, Inc. Privacy Policy</a></ul></nav></div></div></aside><main class=docMainContainer_namt><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_YAwJ"><div class=docItemContainer_Rv5Z><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_zCmv" aria-label=Breadcrumbs><ul class=breadcrumbs itemscope itemtype=https://schema.org/BreadcrumbList><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/tools/staticdocs/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_JFrk><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class=breadcrumbs__item><a class=breadcrumbs__link itemprop=item href=/tools/staticdocs/docs/configuration><span itemprop=name>Configuration</span></a><meta itemprop=position content=1><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link itemprop=name>Accessors</span><meta itemprop=position content=2></ul></nav><div class="tocCollapsible_O_Qc theme-doc-toc-mobile tocMobile_tjDr"><button type=button class="clean-btn tocCollapsibleButton_htYj">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Accessors</h1></header><p>Accessors are the low level code which know how to read and write data into a buffer. The buffer data then gets written out an interface which uses protocols to potentially change the data before it goes to the target. Accessors handle the different serializations formats such as binary (CCSDS), JSON, CBOR, XML, HTML, Protocol Buffers, etc.</p>
|
2
2
|
<p>For more information about how Accessors fit with Interfaces and Protocols see <a href=https://www.openc3.com/news/interoperability-without-standards target=_blank rel="noopener noreferrer">Interoperability Without Standards</a>.</p>
|
3
3
|
<p>COSMOS provides the following built-in accessors: Binary, CBOR, Form, HTML, HTTP, JSON, Template, XML.</p>
|
4
4
|
<p>COSMOS Enterprise provides the following accessors: GEMS Ascii, Prometheus, Protocol Buffer.</p>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-configuration/command" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>Commands | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/docs/configuration/command><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="Commands | OpenC3 Docs"><meta data-rh=true name=description content="Command definition file format and keywords"><meta data-rh=true property=og:description content="Command definition file format and keywords"><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/docs/configuration/command><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/command hreflang=en><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/command hreflang=x-default><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.1de6b959.css><script src=/tools/staticdocs/assets/js/runtime~main.92ff792a.js defer></script><script src=/tools/staticdocs/assets/js/main.d3e77dd5.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"dark",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_G6ar href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--light_DIHH"><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--dark_Bv2M"></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_bmvg><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_UyTV"><div class=docsWrapper_XLvK><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_z1FD" type=button></button><div class=docRoot_HciC><aside class="theme-doc-sidebar-container docSidebarContainer_e5ai"><div class=sidebarViewport_N8x0><div class=sidebar_vJCc><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_qiME"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs>Introduction</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/getting-started>Getting Started</a><button aria-label="Expand sidebar category 'Getting Started'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/tools/staticdocs/docs/configuration>Configuration</a><button aria-label="Collapse sidebar category 'Configuration'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul style=display:block;overflow:visible;height:auto class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/format>File Format</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/plugins>Plugins</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/target>Targets</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/tools/staticdocs/docs/configuration/command>Commands</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry>Telemetry</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/interfaces>Interfaces</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/protocols>Protocols</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/accessors>Accessors</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/table>Tables</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry-screens>Screens</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/ssl-tls>SSL-TLS</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/tools>Tools</a><button aria-label="Expand sidebar category 'Tools'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/guides>Guides</a><button aria-label="Expand sidebar category 'Guides'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/development>Development</a><button aria-label="Expand sidebar category 'Development'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/meta>Meta</a><button aria-label="Expand sidebar category 'Meta'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs/privacy>OpenC3, Inc. Privacy Policy</a></ul></nav></div></div></aside><main class=docMainContainer_namt><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_YAwJ"><div class=docItemContainer_Rv5Z><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_zCmv" aria-label=Breadcrumbs><ul class=breadcrumbs itemscope itemtype=https://schema.org/BreadcrumbList><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/tools/staticdocs/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_JFrk><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class=breadcrumbs__item><a class=breadcrumbs__link itemprop=item href=/tools/staticdocs/docs/configuration><span itemprop=name>Configuration</span></a><meta itemprop=position content=1><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link itemprop=name>Commands</span><meta itemprop=position content=2></ul></nav><div class="tocCollapsible_O_Qc theme-doc-toc-mobile tocMobile_tjDr"><button type=button class="clean-btn tocCollapsibleButton_htYj">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Commands</h1></header><h2 class="anchor anchorWithStickyNavbar_fF9Z" id=command-definition-files>Command Definition Files<a href=#command-definition-files class=hash-link aria-label="Direct link to Command Definition Files" title="Direct link to Command Definition Files"></a></h2>
|
1
|
+
<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-configuration/command" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>Commands | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/docs/configuration/command><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="Commands | OpenC3 Docs"><meta data-rh=true name=description content="Command definition file format and keywords"><meta data-rh=true property=og:description content="Command definition file format and keywords"><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/docs/configuration/command><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/command hreflang=en><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/command hreflang=x-default><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.1de6b959.css><script src=/tools/staticdocs/assets/js/runtime~main.e660d304.js defer></script><script src=/tools/staticdocs/assets/js/main.fd11211a.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"dark",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_G6ar href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--light_DIHH"><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--dark_Bv2M"></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_bmvg><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_UyTV"><div class=docsWrapper_XLvK><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_z1FD" type=button></button><div class=docRoot_HciC><aside class="theme-doc-sidebar-container docSidebarContainer_e5ai"><div class=sidebarViewport_N8x0><div class=sidebar_vJCc><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_qiME"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs>Introduction</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/getting-started>Getting Started</a><button aria-label="Expand sidebar category 'Getting Started'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/tools/staticdocs/docs/configuration>Configuration</a><button aria-label="Collapse sidebar category 'Configuration'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul style=display:block;overflow:visible;height:auto class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/format>File Format</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/plugins>Plugins</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/target>Targets</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/tools/staticdocs/docs/configuration/command>Commands</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry>Telemetry</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/interfaces>Interfaces</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/protocols>Protocols</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/accessors>Accessors</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/table>Tables</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry-screens>Screens</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/ssl-tls>SSL-TLS</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/tools>Tools</a><button aria-label="Expand sidebar category 'Tools'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/guides>Guides</a><button aria-label="Expand sidebar category 'Guides'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/development>Development</a><button aria-label="Expand sidebar category 'Development'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/meta>Meta</a><button aria-label="Expand sidebar category 'Meta'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs/privacy>OpenC3, Inc. Privacy Policy</a></ul></nav></div></div></aside><main class=docMainContainer_namt><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_YAwJ"><div class=docItemContainer_Rv5Z><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_zCmv" aria-label=Breadcrumbs><ul class=breadcrumbs itemscope itemtype=https://schema.org/BreadcrumbList><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/tools/staticdocs/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_JFrk><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class=breadcrumbs__item><a class=breadcrumbs__link itemprop=item href=/tools/staticdocs/docs/configuration><span itemprop=name>Configuration</span></a><meta itemprop=position content=1><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link itemprop=name>Commands</span><meta itemprop=position content=2></ul></nav><div class="tocCollapsible_O_Qc theme-doc-toc-mobile tocMobile_tjDr"><button type=button class="clean-btn tocCollapsibleButton_htYj">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Commands</h1></header><h2 class="anchor anchorWithStickyNavbar_fF9Z" id=command-definition-files>Command Definition Files<a href=#command-definition-files class=hash-link aria-label="Direct link to Command Definition Files" title="Direct link to Command Definition Files"></a></h2>
|
2
2
|
<p>Command definition files define the command packets that can be sent to COSMOS targets. One large file can be used to define the command packets, or multiple files can be used at the user's discretion. Command definition files are placed in the target's cmd_tlm directory and are processed alphabetically. Therefore if you have some command files that depend on others, e.g. they override or extend existing commands, they must be named last. The easiest way to do this is to add an extension to an existing file name. For example, if you already have cmd.txt you can create cmd_override.txt for commands that depends on the definitions in cmd.txt. Also note that due to the way the <a href=http://www.asciitable.com/ target=_blank rel="noopener noreferrer">ASCII Table</a> is structured, files beginning with capital letters are processed before lower case letters.</p>
|
3
3
|
<p>When defining command parameters you can choose from the following data types: INT, UINT, FLOAT, STRING, BLOCK. These correspond to integers, unsigned integers, floating point numbers, strings and binary blocks of data. The only difference between a STRING and BLOCK is when COSMOS reads the binary command log it stops reading a STRING type when it encounters a null byte (0). This shows up in the text log produced by Data Extractor. Note that this does NOT affect the data COSMOS writes as it's still legal to pass null bytes (0) in STRING parameters.</p>
|
4
4
|
<div style=clear:both></div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-configuration/format" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>File Format | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/docs/configuration/format><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="File Format | OpenC3 Docs"><meta data-rh=true name=description content="Structure of a COSMOS file, including using ERB"><meta data-rh=true property=og:description content="Structure of a COSMOS file, including using ERB"><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/docs/configuration/format><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/format hreflang=en><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/format hreflang=x-default><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.1de6b959.css><script src=/tools/staticdocs/assets/js/runtime~main.92ff792a.js defer></script><script src=/tools/staticdocs/assets/js/main.d3e77dd5.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"dark",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_G6ar href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--light_DIHH"><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--dark_Bv2M"></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_bmvg><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_UyTV"><div class=docsWrapper_XLvK><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_z1FD" type=button></button><div class=docRoot_HciC><aside class="theme-doc-sidebar-container docSidebarContainer_e5ai"><div class=sidebarViewport_N8x0><div class=sidebar_vJCc><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_qiME"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs>Introduction</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/getting-started>Getting Started</a><button aria-label="Expand sidebar category 'Getting Started'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/tools/staticdocs/docs/configuration>Configuration</a><button aria-label="Collapse sidebar category 'Configuration'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul style=display:block;overflow:visible;height:auto class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/tools/staticdocs/docs/configuration/format>File Format</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/plugins>Plugins</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/target>Targets</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/command>Commands</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry>Telemetry</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/interfaces>Interfaces</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/protocols>Protocols</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/accessors>Accessors</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/table>Tables</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry-screens>Screens</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/ssl-tls>SSL-TLS</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/tools>Tools</a><button aria-label="Expand sidebar category 'Tools'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/guides>Guides</a><button aria-label="Expand sidebar category 'Guides'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/development>Development</a><button aria-label="Expand sidebar category 'Development'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/meta>Meta</a><button aria-label="Expand sidebar category 'Meta'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs/privacy>OpenC3, Inc. Privacy Policy</a></ul></nav></div></div></aside><main class=docMainContainer_namt><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_YAwJ"><div class=docItemContainer_Rv5Z><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_zCmv" aria-label=Breadcrumbs><ul class=breadcrumbs itemscope itemtype=https://schema.org/BreadcrumbList><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/tools/staticdocs/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_JFrk><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class=breadcrumbs__item><a class=breadcrumbs__link itemprop=item href=/tools/staticdocs/docs/configuration><span itemprop=name>Configuration</span></a><meta itemprop=position content=1><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link itemprop=name>File Format</span><meta itemprop=position content=2></ul></nav><div class="tocCollapsible_O_Qc theme-doc-toc-mobile tocMobile_tjDr"><button type=button class="clean-btn tocCollapsibleButton_htYj">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>File Format</h1></header><p>COSMOS configuration files are just text files. They can (and should) be checked into your configuration management system and thus can be easily diffed throughout their history. They support ERB syntax, partials, and various line continuations which make them extremely flexible.</p>
|
1
|
+
<!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-configuration/format" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.7.0"><title data-rh=true>File Format | OpenC3 Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.openc3.com/tools/staticdocs/docs/configuration/format><meta data-rh=true property=og:locale content=en><meta data-rh=true name=docusaurus_locale content=en><meta data-rh=true name=docsearch:language content=en><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="File Format | OpenC3 Docs"><meta data-rh=true name=description content="Structure of a COSMOS file, including using ERB"><meta data-rh=true property=og:description content="Structure of a COSMOS file, including using ERB"><link data-rh=true rel=icon href=/tools/staticdocs/img/favicon.png><link data-rh=true rel=canonical href=https://docs.openc3.com/tools/staticdocs/docs/configuration/format><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/format hreflang=en><link data-rh=true rel=alternate href=https://docs.openc3.com/tools/staticdocs/docs/configuration/format hreflang=x-default><link rel=stylesheet href=/tools/staticdocs/assets/css/styles.1de6b959.css><script src=/tools/staticdocs/assets/js/runtime~main.e660d304.js defer></script><script src=/tools/staticdocs/assets/js/main.fd11211a.js defer></script><body class=navigation-with-keyboard><script>!function(){var t,e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t=null!==e?e:"dark",document.documentElement.setAttribute("data-theme",t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/tools/staticdocs/img/logo.svg><div role=region aria-label="Skip to main content"><a class=skipToContent_G6ar href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="navbar navbar--fixed-top"><div class=navbar__inner><div class=navbar__items><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/tools/staticdocs/><div class=navbar__logo><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--light_DIHH"><img src=/tools/staticdocs/img/logo.svg alt="OpenC3 Logo" class="themedComponent_DHUr themedComponent--dark_Bv2M"></div><b class="navbar__title text--truncate">OpenC3 Docs</b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/tools/staticdocs/docs>Documentation</a><a href=https://openc3.com/enterprise/ target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">Enterprise</a></div><div class="navbar__items navbar__items--right"><div class=navbarSearchContainer_bmvg><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="main-wrapper mainWrapper_UyTV"><div class=docsWrapper_XLvK><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_z1FD" type=button></button><div class=docRoot_HciC><aside class="theme-doc-sidebar-container docSidebarContainer_e5ai"><div class=sidebarViewport_N8x0><div class=sidebar_vJCc><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_qiME"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs>Introduction</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/getting-started>Getting Started</a><button aria-label="Expand sidebar category 'Getting Started'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/tools/staticdocs/docs/configuration>Configuration</a><button aria-label="Collapse sidebar category 'Configuration'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul style=display:block;overflow:visible;height:auto class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/tools/staticdocs/docs/configuration/format>File Format</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/plugins>Plugins</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/target>Targets</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/command>Commands</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry>Telemetry</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/interfaces>Interfaces</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/protocols>Protocols</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/accessors>Accessors</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/table>Tables</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/telemetry-screens>Screens</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/tools/staticdocs/docs/configuration/ssl-tls>SSL-TLS</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/tools>Tools</a><button aria-label="Expand sidebar category 'Tools'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/guides>Guides</a><button aria-label="Expand sidebar category 'Guides'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/development>Development</a><button aria-label="Expand sidebar category 'Development'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/tools/staticdocs/docs/meta>Meta</a><button aria-label="Expand sidebar category 'Meta'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/tools/staticdocs/docs/privacy>OpenC3, Inc. Privacy Policy</a></ul></nav></div></div></aside><main class=docMainContainer_namt><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_YAwJ"><div class=docItemContainer_Rv5Z><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_zCmv" aria-label=Breadcrumbs><ul class=breadcrumbs itemscope itemtype=https://schema.org/BreadcrumbList><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/tools/staticdocs/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_JFrk><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class=breadcrumbs__item><a class=breadcrumbs__link itemprop=item href=/tools/staticdocs/docs/configuration><span itemprop=name>Configuration</span></a><meta itemprop=position content=1><li itemscope itemprop=itemListElement itemtype=https://schema.org/ListItem class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link itemprop=name>File Format</span><meta itemprop=position content=2></ul></nav><div class="tocCollapsible_O_Qc theme-doc-toc-mobile tocMobile_tjDr"><button type=button class="clean-btn tocCollapsibleButton_htYj">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>File Format</h1></header><p>COSMOS configuration files are just text files. They can (and should) be checked into your configuration management system and thus can be easily diffed throughout their history. They support ERB syntax, partials, and various line continuations which make them extremely flexible.</p>
|
2
2
|
<h2 class="anchor anchorWithStickyNavbar_fF9Z" id=keyword--parameters>Keyword / Parameters<a href=#keyword--parameters class=hash-link aria-label="Direct link to Keyword / Parameters" title="Direct link to Keyword / Parameters"></a></h2>
|
3
3
|
<p>Each line of a COSMOS configuration file contains a single keyword followed by parameters. For example:</p>
|
4
4
|
<div class="language-ruby codeBlockContainer_ZGJx theme-code-block" style=--prism-color:#d6deeb;--prism-background-color:#011627><div class=codeBlockContent_qZBB><pre tabindex=0 class="prism-code language-ruby codeBlock_TAPP thin-scrollbar" style=color:#d6deeb;background-color:#011627><code class=codeBlockLines_AdAo><span class=token-line style=color:#d6deeb><span class="token constant" style="color:rgb(130, 170, 255)">COMMAND</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">TARGET</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">COLLECT</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">BIG_ENDIAN</span><span class="token plain"> </span><span class="token string-literal string" style="color:rgb(173, 219, 103)">"Collect command"</span><br></span></code></pre><div class=buttonGroup_TNwR><button type=button aria-label="Copy code to clipboard" title=Copy class=clean-btn><span class=copyButtonIcons_MVhB aria-hidden=true><svg viewBox="0 0 24 24" class=copyButtonIcon_yxgH><path fill=currentColor d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"/></svg><svg viewBox="0 0 24 24" class=copyButtonSuccessIcon_QJLJ><path fill=currentColor d=M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z /></svg></span></button></div></div></div>
|