cosmosc2-tool-cmdsender 5.0.4 → 5.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"js/93.js","mappings":"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","sources":["webpack://@cosmosc2/tool-cmdsender/src/tools/CommandSender/CommandSender.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/services/api.js","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?c553","webpack://@cosmosc2/tool-cmdsender/src/tools/CommandSender/CommandParameterEditor.vue","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?5284","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandSender.vue?fb31","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandSender.vue?e307","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandSender.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?88c8","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?7eb0","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?fdbd","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?1730","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?44cd","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?b395","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?228d","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?8f71","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?82b3","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?1299","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?dfc1","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?5429"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <top-bar :menus=\"menus\" :title=\"title\" />\n\n <target-packet-item-chooser\n :initial-target-name=\"this.$route.params.target\"\n :initial-packet-name=\"this.$route.params.packet\"\n @on-set=\"commandChanged($event)\"\n @click=\"buildCmd($event)\"\n :disabled=\"sendDisabled\"\n button-text=\"Send\"\n mode=\"cmd\"\n />\n\n <v-card v-if=\"rows.length != 0\">\n <v-card-title>\n Parameters\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n append-icon=\"mdi-magnify\"\n label=\"Search\"\n single-line\n hide-details\n />\n </v-card-title>\n <v-data-table\n :headers=\"headers\"\n :items=\"rows\"\n :search=\"search\"\n calculate-widths\n disable-pagination\n hide-default-footer\n multi-sort\n dense\n @contextmenu:row=\"showContextMenu\"\n >\n <template v-slot:item.val_and_states=\"{ item }\">\n <command-parameter-editor\n v-model=\"item.val_and_states\"\n :states-in-hex=\"statesInHex\"\n />\n </template>\n </v-data-table>\n </v-card>\n <div class=\"ma-3\">Status: {{ status }}</div>\n <div class=\"mt-3\">\n Command History: (Pressing Enter on the line re-executes the command)\n </div>\n <v-textarea\n ref=\"history\"\n :value=\"history\"\n solo\n dense\n hide-details\n data-test=\"sender-history\"\n @keydown.enter=\"historyEnter($event)\"\n :background-color=\"getBackgroundColor()\"\n />\n\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n <details-dialog\n :target-name=\"targetName\"\n :packet-name=\"commandName\"\n :item-name=\"parameterName\"\n :type=\"'cmd'\"\n v-model=\"viewDetails\"\n />\n\n <v-dialog v-model=\"displayErrorDialog\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Error </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"mx-1\">\n <v-row class=\"my-2\">\n <v-card-text>\n <span v-text=\"status\" />\n </v-card-text>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n @click=\"displayErrorDialog = false\"\n color=\"primary\"\n data-test=\"error-dialog-ok\"\n >\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <v-dialog v-model=\"displaySendHazardous\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Hazardous Warning </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"mx-1\">\n <v-row class=\"my-2\">\n <span>\n Warning: Command {{ targetName }} {{ commandName }} is\n Hazardous. Send?\n </span>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n @click=\"cancelHazardousCmd\"\n outlined\n data-test=\"send-hazardous-no\"\n >\n No\n </v-btn>\n <v-btn\n @click=\"sendHazardousCmd\"\n class=\"primary mx-1\"\n data-test=\"send-hazardous-yes\"\n >\n Yes\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <v-dialog v-model=\"displaySendRaw\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Send Raw </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"mx-1\">\n <v-row class=\"my-2\">\n <v-col>Interface:</v-col>\n <v-col>\n <v-select\n solo\n hide-details\n dense\n :items=\"interfaces\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedInterface\"\n />\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col>Filename:</v-col>\n <v-col>\n <input type=\"file\" @change=\"selectRawCmdFile($event)\" />\n </v-col>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn @click=\"cancelRawCmd\" outlined data-test=\"raw-cancel\">\n Cancel\n </v-btn>\n <v-btn @click=\"sendRawCmd\" class=\"primary\" data-test=\"raw-ok\">\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\nimport TargetPacketItemChooser from '@cosmosc2/tool-common/src/components/TargetPacketItemChooser'\nimport CommandParameterEditor from '@/tools/CommandSender/CommandParameterEditor'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport DetailsDialog from '@cosmosc2/tool-common/src/components/DetailsDialog'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport 'sprintf-js'\n\nexport default {\n components: {\n DetailsDialog,\n TargetPacketItemChooser,\n CommandParameterEditor,\n TopBar,\n },\n data() {\n return {\n title: 'Command Sender',\n search: '',\n headers: [\n { text: 'Name', value: 'parameter_name' },\n { text: 'Value or State', value: 'val_and_states' },\n { text: 'Units', value: 'units' },\n { text: 'Description', value: 'description' },\n ],\n targetName: '',\n commandName: '',\n ignoreRangeChecks: false,\n statesInHex: false,\n showIgnoredParams: false,\n cmdRaw: false,\n ignoredParams: [],\n rows: [],\n interfaces: [],\n selectedInterface: '',\n rawCmdFile: null,\n status: '',\n history: '',\n displaySendHazardous: false,\n displayErrorDialog: false,\n displaySendRaw: false,\n sendDisabled: false,\n api: null,\n viewDetails: false,\n contextMenuShown: false,\n parameterName: '',\n reservedItemNames: [],\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n ],\n menus: [\n // TODO: Implement send raw\n // {\n // label: 'File',\n // items: [\n // {\n // label: 'Send Raw',\n // command: () => {\n // this.setupRawCmd()\n // }\n // }\n // ]\n // },\n {\n label: 'Mode',\n items: [\n {\n label: 'Ignore Range Checks',\n checkbox: true,\n command: () => {\n this.ignoreRangeChecks = !this.ignoreRangeChecks\n },\n },\n {\n label: 'Display State Values in Hex',\n checkbox: true,\n command: () => {\n this.statesInHex = !this.statesInHex\n },\n },\n {\n label: 'Show Ignored Parameters',\n checkbox: true,\n command: () => {\n this.showIgnoredParams = !this.showIgnoredParams\n // TODO: Maybe we don't need to do this if the data-table\n // can render the whole thing and we just display with v-if\n this.updateCmdParams()\n },\n },\n {\n label: 'Disable Parameter Conversions',\n checkbox: true,\n command: () => {\n this.cmdRaw = !this.cmdRaw\n },\n },\n ],\n },\n ],\n }\n },\n created() {\n Api.get(`/cosmos-api/autocomplete/reserved-item-names`).then((response) => {\n this.reservedItemNames = response.data\n })\n this.api = new CosmosApi()\n // If we're passed in the route then manually call commandChanged to update\n if (this.$route.params.target && this.$route.params.packet) {\n this.commandChanged({\n targetName: this.$route.params.target.toUpperCase(),\n packetName: this.$route.params.packet.toUpperCase(),\n })\n }\n },\n methods: {\n getBackgroundColor() {\n return this.$vuetify.theme.parsedTheme.tertiary.darken2\n },\n historyEnter(event) {\n // Prevent the enter key from actually causing a newline\n event.preventDefault()\n const textarea = this.$refs.history.$refs.input\n let pos = textarea.selectionStart\n // Find the newline after the cursor position\n let nextNewline = textarea.value.indexOf('\\n', pos)\n // Get everything up to the next newline and split on newlines\n const lines = textarea.value.substr(0, nextNewline).split('\\n')\n let command = lines[lines.length - 1]\n // Blank commands can happen if typing return on a blank line\n if (command === '') {\n return\n }\n\n // Remove the cmd(\"\") wrapper\n let firstQuote = command.indexOf('\"')\n let lastQuote = command.lastIndexOf('\"')\n command = command.substr(firstQuote + 1, lastQuote - firstQuote - 1)\n this.sendCmd(command)\n },\n\n showContextMenu(e, row) {\n e.preventDefault()\n this.parameterName = row.item.parameter_name\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n\n isFloat(str) {\n // Regex to identify a string as a floating point number\n if (/^\\s*[-+]?\\d*\\.\\d+\\s*$/.test(str)) {\n return true\n }\n // Regex to identify a string as a floating point number in scientific notation.\n if (/^\\s*[-+]?(\\d+((\\.\\d+)?)|(\\.\\d+))[eE][-+]?\\d+\\s*$/.test(str)) {\n return true\n }\n return false\n },\n\n isInt(str) {\n // Regular expression to identify a String as an integer\n if (/^\\s*[-+]?\\d+\\s*$/.test(str)) {\n return true\n }\n\n // # Regular expression to identify a String as an integer in hexadecimal format\n if (/^\\s*0[xX][\\dabcdefABCDEF]+\\s*$/.test(str)) {\n return true\n }\n return false\n },\n\n isArray(str) {\n // Regular expression to identify a String as an Array\n if (/^\\s*\\[.*\\]\\s*$/.test(str)) {\n return true\n }\n return false\n },\n\n removeQuotes(str) {\n // Return the string with leading and trailing quotes removed\n if (str.length < 2) {\n return str\n }\n var firstChar = str.charAt(0)\n if (firstChar != '\"' && firstChar != \"'\") {\n return str\n }\n var lastChar = str.charAt(str.length - 1)\n if (firstChar != lastChar) {\n return str\n }\n return str.slice(1, -1)\n },\n\n convertToValue(param) {\n if (typeof param.val_and_states.val != 'string') {\n return param.val_and_states.val\n }\n\n var str = param.val_and_states.val\n var quotes_removed = this.removeQuotes(str)\n if (str == quotes_removed) {\n var upcaseStr = str.toUpperCase()\n\n if (\n (param.type == 'STRING' || param.type == 'BLOCK') &&\n upcaseStr.startsWith('0X')\n ) {\n var hexStr = upcaseStr.slice(2)\n if (hexStr.length % 2 != 0) {\n hexStr = '0' + hexStr\n }\n var jstr = { json_class: 'String', raw: [] }\n for (var i = 0; i < hexStr.length; i += 2) {\n var nibble = hexStr.charAt(i) + hexStr.charAt(i + 1)\n jstr.raw.push(parseInt(nibble, 16))\n }\n return jstr\n } else {\n if (upcaseStr == 'INFINITY') {\n return Infinity\n } else if (upcaseStr == '-INFINITY') {\n return -Infinity\n } else if (upcaseStr == 'NAN') {\n return NaN\n } else if (this.isFloat(str)) {\n return parseFloat(str)\n } else if (this.isInt(str)) {\n return parseInt(str)\n } else if (this.isArray(str)) {\n return eval(str)\n } else {\n return str\n }\n }\n } else {\n return quotes_removed\n }\n },\n\n convertToString(value) {\n var i = 0\n var return_value = ''\n if (Object.prototype.toString.call(value).slice(8, -1) === 'Array') {\n var arrayLength = value.length\n return_value = '[ '\n for (i = 0; i < arrayLength; i++) {\n if (\n Object.prototype.toString.call(value[i]).slice(8, -1) === 'String'\n ) {\n return_value += '\"' + value[i] + '\"'\n } else {\n return_value += value[i]\n }\n if (i != arrayLength - 1) {\n return_value += ', '\n }\n }\n return_value += ' ]'\n } else if (\n Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n ) {\n if (value.json_class == 'String' && value.raw) {\n // This is binary data, display in hex.\n return_value = '0x'\n for (i = 0; i < value.raw.length; i++) {\n var nibble = value.raw[i].toString(16).toUpperCase()\n if (nibble.length < 2) {\n nibble = '0' + nibble\n }\n return_value += nibble\n }\n } else if (value.json_class == 'Float' && value.raw) {\n return_value = value.raw\n } else {\n // TBD - are there other objects that we need to handle?\n return_value = String(value)\n }\n } else {\n return_value = String(value)\n }\n return return_value\n },\n\n commandChanged(event) {\n if (\n this.targetName !== event.targetName ||\n this.commandName !== event.packetName\n ) {\n this.targetName = event.targetName\n this.commandName = event.packetName\n // Only updateCmdParams if we're not already in the middle of an update\n if (this.sendDisabled === false) {\n this.updateCmdParams()\n }\n this.$router\n .replace({\n name: 'CommandSender',\n params: {\n target: this.targetName,\n packet: this.commandName,\n },\n })\n // catch the error in case we route to where we already are\n .catch((err) => {})\n }\n },\n\n updateCmdParams() {\n this.sendDisabled = true\n this.ignoredParams = []\n this.rows = []\n this.api\n .get_target(this.targetName)\n .then(\n (target) => {\n this.ignoredParams = target.ignored_parameters\n return this.api.get_command(this.targetName, this.commandName)\n },\n (error) => {\n this.displayError('getting ignored parameters', error)\n }\n )\n .then(\n (command) => {\n command.items.forEach((parameter) => {\n if (this.reservedItemNames.includes(parameter.name)) return\n if (\n !this.ignoredParams.includes(parameter.name) ||\n this.showIgnoredParams\n ) {\n let val = parameter.default\n if (parameter.required) {\n val = ''\n }\n if (parameter.format_string) {\n val = sprintf(parameter.format_string, parameter.default)\n }\n this.rows.push({\n parameter_name: parameter.name,\n val_and_states: {\n val: val,\n states: parameter.states,\n selected_state: null,\n selected_state_label: '',\n manual_value: null,\n },\n description: parameter.description,\n units: parameter.units,\n type: parameter.data_type,\n })\n }\n })\n this.sendDisabled = false\n this.status = ''\n },\n (error) => {\n this.displayError('getting command parameters', error)\n }\n )\n },\n\n statusChange(event) {\n this.status = event.status\n },\n\n createParamList() {\n let paramList = {}\n for (var i = 0; i < this.rows.length; i++) {\n paramList[this.rows[i].parameter_name] = this.convertToValue(\n this.rows[i]\n )\n }\n return paramList\n },\n\n buildCmd() {\n this.sendCmd(this.targetName, this.commandName, this.createParamList())\n },\n\n // Note targetName can also be the entire command to send, e.g. \"INST ABORT\" or\n // \"INST COLLECT with TYPE 0, DURATION 1, OPCODE 171, TEMP 10\" when being\n // sent from the history. In that case commandName and paramList are undefined\n // and the api calls handle that.\n sendCmd(targetName, commandName, paramList) {\n this.sendDisabled = true\n let hazardous = false\n let cmd = ''\n this.api.get_cmd_hazardous(targetName, commandName, paramList).then(\n (response) => {\n hazardous = response\n\n if (hazardous) {\n this.displaySendHazardous = true\n } else {\n let obs\n if (this.cmdRaw) {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_raw_no_range_check'\n obs = this.api.cmd_raw_no_range_check(\n targetName,\n commandName,\n paramList\n )\n } else {\n cmd = 'cmd_raw'\n obs = this.api.cmd_raw(targetName, commandName, paramList)\n }\n } else {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_no_range_check'\n obs = this.api.cmd_no_range_check(\n targetName,\n commandName,\n paramList\n )\n } else {\n cmd = 'cmd'\n obs = this.api.cmd(targetName, commandName, paramList)\n }\n }\n\n obs.then(\n (response) => {\n this.processCmdResponse(true, response)\n },\n (error) => {\n this.processCmdResponse(false, error)\n }\n )\n }\n },\n (error) => {\n this.processCmdResponse(false, error)\n }\n )\n },\n\n sendHazardousCmd() {\n this.displaySendHazardous = false\n var paramList = this.createParamList()\n\n let obs = ''\n let cmd = ''\n if (this.cmdRaw) {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_no_checks'\n obs = this.api.cmd_raw_no_checks(\n this.targetName,\n this.commandName,\n paramList\n )\n } else {\n cmd = 'cmd_no_hazardous_check'\n obs = this.api.cmd_raw_no_hazardous_check(\n this.targetName,\n this.commandName,\n paramList\n )\n }\n } else {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_no_checks'\n obs = this.api.cmd_no_checks(\n this.targetName,\n this.commandName,\n paramList\n )\n } else {\n cmd = 'cmd_no_hazardous_check'\n obs = this.api.cmd_no_hazardous_check(\n this.targetName,\n this.commandName,\n paramList\n )\n }\n }\n\n obs.then(\n (response) => {\n this.processCmdResponse(true, response)\n },\n (error) => {\n this.processCmdResponse(false, error)\n }\n )\n },\n\n cancelHazardousCmd() {\n this.displaySendHazardous = false\n this.status = 'Hazardous command not sent'\n this.sendDisabled = false\n },\n\n processCmdResponse(cmd_sent, response) {\n var msg = ''\n if (cmd_sent) {\n msg = 'cmd(\"' + response[0] + ' ' + response[1]\n var keys = Object.keys(response[2])\n if (keys.length > 0) {\n msg += ' with '\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n msg += key + ' ' + this.convertToString(response[2][key])\n if (i < keys.length - 1) {\n msg += ', '\n }\n }\n }\n msg += '\")'\n if (!this.history.includes(msg)) {\n this.history += msg + '\\n'\n }\n msg += ' sent.'\n // Add the number of commands sent to the status message\n if (this.status.includes(msg)) {\n let parts = this.status.split('sent.')\n if (parts[1].includes('(')) {\n let num = parseInt(parts[1].substr(2, parts[1].indexOf(')') - 2))\n msg = parts[0] + 'sent. (' + (num + 1) + ')'\n } else {\n msg += ' (2)'\n }\n }\n this.status = msg\n } else {\n var context = 'sending ' + this.targetName + ' ' + this.commandName\n this.displayError(context, response, true)\n }\n this.sendDisabled = false\n },\n\n displayError(context, error, showDialog = false) {\n this.status = `Error ${context} due to ${error.name}`\n if (error.message && error.message != '') {\n this.status += ': '\n this.status += error.message\n }\n if (showDialog) {\n this.displayErrorDialog = true\n }\n },\n\n setupRawCmd() {\n this.api.get_interface_names().then(\n (response) => {\n var interfaces = []\n for (var i = 0; i < response.length; i++) {\n interfaces.push({ label: response[i], value: response[i] })\n }\n this.interfaces = interfaces\n this.selectedInterface = interfaces[0].value\n this.displaySendRaw = true\n },\n (error) => {\n this.displaySendRaw = false\n this.displayError('getting interface names', error, true)\n }\n )\n },\n\n selectRawCmdFile(event) {\n this.rawCmdFile = event.target.files[0]\n },\n\n onLoad(event) {\n var bufView = new Uint8Array(event.target.result)\n var jstr = { json_class: 'String', raw: [] }\n for (var i = 0; i < bufView.length; i++) {\n jstr.raw.push(bufView[i])\n }\n\n this.api.send_raw(this.selectedInterface, jstr).then(\n () => {\n this.displaySendRaw = false\n this.status =\n 'Sent ' +\n bufView.length +\n ' bytes to interface ' +\n this.selectedInterface\n },\n (error) => {\n this.displaySendRaw = false\n this.displayError('sending raw data', error, true)\n }\n )\n },\n\n sendRawCmd() {\n var self = this\n var reader = new FileReader()\n reader.onload = function (e) {\n self.onLoad(e)\n }\n reader.onerror = function (e) {\n self.displaySendRaw = false\n var target = e.target\n self.displayError('sending raw data', target.error, true)\n }\n // TBD - use the other event handlers to implement a progress bar for the\n // file upload. Handle abort as well?\n //reader.onloadstart = function(e) {}\n //reader.onprogress = function(e) {}\n //reader.onloadend = function(e) {}\n //reader.onabort = function(e) {}\n\n reader.readAsArrayBuffer(this.rawCmdFile)\n },\n\n cancelRawCmd() {\n this.displaySendRaw = false\n this.status = 'Raw command not sent'\n },\n },\n}\n</script>\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nconst request = async function (\n method,\n url,\n { data, params = {}, headers, noAuth = false, noScope = false } = {}\n) {\n if (!noAuth) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n headers['Authorization'] = localStorage.cosmosToken\n }\n if (!noScope && !params['scope']) {\n params['scope'] = localStorage.scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('get', path, { params, headers, noScope, noAuth })\n },\n\n put: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('put', path, { data, params, headers, noScope, noAuth })\n },\n\n post: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('post', path, { data, params, headers, noScope, noAuth })\n },\n\n delete: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('delete', path, { params, headers, noScope, noAuth })\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 10000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n }\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nexport class CosmosApi {\n id = 1\n\n constructor() {}\n\n // This is hacky Json-rpc for now. Should probably use a jsonrpc library.\n async exec(method, params, kwparams = {}) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/cosmos-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.cosmosToken,\n 'Content-Type': 'application/json-rpc',\n },\n }\n )\n // var data = response.data\n // if (data.error) {\n // var err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n var err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n err.name = 'Unknown error'\n }\n //console.log(error)\n throw err\n }\n }\n\n decode_cosmos_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_cosmos_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n connect_interface(interface_name) {\n return this.exec('connect_interface', [interface_name])\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_all_target_info() {\n return this.exec('get_all_target_info', [])\n }\n\n get_all_cmd_info() {\n return this.exec('get_all_cmd_info', [])\n }\n\n get_all_tlm_info() {\n return this.exec('get_all_tlm_info', [])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_parameter(target, packet, item) {\n return this.exec('get_parameter', [target, packet, item])\n }\n\n get_all_packet_logger_info() {\n return this.exec('get_all_packet_logger_info', [])\n }\n\n start_logging() {\n return this.exec('start_logging', [])\n }\n\n stop_logging() {\n return this.exec('stop_logging', [])\n }\n\n start_cmd_log(log_writer_name) {\n return this.exec('start_cmd_log', [log_writer_name])\n }\n\n start_tlm_log(log_writer_name) {\n return this.exec('start_tlm_log', [log_writer_name])\n }\n\n stop_cmd_log(log_writer_name) {\n return this.exec('stop_cmd_log', [log_writer_name])\n }\n\n stop_tlm_log(log_writer_name) {\n return this.exec('stop_tlm_log', [log_writer_name])\n }\n\n get_server_status() {\n return this.exec('get_server_status', [])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n get_background_tasks() {\n return this.exec('get_background_tasks', [])\n }\n\n start_background_task(name) {\n return this.exec('start_background_task', [name])\n }\n\n stop_background_task(name) {\n return this.exec('stop_background_task', [name])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_oldest_logfile() {\n return this.exec('get_oldest_logfile', [])\n }\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_list() {\n return this.exec('get_target_list', [])\n }\n\n get_telemetry(target_name, packet_name) {\n return this.exec('get_telemetry', [target_name, packet_name])\n }\n\n get_all_telemetry(target_name) {\n return this.exec('get_all_telemetry', [target_name])\n }\n\n get_all_telemetry_list(target_name) {\n return this.exec('get_all_telemetry_list', [target_name])\n }\n\n // Called by PacketViewerComponent\n async get_tlm_packet(target_name, packet_name, value_type) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n var len = data.length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n // Called by PacketViewerComponent\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n // Called by CmdTlmServer Tlm Packets tab\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n // Called by CosmosScreenComponent\n async get_tlm_values(items) {\n const data = await this.exec('get_tlm_values', [items])\n var len = data[0].length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n return data\n }\n\n // Called by LimitsbarWidget\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n // Called by LimitsMonitorComponent\n async tlm(target_name, packet_name, item_name) {\n const data = await this.exec('tlm', [target_name, packet_name, item_name])\n var converted = this.decode_cosmos_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n get_all_commands(target_name) {\n return this.exec('get_all_commands', [target_name])\n }\n\n get_all_commands_list(target_name) {\n return this.exec('get_all_commands_list', [target_name])\n }\n\n get_command(target_name, command_name) {\n return this.exec('get_command', [target_name, command_name])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED'\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n // Called by CmdTlmServer Cmd Packets tab\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list) {\n var converted = null\n for (var key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_cosmos_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.states === null)?_c('v-text-field',{attrs:{\"value\":_vm.value.val,\"hide-details\":\"\",\"dense\":\"\",\"data-test\":\"cmd-param-value\"},on:{\"change\":_vm.handleChange}}):_c('v-container',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_c('v-overflow-btn',{staticClass:\"mr-4\",staticStyle:{},attrs:{\"items\":_vm.states,\"item-text\":\"label\",\"item-value\":\"value\",\"label\":\"State\",\"hide-details\":\"\",\"dense\":\"\",\"data-test\":\"cmd-param-select\"},on:{\"change\":_vm.handleStateChange},model:{value:(_vm.value.selected_state),callback:function ($$v) {_vm.$set(_vm.value, \"selected_state\", $$v)},expression:\"value.selected_state\"}})],1),_c('v-col',[_c('v-text-field',{attrs:{\"value\":_vm.stateValue,\"hide-details\":\"\",\"dense\":\"\",\"data-test\":\"cmd-param-value\"},on:{\"change\":_vm.handleChange}})],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-text-field\n v-if=\"states === null\"\n :value=\"value.val\"\n hide-details\n dense\n @change=\"handleChange\"\n data-test=\"cmd-param-value\"\n />\n <v-container v-else>\n <v-row no-gutters>\n <v-col>\n <v-overflow-btn\n :items=\"states\"\n v-model=\"value.selected_state\"\n @change=\"handleStateChange\"\n item-text=\"label\"\n item-value=\"value\"\n label=\"State\"\n style=\"primary\"\n class=\"mr-4\"\n hide-details\n dense\n data-test=\"cmd-param-select\"\n />\n </v-col>\n <v-col>\n <v-text-field\n :value=\"stateValue\"\n @change=\"handleChange\"\n hide-details\n dense\n data-test=\"cmd-param-value\"\n />\n </v-col>\n </v-row>\n </v-container>\n </div>\n</template>\n\n<script>\nexport default {\n model: {\n prop: 'initialValue',\n event: 'input',\n },\n props: {\n statesInHex: {\n type: Boolean,\n default: false,\n },\n initialValue: {\n type: Object,\n default: () => ({\n val: '',\n states: null,\n selected_state: null,\n selected_state_label: '',\n manual_value: null,\n }),\n },\n },\n data() {\n return {\n value: this.initialValue,\n }\n },\n computed: {\n stateValue() {\n if (this.statesInHex) {\n return '0x' + this.value.val.toString(16)\n } else {\n return this.value.val\n }\n },\n states() {\n if (this.value.states != null) {\n var calcStates = []\n for (var key in this.value.states) {\n if (Object.prototype.hasOwnProperty.call(this.value.states, key)) {\n calcStates.push({ label: key, value: this.value.states[key].value })\n }\n }\n calcStates.push({\n label: 'MANUALLY ENTERED',\n value: 'MANUALLY ENTERED',\n })\n\n // TBD pick default better (use actual default instead of just first item in list)\n return calcStates\n } else {\n return null\n }\n },\n },\n methods: {\n handleChange(value) {\n this.value.val = value\n this.value.manual_value = value\n if (this.value.states) {\n var selected_state = 'MANUALLY ENTERED'\n var selected_state_label = 'MANUALLY_ENTERED'\n for (const state of this.states) {\n if (state.value === parseInt(value)) {\n selected_state = parseInt(value)\n selected_state_label = state.label\n break\n }\n }\n this.value.selected_state = selected_state\n this.value.selected_state_label = selected_state_label\n } else {\n this.value.selected_state = null\n }\n this.$emit('input', this.value)\n },\n\n handleStateChange(value) {\n var selected_state_label = null\n var selected_state = null\n for (var index = 0; index < this.states.length; index++) {\n if (value == this.states[index].value) {\n selected_state_label = this.states[index].label\n selected_state = value\n break\n }\n }\n this.value.selected_state_label = selected_state_label\n if (selected_state_label == 'MANUALLY ENTERED') {\n this.value.val = this.value.manual_value\n // Stop propagation of the click event so the editor stays active\n // to let the operator enter a manual value.\n // event.originalEvent.stopPropagation()\n } else {\n this.value.val = selected_state\n this.$emit('input', this.value)\n }\n },\n },\n}\n</script>\n<style scoped>\n.v-overflow-btn {\n margin-top: 0px;\n}\n.container {\n padding: 0px;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandParameterEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandParameterEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CommandParameterEditor.vue?vue&type=template&id=49aaed43&scoped=true&\"\nimport script from \"./CommandParameterEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./CommandParameterEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CommandParameterEditor.vue?vue&type=style&index=0&id=49aaed43&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49aaed43\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('top-bar',{attrs:{\"menus\":_vm.menus,\"title\":_vm.title}}),_c('target-packet-item-chooser',{attrs:{\"initial-target-name\":this.$route.params.target,\"initial-packet-name\":this.$route.params.packet,\"disabled\":_vm.sendDisabled,\"button-text\":\"Send\",\"mode\":\"cmd\"},on:{\"on-set\":function($event){return _vm.commandChanged($event)},\"click\":function($event){return _vm.buildCmd($event)}}}),(_vm.rows.length != 0)?_c('v-card',[_c('v-card-title',[_vm._v(\" Parameters \"),_c('v-spacer'),_c('v-text-field',{attrs:{\"append-icon\":\"mdi-magnify\",\"label\":\"Search\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.rows,\"search\":_vm.search,\"calculate-widths\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\",\"multi-sort\":\"\",\"dense\":\"\"},on:{\"contextmenu:row\":_vm.showContextMenu},scopedSlots:_vm._u([{key:\"item.val_and_states\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('command-parameter-editor',{attrs:{\"states-in-hex\":_vm.statesInHex},model:{value:(item.val_and_states),callback:function ($$v) {_vm.$set(item, \"val_and_states\", $$v)},expression:\"item.val_and_states\"}})]}}],null,false,1123654540)})],1):_vm._e(),_c('div',{staticClass:\"ma-3\"},[_vm._v(\"Status: \"+_vm._s(_vm.status))]),_c('div',{staticClass:\"mt-3\"},[_vm._v(\" Command History: (Pressing Enter on the line re-executes the command) \")]),_c('v-textarea',{ref:\"history\",attrs:{\"value\":_vm.history,\"solo\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"data-test\":\"sender-history\",\"background-color\":_vm.getBackgroundColor()},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.historyEnter($event)}}}),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.targetName,\"packet-name\":_vm.commandName,\"item-name\":_vm.parameterName,\"type\":'cmd'},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}}),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.displayErrorDialog),callback:function ($$v) {_vm.displayErrorDialog=$$v},expression:\"displayErrorDialog\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Error \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"mx-1\"},[_c('v-row',{staticClass:\"my-2\"},[_c('v-card-text',[_c('span',{domProps:{\"textContent\":_vm._s(_vm.status)}})])],1),_c('v-row',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"data-test\":\"error-dialog-ok\"},on:{\"click\":function($event){_vm.displayErrorDialog = false}}},[_vm._v(\" Ok \")])],1)],1)])],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.displaySendHazardous),callback:function ($$v) {_vm.displaySendHazardous=$$v},expression:\"displaySendHazardous\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Hazardous Warning \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"mx-1\"},[_c('v-row',{staticClass:\"my-2\"},[_c('span',[_vm._v(\" Warning: Command \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.commandName)+\" is Hazardous. Send? \")])]),_c('v-row',[_c('v-spacer'),_c('v-btn',{attrs:{\"outlined\":\"\",\"data-test\":\"send-hazardous-no\"},on:{\"click\":_vm.cancelHazardousCmd}},[_vm._v(\" No \")]),_c('v-btn',{staticClass:\"primary mx-1\",attrs:{\"data-test\":\"send-hazardous-yes\"},on:{\"click\":_vm.sendHazardousCmd}},[_vm._v(\" Yes \")])],1)],1)])],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.displaySendRaw),callback:function ($$v) {_vm.displaySendRaw=$$v},expression:\"displaySendRaw\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Send Raw \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"mx-1\"},[_c('v-row',{staticClass:\"my-2\"},[_c('v-col',[_vm._v(\"Interface:\")]),_c('v-col',[_c('v-select',{attrs:{\"solo\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.interfaces,\"item-text\":\"label\",\"item-value\":\"value\"},model:{value:(_vm.selectedInterface),callback:function ($$v) {_vm.selectedInterface=$$v},expression:\"selectedInterface\"}})],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_vm._v(\"Filename:\")]),_c('v-col',[_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":function($event){return _vm.selectRawCmdFile($event)}}})])],1),_c('v-row',[_c('v-spacer'),_c('v-btn',{attrs:{\"outlined\":\"\",\"data-test\":\"raw-cancel\"},on:{\"click\":_vm.cancelRawCmd}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"primary\",attrs:{\"data-test\":\"raw-ok\"},on:{\"click\":_vm.sendRawCmd}},[_vm._v(\" Ok \")])],1)],1)])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandSender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandSender.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CommandSender.vue?vue&type=template&id=77790331&\"\nimport script from \"./CommandSender.vue?vue&type=script&lang=js&\"\nexport * from \"./CommandSender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Details \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.packetName)+\" \"+_vm._s(_vm.itemName)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.details.description))]),_c('v-card-text',[_c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.type === 'tlm')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Item Values\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Raw Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.rawValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Converted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.convertedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Formatted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.formattedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"With Units Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.unitsValue))])],1)],1)],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Offset\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_offset))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_size))])],1),(_vm.details.array_size)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Array Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.array_size))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Data Type\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.data_type))])],1),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Minimum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.minimum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Maximum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.maximum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Default\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.default))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Format String\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.format_string))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Read Conversion\")]),(_vm.details.read_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.read_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.read_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Write Conversion\")]),(_vm.details.write_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.write_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.write_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Id Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.id_value))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Full\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units_full))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Abbr\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Endianness\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.endianness))])],1),(_vm.details.states)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.states),function(state,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(state.value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.limits)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.limits),function(limit,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_vm._v(\" \"+_vm._s(_vm.formatLimit(limit))+\" \"),_c('v-col')],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.meta)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.meta),function(value,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col',[_vm._v(\"None\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Details </span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-title>\n {{ targetName }} {{ packetName }} {{ itemName }}\n </v-card-title>\n <v-card-subtitle>{{ details.description }}</v-card-subtitle>\n <v-card-text>\n <v-container fluid>\n <v-row no-gutters v-if=\"type === 'tlm'\">\n <v-col cols=\"3\" class=\"label\">Item Values</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Raw Value</v-col>\n <v-col>{{ rawValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Converted Value</v-col>\n <v-col>{{ convertedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Formatted Value</v-col>\n <v-col>{{ formattedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">With Units Value</v-col>\n <v-col>{{ unitsValue }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Offset</v-col>\n <v-col>{{ details.bit_offset }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Size</v-col>\n <v-col>{{ details.bit_size }}</v-col>\n </v-row>\n <v-row v-if=\"details.array_size\" no-gutters>\n <v-col cols=\"3\" class=\"label\">Array Size</v-col>\n <v-col>{{ details.array_size }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Data Type</v-col>\n <v-col>{{ details.data_type }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Minimum</v-col>\n <v-col>{{ details.minimum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Maximum</v-col>\n <v-col>{{ details.maximum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Default</v-col>\n <v-col>{{ details.default }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Format String</v-col>\n <v-col>{{ details.format_string }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Read Conversion</v-col>\n <v-col v-if=\"details.read_conversion\">\n Class: {{ details.read_conversion.class }}\n <br />\n Params:\n {{ details.read_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Write Conversion</v-col>\n <v-col v-if=\"details.write_conversion\">\n Class: {{ details.write_conversion.class }}\n <br />\n Params:\n {{ details.write_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Id Value</v-col>\n <v-col>{{ details.id_value }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Full</v-col>\n <v-col>{{ details.units_full }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Abbr</v-col>\n <v-col>{{ details.units }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Endianness</v-col>\n <v-col>{{ details.endianness }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.states\">\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(state, key) in details.states\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ state.value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.limits\">\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(limit, key) in details.limits\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n {{ formatLimit(limit) }}\n <v-col></v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.meta\">\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters v-for=\"(value, key) in details.meta\" :key=\"key\">\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row v-else no-gutters>\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col>None</v-col>\n </v-row>\n </v-container>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n type: {\n default: 'tlm',\n validator: function (value) {\n // The value must match one of these strings\n return ['cmd', 'tlm'].indexOf(value) !== -1\n },\n },\n targetName: String,\n packetName: String,\n itemName: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n details: Object,\n updater: null,\n rawValue: null,\n convertedValue: null,\n formattedValue: null,\n unitsValue: null,\n }\n },\n computed: {\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n created() {\n this.api = new CosmosApi()\n },\n beforeDestroy() {\n clearInterval(this.updater)\n this.updater = null\n },\n watch: {\n // Create a watcher on value which is the indicator to display the dialog\n // If value is true we request the details from the server\n // If this is a tlm dialog we setup an interval to get the telemetry values\n value: function (newValue, oldValue) {\n if (newValue) {\n this.requestDetails()\n if (this.type === 'tlm') {\n this.updater = setInterval(() => {\n this.api\n .get_tlm_values([\n `${this.targetName}__${this.packetName}__${this.itemName}__RAW`,\n `${this.targetName}__${this.packetName}__${this.itemName}__CONVERTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__FORMATTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__WITH_UNITS`,\n ])\n .then((values) => {\n this.rawValue = values[0][0]\n this.convertedValue = values[1][0]\n this.formattedValue = values[2][0]\n this.unitsValue = values[3][0]\n })\n }, 1000)\n }\n } else {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n },\n methods: {\n requestDetails() {\n if (this.type === 'tlm') {\n this.api\n .get_item(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n } else {\n this.api\n .get_parameter(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n }\n },\n formatLimit(limit) {\n if (limit.green_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high +\n ' GL/' +\n limit.green_low +\n ' GH/' +\n limit.green_high\n )\n } else if (limit.red_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high\n )\n } else {\n return limit\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-weight: bold;\n text-transform: capitalize;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DetailsDialog.vue?vue&type=template&id=3eb9665d&scoped=true&\"\nimport script from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3eb9665d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"c-chooser px-0\"},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-target\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Target\",\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.targetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.targetNameChanged},model:{value:(_vm.selectedTargetName),callback:function ($$v) {_vm.selectedTargetName=$$v},expression:\"selectedTargetName\"}})],1),_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-packet\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Packet\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.packetsDisabled,\"items\":_vm.packetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.packetNameChanged},model:{value:(_vm.selectedPacketName),callback:function ($$v) {_vm.selectedPacketName=$$v},expression:\"selectedPacketName\"}})],1),(_vm.chooseItem && !_vm.buttonDisabled)?_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-item\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Item\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.itemsDisabled,\"items\":_vm.itemNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":function($event){return _vm.itemNameChanged($event)}},model:{value:(_vm.selectedItemName),callback:function ($$v) {_vm.selectedItemName=$$v},expression:\"selectedItemName\"}})],1):_vm._e(),(_vm.buttonText)?_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_c('v-btn',{attrs:{\"disabled\":_vm.buttonDisabled,\"block\":\"\",\"color\":\"primary\",\"data-test\":\"select-send\"},on:{\"click\":_vm.buttonPressed}},[_vm._v(\" \"+_vm._s(_vm.actualButtonText)+\" \")])],1):_vm._e()],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_vm._v(\"Description: \"+_vm._s(_vm.description))])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-container class=\"c-chooser px-0\">\n <v-row>\n <v-col :cols=\"colSize\" data-test=\"select-target\">\n <v-autocomplete\n label=\"Select Target\"\n hide-details\n dense\n @change=\"targetNameChanged\"\n :items=\"targetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedTargetName\"\n />\n </v-col>\n <v-col :cols=\"colSize\" data-test=\"select-packet\">\n <v-autocomplete\n label=\"Select Packet\"\n hide-details\n dense\n @change=\"packetNameChanged\"\n :disabled=\"packetsDisabled\"\n :items=\"packetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedPacketName\"\n />\n </v-col>\n <v-col\n v-if=\"chooseItem && !buttonDisabled\"\n :cols=\"colSize\"\n data-test=\"select-item\"\n >\n <v-autocomplete\n label=\"Select Item\"\n hide-details\n dense\n @change=\"itemNameChanged($event)\"\n :disabled=\"itemsDisabled\"\n :items=\"itemNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedItemName\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\">\n <v-btn\n :disabled=\"buttonDisabled\"\n block\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col :cols=\"colSize\">Description: {{ description }}</v-col>\n </v-row>\n </v-container>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api'\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n reduced: {\n type: String,\n default: 'DECOM',\n validator: (propValue) => {\n return [\n 'REDUCED_DAY',\n 'REDUCED_HOUR',\n 'REDUCED_MINUTE',\n 'DECOM',\n ].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n targetNames: [],\n packetNames: [],\n itemNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n selectedItemName: this.initialItemName?.toUpperCase(),\n description: '',\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n created() {\n this.internalDisabled = true\n this.api = new CosmosApi()\n this.api.get_target_list().then((result) => {\n this.targetNames = result.map((target) => {\n return { label: target, value: target }\n })\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n }\n this.updatePackets()\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n buttonDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n targetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '49%', float: 'left' }\n }\n },\n packetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '50%', float: 'right' }\n }\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n },\n watch: {\n mode: function (newVal, oldVal) {\n this.updatePackets()\n this.itemNames = []\n },\n reduced: function (newVal, oldVal) {\n this.updateItems()\n },\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_all_telemetry_list' : 'get_all_commands_list'\n this.api[cmd](this.selectedTargetName).then((packets) => {\n this.packetNames = packets.map((packet) => {\n return {\n label: packet.packet_name,\n value: packet.packet_name,\n description: packet.description,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.selectedPacketName)\n }\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n this.description = item.description\n if (this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items.map((item) => {\n if (this.reduced === 'DECOM') {\n return [{\n label: item.name,\n value: item.name,\n description: item.description,\n }]\n } else {\n return this.makeReducedItems(item)\n }\n }).reduce((result, item) => { return result.concat(item) }, [])\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.internalDisabled = false\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n }\n )\n },\n\n makeReducedItems: function (item) {\n const reducedOptions = !item.array_size && !item.states\n if (\n reducedOptions && ['UINT', 'INT', 'FLOAT'].includes(item.data_type)\n ) {\n return ['MIN', 'MAX', 'AVG', 'STDDEV'].map((ext) => {\n return {\n label: `${item.name}_${ext}`,\n value: `${item.name}_${ext}`,\n description: `${ext} ${item.description}`,\n }\n })\n }\n return []\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n this.updatePackets()\n },\n\n packetNameChanged: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n this.selectedPacketName = packet.value\n this.description = packet.description\n }\n if (this.chooseItem) {\n this.selectedItemName = ''\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n } else {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n reduced: this.reduced,\n })\n })\n }\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n reduced: this.reduced,\n })\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TargetPacketItemChooser.vue?vue&type=template&id=1cc45128&\"\nimport script from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\nexport * from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('mounting-portal',{attrs:{\"mount-to\":\"#cosmos-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider',{key:j}):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled},domProps:{\"textContent\":_vm._s(option.icon)}})],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')),domProps:{\"textContent\":_vm._s(option.label)}}):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',{domProps:{\"textContent\":_vm._s(_vm.title)}}),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <mounting-portal mount-to=\"#cosmos-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" :key=\"j\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :key=\"j\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n >\n <v-list-item-action\n v-if=\"option.radio\"\n >\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action\n v-if=\"option.checkbox\"\n >\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon v-text=\"option.icon\" :disabled=\"option.disabled\" />\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n v-text=\"option.label\"\n />\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title v-text=\"title\" />\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function(string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n }\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=e3bb7458&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=e3bb7458&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3bb7458\",\n null\n \n)\n\nexport default component.exports","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-overflow-btn[data-v-49aaed43]{margin-top:0}.container[data-v-49aaed43]{padding:0}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".label[data-v-3eb9665d]{font-weight:700;text-transform:capitalize}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-list[data-v-e3bb7458] .v-label{margin-left:5px}.v-list-item__icon[data-v-e3bb7458]{margin-right:15px!important}.v-list-item__title[data-v-e3bb7458]{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandParameterEditor.vue?vue&type=style&index=0&id=49aaed43&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7e475e85\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7c1e213a\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=style&index=0&id=e3bb7458&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"a2f2c426\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["components","DetailsDialog","TargetPacketItemChooser","CommandParameterEditor","TopBar","data","title","search","headers","text","value","targetName","commandName","ignoreRangeChecks","statesInHex","showIgnoredParams","cmdRaw","ignoredParams","rows","interfaces","selectedInterface","rawCmdFile","status","history","displaySendHazardous","displayErrorDialog","displaySendRaw","sendDisabled","api","viewDetails","contextMenuShown","parameterName","reservedItemNames","x","y","contextMenuOptions","action","menus","label","items","checkbox","command","created","Api","packetName","methods","getBackgroundColor","historyEnter","event","showContextMenu","e","row","isFloat","str","isInt","isArray","removeQuotes","convertToValue","param","upcaseStr","hexStr","json_class","raw","jstr","convertToString","return_value","Object","nibble","commandChanged","replace","name","params","target","packet","catch","updateCmdParams","get_target","then","val","parameter_name","val_and_states","states","selected_state","selected_state_label","manual_value","description","units","type","statusChange","createParamList","paramList","buildCmd","sendCmd","hazardous","cmd","obs","sendHazardousCmd","cancelHazardousCmd","processCmdResponse","cmd_sent","response","msg","displayError","context","error","setupRawCmd","selectRawCmdFile","onLoad","bufView","sendRawCmd","reader","self","cancelRawCmd","request","method","url","noAuth","noScope","CosmosAuth","updateToken","defaultMinValidity","login","localStorage","cosmosToken","scope","axios","acceptOnlyDefaultHeaders","Accept","fullDefaultHeaders","get","path","put","post","delete","vueInstance","Vue","axiosInstance","baseURL","location","origin","timeout","interceptors","use","href","body","statusText","config","message","exception","class","$notify","serious","CosmosApi","kwparams","this","id","jsonrpc","keyword_params","Authorization","result","err","Error","NaN","Infinity","Number","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","item","log_writer_name","limits_set","target_name","packet_name","value_type","len","length","converted","i","decode_cosmos_type","item_name","command_name","param_list","key","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","ignored","array","render","_vm","_h","$createElement","_c","_self","attrs","on","handleChange","staticClass","staticStyle","handleStateChange","model","callback","$$v","$set","expression","stateValue","staticRenderFns","prop","props","default","initialValue","computed","calcStates","component","$route","$event","_v","scopedSlots","_u","fn","ref","_e","_s","indexOf","_k","keyCode","_l","index","stopPropagation","apply","arguments","domProps","show","itemName","details","rawValue","convertedValue","formattedValue","unitsValue","bit_offset","bit_size","array_size","data_type","minimum","maximum","format_string","read_conversion","write_conversion","id_value","units_full","endianness","state","limit","formatLimit","validator","updater","set","beforeDestroy","clearInterval","watch","get_tlm_values","requestDetails","get_item","get_parameter","colSize","targetNames","targetNameChanged","selectedTargetName","packetsDisabled","packetNames","packetNameChanged","selectedPacketName","chooseItem","buttonDisabled","itemsDisabled","itemNames","itemNameChanged","selectedItemName","buttonPressed","actualButtonText","allowAll","buttonText","disabled","initialTargetName","initialPacketName","initialItemName","mode","reduced","includes","propValue","unknown","vertical","internalDisabled","ALL","UNKNOWN","targetChooserStyle","width","float","packetChooserStyle","updatePackets","updateItems","reduce","makeReducedItems","reducedOptions","allTargetPacketItems","allPacketItems","menu","_g","_b","formatDT","radioGroup","option","j","checked","icon","radio","style","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}
1
+ {"version":3,"file":"js/93.js","mappings":"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","sources":["webpack://@cosmosc2/tool-cmdsender/src/tools/CommandSender/CommandSender.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/services/api.js","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?c553","webpack://@cosmosc2/tool-cmdsender/src/tools/CommandSender/CommandParameterEditor.vue","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?5284","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandSender.vue?fb31","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandSender.vue?e307","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandSender.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?88c8","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?7eb0","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?fdbd","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?1730","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?44cd","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?b395","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?0cb9","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?8f71","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?82b3","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?8c14","webpack://@cosmosc2/tool-cmdsender/./src/tools/CommandSender/CommandParameterEditor.vue?1299","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/DetailsDialog.vue?dfc1","webpack://@cosmosc2/tool-cmdsender/../cosmosc2-tool-common/src/components/TopBar.vue?89b9"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <top-bar :menus=\"menus\" :title=\"title\" />\n\n <target-packet-item-chooser\n :initial-target-name=\"this.$route.params.target\"\n :initial-packet-name=\"this.$route.params.packet\"\n @on-set=\"commandChanged($event)\"\n @click=\"buildCmd($event)\"\n :disabled=\"sendDisabled\"\n button-text=\"Send\"\n mode=\"cmd\"\n />\n\n <v-card v-if=\"rows.length != 0\">\n <v-card-title>\n Parameters\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n append-icon=\"mdi-magnify\"\n label=\"Search\"\n single-line\n hide-details\n />\n </v-card-title>\n <v-data-table\n :headers=\"headers\"\n :items=\"rows\"\n :search=\"search\"\n calculate-widths\n disable-pagination\n hide-default-footer\n multi-sort\n dense\n @contextmenu:row=\"showContextMenu\"\n >\n <template v-slot:item.val_and_states=\"{ item }\">\n <command-parameter-editor\n v-model=\"item.val_and_states\"\n :states-in-hex=\"statesInHex\"\n />\n </template>\n </v-data-table>\n </v-card>\n <div class=\"ma-3\">Status: {{ status }}</div>\n <div class=\"mt-3\">\n Command History: (Pressing Enter on the line re-executes the command)\n </div>\n <v-textarea\n ref=\"history\"\n :value=\"history\"\n solo\n dense\n hide-details\n data-test=\"sender-history\"\n @keydown.enter=\"historyEnter($event)\"\n :background-color=\"getBackgroundColor()\"\n />\n\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n <details-dialog\n :target-name=\"targetName\"\n :packet-name=\"commandName\"\n :item-name=\"parameterName\"\n :type=\"'cmd'\"\n v-model=\"viewDetails\"\n />\n\n <v-dialog v-model=\"displayErrorDialog\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Error </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"mx-1\">\n <v-row class=\"my-2\">\n <v-card-text>\n <span v-text=\"status\" />\n </v-card-text>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n @click=\"displayErrorDialog = false\"\n color=\"primary\"\n data-test=\"error-dialog-ok\"\n >\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <v-dialog v-model=\"displaySendHazardous\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Hazardous Warning </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"mx-1\">\n <v-row class=\"my-2\">\n <span>\n Warning: Command {{ targetName }} {{ commandName }} is\n Hazardous. Send?\n </span>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n @click=\"cancelHazardousCmd\"\n outlined\n data-test=\"send-hazardous-no\"\n >\n No\n </v-btn>\n <v-btn\n @click=\"sendHazardousCmd\"\n class=\"primary mx-1\"\n data-test=\"send-hazardous-yes\"\n >\n Yes\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <v-dialog v-model=\"displaySendRaw\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Send Raw </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"mx-1\">\n <v-row class=\"my-2\">\n <v-col>Interface:</v-col>\n <v-col>\n <v-select\n solo\n hide-details\n dense\n :items=\"interfaces\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedInterface\"\n />\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col>Filename:</v-col>\n <v-col>\n <input type=\"file\" @change=\"selectRawCmdFile($event)\" />\n </v-col>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn @click=\"cancelRawCmd\" outlined data-test=\"raw-cancel\">\n Cancel\n </v-btn>\n <v-btn @click=\"sendRawCmd\" class=\"primary\" data-test=\"raw-ok\">\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\nimport TargetPacketItemChooser from '@cosmosc2/tool-common/src/components/TargetPacketItemChooser'\nimport CommandParameterEditor from '@/tools/CommandSender/CommandParameterEditor'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport DetailsDialog from '@cosmosc2/tool-common/src/components/DetailsDialog'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport 'sprintf-js'\n\nexport default {\n components: {\n DetailsDialog,\n TargetPacketItemChooser,\n CommandParameterEditor,\n TopBar,\n },\n data() {\n return {\n title: 'Command Sender',\n search: '',\n headers: [\n { text: 'Name', value: 'parameter_name' },\n { text: 'Value or State', value: 'val_and_states' },\n { text: 'Units', value: 'units' },\n { text: 'Description', value: 'description' },\n ],\n targetName: '',\n commandName: '',\n ignoreRangeChecks: false,\n statesInHex: false,\n showIgnoredParams: false,\n cmdRaw: false,\n ignoredParams: [],\n rows: [],\n interfaces: [],\n selectedInterface: '',\n rawCmdFile: null,\n status: '',\n history: '',\n displaySendHazardous: false,\n displayErrorDialog: false,\n displaySendRaw: false,\n sendDisabled: false,\n api: null,\n viewDetails: false,\n contextMenuShown: false,\n parameterName: '',\n reservedItemNames: [],\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n ],\n menus: [\n // TODO: Implement send raw\n // {\n // label: 'File',\n // items: [\n // {\n // label: 'Send Raw',\n // command: () => {\n // this.setupRawCmd()\n // }\n // }\n // ]\n // },\n {\n label: 'Mode',\n items: [\n {\n label: 'Ignore Range Checks',\n checkbox: true,\n command: () => {\n this.ignoreRangeChecks = !this.ignoreRangeChecks\n },\n },\n {\n label: 'Display State Values in Hex',\n checkbox: true,\n command: () => {\n this.statesInHex = !this.statesInHex\n },\n },\n {\n label: 'Show Ignored Parameters',\n checkbox: true,\n command: () => {\n this.showIgnoredParams = !this.showIgnoredParams\n // TODO: Maybe we don't need to do this if the data-table\n // can render the whole thing and we just display with v-if\n this.updateCmdParams()\n },\n },\n {\n label: 'Disable Parameter Conversions',\n checkbox: true,\n command: () => {\n this.cmdRaw = !this.cmdRaw\n },\n },\n ],\n },\n ],\n }\n },\n created() {\n Api.get(`/cosmos-api/autocomplete/reserved-item-names`).then((response) => {\n this.reservedItemNames = response.data\n })\n this.api = new CosmosApi()\n // If we're passed in the route then manually call commandChanged to update\n if (this.$route.params.target && this.$route.params.packet) {\n this.commandChanged({\n targetName: this.$route.params.target.toUpperCase(),\n packetName: this.$route.params.packet.toUpperCase(),\n })\n }\n },\n methods: {\n getBackgroundColor() {\n return this.$vuetify.theme.parsedTheme.tertiary.darken2\n },\n historyEnter(event) {\n // Prevent the enter key from actually causing a newline\n event.preventDefault()\n const textarea = this.$refs.history.$refs.input\n let pos = textarea.selectionStart\n // Find the newline after the cursor position\n let nextNewline = textarea.value.indexOf('\\n', pos)\n // Get everything up to the next newline and split on newlines\n const lines = textarea.value.substr(0, nextNewline).split('\\n')\n let command = lines[lines.length - 1]\n // Blank commands can happen if typing return on a blank line\n if (command === '') {\n return\n }\n\n // Remove the cmd(\"\") wrapper\n let firstQuote = command.indexOf('\"')\n let lastQuote = command.lastIndexOf('\"')\n command = command.substr(firstQuote + 1, lastQuote - firstQuote - 1)\n this.sendCmd(command)\n },\n\n showContextMenu(e, row) {\n e.preventDefault()\n this.parameterName = row.item.parameter_name\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n\n isFloat(str) {\n // Regex to identify a string as a floating point number\n if (/^\\s*[-+]?\\d*\\.\\d+\\s*$/.test(str)) {\n return true\n }\n // Regex to identify a string as a floating point number in scientific notation.\n if (/^\\s*[-+]?(\\d+((\\.\\d+)?)|(\\.\\d+))[eE][-+]?\\d+\\s*$/.test(str)) {\n return true\n }\n return false\n },\n\n isInt(str) {\n // Regular expression to identify a String as an integer\n if (/^\\s*[-+]?\\d+\\s*$/.test(str)) {\n return true\n }\n\n // # Regular expression to identify a String as an integer in hexadecimal format\n if (/^\\s*0[xX][\\dabcdefABCDEF]+\\s*$/.test(str)) {\n return true\n }\n return false\n },\n\n isArray(str) {\n // Regular expression to identify a String as an Array\n if (/^\\s*\\[.*\\]\\s*$/.test(str)) {\n return true\n }\n return false\n },\n\n removeQuotes(str) {\n // Return the string with leading and trailing quotes removed\n if (str.length < 2) {\n return str\n }\n var firstChar = str.charAt(0)\n if (firstChar != '\"' && firstChar != \"'\") {\n return str\n }\n var lastChar = str.charAt(str.length - 1)\n if (firstChar != lastChar) {\n return str\n }\n return str.slice(1, -1)\n },\n\n convertToValue(param) {\n if (typeof param.val_and_states.val != 'string') {\n return param.val_and_states.val\n }\n\n var str = param.val_and_states.val\n var quotes_removed = this.removeQuotes(str)\n if (str == quotes_removed) {\n var upcaseStr = str.toUpperCase()\n\n if (\n (param.type == 'STRING' || param.type == 'BLOCK') &&\n upcaseStr.startsWith('0X')\n ) {\n var hexStr = upcaseStr.slice(2)\n if (hexStr.length % 2 != 0) {\n hexStr = '0' + hexStr\n }\n var jstr = { json_class: 'String', raw: [] }\n for (var i = 0; i < hexStr.length; i += 2) {\n var nibble = hexStr.charAt(i) + hexStr.charAt(i + 1)\n jstr.raw.push(parseInt(nibble, 16))\n }\n return jstr\n } else {\n if (upcaseStr == 'INFINITY') {\n return Infinity\n } else if (upcaseStr == '-INFINITY') {\n return -Infinity\n } else if (upcaseStr == 'NAN') {\n return NaN\n } else if (this.isFloat(str)) {\n return parseFloat(str)\n } else if (this.isInt(str)) {\n return parseInt(str)\n } else if (this.isArray(str)) {\n return eval(str)\n } else {\n return str\n }\n }\n } else {\n return quotes_removed\n }\n },\n\n convertToString(value) {\n var i = 0\n var return_value = ''\n if (Object.prototype.toString.call(value).slice(8, -1) === 'Array') {\n var arrayLength = value.length\n return_value = '[ '\n for (i = 0; i < arrayLength; i++) {\n if (\n Object.prototype.toString.call(value[i]).slice(8, -1) === 'String'\n ) {\n return_value += '\"' + value[i] + '\"'\n } else {\n return_value += value[i]\n }\n if (i != arrayLength - 1) {\n return_value += ', '\n }\n }\n return_value += ' ]'\n } else if (\n Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n ) {\n if (value.json_class == 'String' && value.raw) {\n // This is binary data, display in hex.\n return_value = '0x'\n for (i = 0; i < value.raw.length; i++) {\n var nibble = value.raw[i].toString(16).toUpperCase()\n if (nibble.length < 2) {\n nibble = '0' + nibble\n }\n return_value += nibble\n }\n } else if (value.json_class == 'Float' && value.raw) {\n return_value = value.raw\n } else {\n // TBD - are there other objects that we need to handle?\n return_value = String(value)\n }\n } else {\n return_value = String(value)\n }\n return return_value\n },\n\n commandChanged(event) {\n if (\n this.targetName !== event.targetName ||\n this.commandName !== event.packetName\n ) {\n this.targetName = event.targetName\n this.commandName = event.packetName\n // Only updateCmdParams if we're not already in the middle of an update\n if (this.sendDisabled === false) {\n this.updateCmdParams()\n }\n this.$router\n .replace({\n name: 'CommandSender',\n params: {\n target: this.targetName,\n packet: this.commandName,\n },\n })\n // catch the error in case we route to where we already are\n .catch((err) => {})\n }\n },\n\n updateCmdParams() {\n this.sendDisabled = true\n this.ignoredParams = []\n this.rows = []\n this.api\n .get_target(this.targetName)\n .then(\n (target) => {\n this.ignoredParams = target.ignored_parameters\n return this.api.get_command(this.targetName, this.commandName)\n },\n (error) => {\n this.displayError('getting ignored parameters', error)\n }\n )\n .then(\n (command) => {\n command.items.forEach((parameter) => {\n if (this.reservedItemNames.includes(parameter.name)) return\n if (\n !this.ignoredParams.includes(parameter.name) ||\n this.showIgnoredParams\n ) {\n let val = parameter.default\n if (parameter.required) {\n val = ''\n }\n if (parameter.format_string) {\n val = sprintf(parameter.format_string, parameter.default)\n }\n this.rows.push({\n parameter_name: parameter.name,\n val_and_states: {\n val: val,\n states: parameter.states,\n selected_state: null,\n selected_state_label: '',\n manual_value: null,\n },\n description: parameter.description,\n units: parameter.units,\n type: parameter.data_type,\n })\n }\n })\n this.sendDisabled = false\n this.status = ''\n },\n (error) => {\n this.displayError('getting command parameters', error)\n }\n )\n },\n\n statusChange(event) {\n this.status = event.status\n },\n\n createParamList() {\n let paramList = {}\n for (var i = 0; i < this.rows.length; i++) {\n paramList[this.rows[i].parameter_name] = this.convertToValue(\n this.rows[i]\n )\n }\n return paramList\n },\n\n buildCmd() {\n this.sendCmd(this.targetName, this.commandName, this.createParamList())\n },\n\n // Note targetName can also be the entire command to send, e.g. \"INST ABORT\" or\n // \"INST COLLECT with TYPE 0, DURATION 1, OPCODE 171, TEMP 10\" when being\n // sent from the history. In that case commandName and paramList are undefined\n // and the api calls handle that.\n sendCmd(targetName, commandName, paramList) {\n this.sendDisabled = true\n let hazardous = false\n let cmd = ''\n this.api.get_cmd_hazardous(targetName, commandName, paramList).then(\n (response) => {\n hazardous = response\n\n if (hazardous) {\n this.displaySendHazardous = true\n } else {\n let obs\n if (this.cmdRaw) {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_raw_no_range_check'\n obs = this.api.cmd_raw_no_range_check(\n targetName,\n commandName,\n paramList\n )\n } else {\n cmd = 'cmd_raw'\n obs = this.api.cmd_raw(targetName, commandName, paramList)\n }\n } else {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_no_range_check'\n obs = this.api.cmd_no_range_check(\n targetName,\n commandName,\n paramList\n )\n } else {\n cmd = 'cmd'\n obs = this.api.cmd(targetName, commandName, paramList)\n }\n }\n\n obs.then(\n (response) => {\n this.processCmdResponse(true, response)\n },\n (error) => {\n this.processCmdResponse(false, error)\n }\n )\n }\n },\n (error) => {\n this.processCmdResponse(false, error)\n }\n )\n },\n\n sendHazardousCmd() {\n this.displaySendHazardous = false\n var paramList = this.createParamList()\n\n let obs = ''\n let cmd = ''\n if (this.cmdRaw) {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_no_checks'\n obs = this.api.cmd_raw_no_checks(\n this.targetName,\n this.commandName,\n paramList\n )\n } else {\n cmd = 'cmd_no_hazardous_check'\n obs = this.api.cmd_raw_no_hazardous_check(\n this.targetName,\n this.commandName,\n paramList\n )\n }\n } else {\n if (this.ignoreRangeChecks) {\n cmd = 'cmd_no_checks'\n obs = this.api.cmd_no_checks(\n this.targetName,\n this.commandName,\n paramList\n )\n } else {\n cmd = 'cmd_no_hazardous_check'\n obs = this.api.cmd_no_hazardous_check(\n this.targetName,\n this.commandName,\n paramList\n )\n }\n }\n\n obs.then(\n (response) => {\n this.processCmdResponse(true, response)\n },\n (error) => {\n this.processCmdResponse(false, error)\n }\n )\n },\n\n cancelHazardousCmd() {\n this.displaySendHazardous = false\n this.status = 'Hazardous command not sent'\n this.sendDisabled = false\n },\n\n processCmdResponse(cmd_sent, response) {\n var msg = ''\n if (cmd_sent) {\n msg = 'cmd(\"' + response[0] + ' ' + response[1]\n var keys = Object.keys(response[2])\n if (keys.length > 0) {\n msg += ' with '\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n msg += key + ' ' + this.convertToString(response[2][key])\n if (i < keys.length - 1) {\n msg += ', '\n }\n }\n }\n msg += '\")'\n if (!this.history.includes(msg)) {\n this.history += msg + '\\n'\n }\n msg += ' sent.'\n // Add the number of commands sent to the status message\n if (this.status.includes(msg)) {\n let parts = this.status.split('sent.')\n if (parts[1].includes('(')) {\n let num = parseInt(parts[1].substr(2, parts[1].indexOf(')') - 2))\n msg = parts[0] + 'sent. (' + (num + 1) + ')'\n } else {\n msg += ' (2)'\n }\n }\n this.status = msg\n } else {\n var context = 'sending ' + this.targetName + ' ' + this.commandName\n this.displayError(context, response, true)\n }\n this.sendDisabled = false\n },\n\n displayError(context, error, showDialog = false) {\n this.status = `Error ${context} due to ${error.name}`\n if (error.message && error.message != '') {\n this.status += ': '\n this.status += error.message\n }\n if (showDialog) {\n this.displayErrorDialog = true\n }\n },\n\n setupRawCmd() {\n this.api.get_interface_names().then(\n (response) => {\n var interfaces = []\n for (var i = 0; i < response.length; i++) {\n interfaces.push({ label: response[i], value: response[i] })\n }\n this.interfaces = interfaces\n this.selectedInterface = interfaces[0].value\n this.displaySendRaw = true\n },\n (error) => {\n this.displaySendRaw = false\n this.displayError('getting interface names', error, true)\n }\n )\n },\n\n selectRawCmdFile(event) {\n this.rawCmdFile = event.target.files[0]\n },\n\n onLoad(event) {\n var bufView = new Uint8Array(event.target.result)\n var jstr = { json_class: 'String', raw: [] }\n for (var i = 0; i < bufView.length; i++) {\n jstr.raw.push(bufView[i])\n }\n\n this.api.send_raw(this.selectedInterface, jstr).then(\n () => {\n this.displaySendRaw = false\n this.status =\n 'Sent ' +\n bufView.length +\n ' bytes to interface ' +\n this.selectedInterface\n },\n (error) => {\n this.displaySendRaw = false\n this.displayError('sending raw data', error, true)\n }\n )\n },\n\n sendRawCmd() {\n var self = this\n var reader = new FileReader()\n reader.onload = function (e) {\n self.onLoad(e)\n }\n reader.onerror = function (e) {\n self.displaySendRaw = false\n var target = e.target\n self.displayError('sending raw data', target.error, true)\n }\n // TBD - use the other event handlers to implement a progress bar for the\n // file upload. Handle abort as well?\n //reader.onloadstart = function(e) {}\n //reader.onprogress = function(e) {}\n //reader.onloadend = function(e) {}\n //reader.onabort = function(e) {}\n\n reader.readAsArrayBuffer(this.rawCmdFile)\n },\n\n cancelRawCmd() {\n this.displaySendRaw = false\n this.status = 'Raw command not sent'\n },\n },\n}\n</script>\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nconst request = async function (\n method,\n url,\n { data, params = {}, headers, noAuth = false, noScope = false } = {}\n) {\n if (!noAuth) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n headers['Authorization'] = localStorage.cosmosToken\n }\n if (!noScope && !params['scope']) {\n params['scope'] = localStorage.scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('get', path, { params, headers, noScope, noAuth })\n },\n\n put: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('put', path, { data, params, headers, noScope, noAuth })\n },\n\n post: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('post', path, { data, params, headers, noScope, noAuth })\n },\n\n delete: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('delete', path, { params, headers, noScope, noAuth })\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\n // Individual tools can set axiosIgnoreResponse to an error code\n // they potentially expect, e.g. '404', in which case we ignore it\n // Since localStorage only supports strings call toString on the status\n if (\n localStorage.axiosIgnoreResponse === error.response.status.toString()\n ) {\n return Promise.reject(error)\n }\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n } else {\n throw error\n }\n }\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nexport class CosmosApi {\n id = 1\n\n constructor() {}\n\n // This is hacky Json-rpc for now. Should probably use a jsonrpc library.\n async exec(method, params, kwparams = {}) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/cosmos-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.cosmosToken,\n 'Content-Type': 'application/json-rpc',\n },\n }\n )\n // var data = response.data\n // if (data.error) {\n // var err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n var err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n err.name = 'Unknown error'\n }\n //console.log(error)\n throw err\n }\n }\n\n decode_cosmos_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_cosmos_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n connect_interface(interface_name) {\n return this.exec('connect_interface', [interface_name])\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_all_target_info() {\n return this.exec('get_all_target_info', [])\n }\n\n get_all_cmd_info() {\n return this.exec('get_all_cmd_info', [])\n }\n\n get_all_tlm_info() {\n return this.exec('get_all_tlm_info', [])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_parameter(target, packet, item) {\n return this.exec('get_parameter', [target, packet, item])\n }\n\n get_all_packet_logger_info() {\n return this.exec('get_all_packet_logger_info', [])\n }\n\n start_logging() {\n return this.exec('start_logging', [])\n }\n\n stop_logging() {\n return this.exec('stop_logging', [])\n }\n\n start_cmd_log(log_writer_name) {\n return this.exec('start_cmd_log', [log_writer_name])\n }\n\n start_tlm_log(log_writer_name) {\n return this.exec('start_tlm_log', [log_writer_name])\n }\n\n stop_cmd_log(log_writer_name) {\n return this.exec('stop_cmd_log', [log_writer_name])\n }\n\n stop_tlm_log(log_writer_name) {\n return this.exec('stop_tlm_log', [log_writer_name])\n }\n\n get_server_status() {\n return this.exec('get_server_status', [])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n get_background_tasks() {\n return this.exec('get_background_tasks', [])\n }\n\n start_background_task(name) {\n return this.exec('start_background_task', [name])\n }\n\n stop_background_task(name) {\n return this.exec('stop_background_task', [name])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_oldest_logfile() {\n return this.exec('get_oldest_logfile', [])\n }\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_list() {\n return this.exec('get_target_list', [])\n }\n\n get_telemetry(target_name, packet_name) {\n return this.exec('get_telemetry', [target_name, packet_name])\n }\n\n get_all_telemetry(target_name) {\n return this.exec('get_all_telemetry', [target_name])\n }\n\n get_all_telemetry_list(target_name) {\n return this.exec('get_all_telemetry_list', [target_name])\n }\n\n // Called by PacketViewerComponent\n async get_tlm_packet(target_name, packet_name, value_type) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n var len = data.length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n // Called by PacketViewerComponent\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n // Called by CmdTlmServer Tlm Packets tab\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n // Called by CosmosScreenComponent\n async get_tlm_values(items) {\n const data = await this.exec('get_tlm_values', [items])\n var len = data[0].length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n return data\n }\n\n // Called by LimitsbarWidget\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n // Called by LimitsMonitorComponent\n async tlm(target_name, packet_name, item_name) {\n const data = await this.exec('tlm', [target_name, packet_name, item_name])\n var converted = this.decode_cosmos_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n get_all_commands(target_name) {\n return this.exec('get_all_commands', [target_name])\n }\n\n get_all_commands_list(target_name) {\n return this.exec('get_all_commands_list', [target_name])\n }\n\n get_command(target_name, command_name) {\n return this.exec('get_command', [target_name, command_name])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED'\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n // Called by CmdTlmServer Cmd Packets tab\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list) {\n var converted = null\n for (var key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_cosmos_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n\n // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.states === null)?_c('v-text-field',{attrs:{\"value\":_vm.value.val,\"hide-details\":\"\",\"dense\":\"\",\"data-test\":\"cmd-param-value\"},on:{\"change\":_vm.handleChange}}):_c('v-container',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_c('v-overflow-btn',{staticClass:\"mr-4\",staticStyle:{},attrs:{\"items\":_vm.states,\"item-text\":\"label\",\"item-value\":\"value\",\"label\":\"State\",\"hide-details\":\"\",\"dense\":\"\",\"data-test\":\"cmd-param-select\"},on:{\"change\":_vm.handleStateChange},model:{value:(_vm.value.selected_state),callback:function ($$v) {_vm.$set(_vm.value, \"selected_state\", $$v)},expression:\"value.selected_state\"}})],1),_c('v-col',[_c('v-text-field',{attrs:{\"value\":_vm.stateValue,\"hide-details\":\"\",\"dense\":\"\",\"data-test\":\"cmd-param-value\"},on:{\"change\":_vm.handleChange}})],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-text-field\n v-if=\"states === null\"\n :value=\"value.val\"\n hide-details\n dense\n @change=\"handleChange\"\n data-test=\"cmd-param-value\"\n />\n <v-container v-else>\n <v-row no-gutters>\n <v-col>\n <v-overflow-btn\n :items=\"states\"\n v-model=\"value.selected_state\"\n @change=\"handleStateChange\"\n item-text=\"label\"\n item-value=\"value\"\n label=\"State\"\n style=\"primary\"\n class=\"mr-4\"\n hide-details\n dense\n data-test=\"cmd-param-select\"\n />\n </v-col>\n <v-col>\n <v-text-field\n :value=\"stateValue\"\n @change=\"handleChange\"\n hide-details\n dense\n data-test=\"cmd-param-value\"\n />\n </v-col>\n </v-row>\n </v-container>\n </div>\n</template>\n\n<script>\nexport default {\n model: {\n prop: 'initialValue',\n event: 'input',\n },\n props: {\n statesInHex: {\n type: Boolean,\n default: false,\n },\n initialValue: {\n type: Object,\n default: () => ({\n val: '',\n states: null,\n selected_state: null,\n selected_state_label: '',\n manual_value: null,\n }),\n },\n },\n data() {\n return {\n value: this.initialValue,\n }\n },\n computed: {\n stateValue() {\n if (this.statesInHex) {\n return '0x' + this.value.val.toString(16)\n } else {\n return this.value.val\n }\n },\n states() {\n if (this.value.states != null) {\n var calcStates = []\n for (var key in this.value.states) {\n if (Object.prototype.hasOwnProperty.call(this.value.states, key)) {\n calcStates.push({ label: key, value: this.value.states[key].value })\n }\n }\n calcStates.push({\n label: 'MANUALLY ENTERED',\n value: 'MANUALLY ENTERED',\n })\n\n // TBD pick default better (use actual default instead of just first item in list)\n return calcStates\n } else {\n return null\n }\n },\n },\n methods: {\n handleChange(value) {\n this.value.val = value\n this.value.manual_value = value\n if (this.value.states) {\n var selected_state = 'MANUALLY ENTERED'\n var selected_state_label = 'MANUALLY_ENTERED'\n for (const state of this.states) {\n if (state.value === parseInt(value)) {\n selected_state = parseInt(value)\n selected_state_label = state.label\n break\n }\n }\n this.value.selected_state = selected_state\n this.value.selected_state_label = selected_state_label\n } else {\n this.value.selected_state = null\n }\n this.$emit('input', this.value)\n },\n\n handleStateChange(value) {\n var selected_state_label = null\n var selected_state = null\n for (var index = 0; index < this.states.length; index++) {\n if (value == this.states[index].value) {\n selected_state_label = this.states[index].label\n selected_state = value\n break\n }\n }\n this.value.selected_state_label = selected_state_label\n if (selected_state_label == 'MANUALLY ENTERED') {\n this.value.val = this.value.manual_value\n // Stop propagation of the click event so the editor stays active\n // to let the operator enter a manual value.\n // event.originalEvent.stopPropagation()\n } else {\n this.value.val = selected_state\n this.$emit('input', this.value)\n }\n },\n },\n}\n</script>\n<style scoped>\n.v-overflow-btn {\n margin-top: 0px;\n}\n.container {\n padding: 0px;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandParameterEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandParameterEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CommandParameterEditor.vue?vue&type=template&id=49aaed43&scoped=true&\"\nimport script from \"./CommandParameterEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./CommandParameterEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CommandParameterEditor.vue?vue&type=style&index=0&id=49aaed43&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49aaed43\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('top-bar',{attrs:{\"menus\":_vm.menus,\"title\":_vm.title}}),_c('target-packet-item-chooser',{attrs:{\"initial-target-name\":this.$route.params.target,\"initial-packet-name\":this.$route.params.packet,\"disabled\":_vm.sendDisabled,\"button-text\":\"Send\",\"mode\":\"cmd\"},on:{\"on-set\":function($event){return _vm.commandChanged($event)},\"click\":function($event){return _vm.buildCmd($event)}}}),(_vm.rows.length != 0)?_c('v-card',[_c('v-card-title',[_vm._v(\" Parameters \"),_c('v-spacer'),_c('v-text-field',{attrs:{\"append-icon\":\"mdi-magnify\",\"label\":\"Search\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.rows,\"search\":_vm.search,\"calculate-widths\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\",\"multi-sort\":\"\",\"dense\":\"\"},on:{\"contextmenu:row\":_vm.showContextMenu},scopedSlots:_vm._u([{key:\"item.val_and_states\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('command-parameter-editor',{attrs:{\"states-in-hex\":_vm.statesInHex},model:{value:(item.val_and_states),callback:function ($$v) {_vm.$set(item, \"val_and_states\", $$v)},expression:\"item.val_and_states\"}})]}}],null,false,1123654540)})],1):_vm._e(),_c('div',{staticClass:\"ma-3\"},[_vm._v(\"Status: \"+_vm._s(_vm.status))]),_c('div',{staticClass:\"mt-3\"},[_vm._v(\" Command History: (Pressing Enter on the line re-executes the command) \")]),_c('v-textarea',{ref:\"history\",attrs:{\"value\":_vm.history,\"solo\":\"\",\"dense\":\"\",\"hide-details\":\"\",\"data-test\":\"sender-history\",\"background-color\":_vm.getBackgroundColor()},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.historyEnter($event)}}}),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.targetName,\"packet-name\":_vm.commandName,\"item-name\":_vm.parameterName,\"type\":'cmd'},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}}),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.displayErrorDialog),callback:function ($$v) {_vm.displayErrorDialog=$$v},expression:\"displayErrorDialog\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Error \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"mx-1\"},[_c('v-row',{staticClass:\"my-2\"},[_c('v-card-text',[_c('span',{domProps:{\"textContent\":_vm._s(_vm.status)}})])],1),_c('v-row',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"data-test\":\"error-dialog-ok\"},on:{\"click\":function($event){_vm.displayErrorDialog = false}}},[_vm._v(\" Ok \")])],1)],1)])],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.displaySendHazardous),callback:function ($$v) {_vm.displaySendHazardous=$$v},expression:\"displaySendHazardous\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Hazardous Warning \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"mx-1\"},[_c('v-row',{staticClass:\"my-2\"},[_c('span',[_vm._v(\" Warning: Command \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.commandName)+\" is Hazardous. Send? \")])]),_c('v-row',[_c('v-spacer'),_c('v-btn',{attrs:{\"outlined\":\"\",\"data-test\":\"send-hazardous-no\"},on:{\"click\":_vm.cancelHazardousCmd}},[_vm._v(\" No \")]),_c('v-btn',{staticClass:\"primary mx-1\",attrs:{\"data-test\":\"send-hazardous-yes\"},on:{\"click\":_vm.sendHazardousCmd}},[_vm._v(\" Yes \")])],1)],1)])],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.displaySendRaw),callback:function ($$v) {_vm.displaySendRaw=$$v},expression:\"displaySendRaw\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Send Raw \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"mx-1\"},[_c('v-row',{staticClass:\"my-2\"},[_c('v-col',[_vm._v(\"Interface:\")]),_c('v-col',[_c('v-select',{attrs:{\"solo\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.interfaces,\"item-text\":\"label\",\"item-value\":\"value\"},model:{value:(_vm.selectedInterface),callback:function ($$v) {_vm.selectedInterface=$$v},expression:\"selectedInterface\"}})],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_vm._v(\"Filename:\")]),_c('v-col',[_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":function($event){return _vm.selectRawCmdFile($event)}}})])],1),_c('v-row',[_c('v-spacer'),_c('v-btn',{attrs:{\"outlined\":\"\",\"data-test\":\"raw-cancel\"},on:{\"click\":_vm.cancelRawCmd}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"primary\",attrs:{\"data-test\":\"raw-ok\"},on:{\"click\":_vm.sendRawCmd}},[_vm._v(\" Ok \")])],1)],1)])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandSender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandSender.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CommandSender.vue?vue&type=template&id=77790331&\"\nimport script from \"./CommandSender.vue?vue&type=script&lang=js&\"\nexport * from \"./CommandSender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Details \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.packetName)+\" \"+_vm._s(_vm.itemName)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.details.description))]),_c('v-card-text',[_c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.type === 'tlm')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Item Values\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Raw Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.rawValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Converted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.convertedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Formatted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.formattedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"With Units Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.unitsValue))])],1)],1)],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Offset\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_offset))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_size))])],1),(_vm.details.array_size)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Array Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.array_size))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Data Type\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.data_type))])],1),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Minimum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.minimum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Maximum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.maximum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Default\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.default))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Format String\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.format_string))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Read Conversion\")]),(_vm.details.read_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.read_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.read_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Write Conversion\")]),(_vm.details.write_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.write_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.write_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Id Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.id_value))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Full\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units_full))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Abbr\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Endianness\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.endianness))])],1),(_vm.details.states)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.states),function(state,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(state.value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.limits)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.limits),function(limit,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_vm._v(\" \"+_vm._s(_vm.formatLimit(limit))+\" \"),_c('v-col')],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.meta)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.meta),function(value,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col',[_vm._v(\"None\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Details </span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-title>\n {{ targetName }} {{ packetName }} {{ itemName }}\n </v-card-title>\n <v-card-subtitle>{{ details.description }}</v-card-subtitle>\n <v-card-text>\n <v-container fluid>\n <v-row no-gutters v-if=\"type === 'tlm'\">\n <v-col cols=\"3\" class=\"label\">Item Values</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Raw Value</v-col>\n <v-col>{{ rawValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Converted Value</v-col>\n <v-col>{{ convertedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Formatted Value</v-col>\n <v-col>{{ formattedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">With Units Value</v-col>\n <v-col>{{ unitsValue }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Offset</v-col>\n <v-col>{{ details.bit_offset }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Size</v-col>\n <v-col>{{ details.bit_size }}</v-col>\n </v-row>\n <v-row v-if=\"details.array_size\" no-gutters>\n <v-col cols=\"3\" class=\"label\">Array Size</v-col>\n <v-col>{{ details.array_size }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Data Type</v-col>\n <v-col>{{ details.data_type }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Minimum</v-col>\n <v-col>{{ details.minimum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Maximum</v-col>\n <v-col>{{ details.maximum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Default</v-col>\n <v-col>{{ details.default }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Format String</v-col>\n <v-col>{{ details.format_string }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Read Conversion</v-col>\n <v-col v-if=\"details.read_conversion\">\n Class: {{ details.read_conversion.class }}\n <br />\n Params:\n {{ details.read_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Write Conversion</v-col>\n <v-col v-if=\"details.write_conversion\">\n Class: {{ details.write_conversion.class }}\n <br />\n Params:\n {{ details.write_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Id Value</v-col>\n <v-col>{{ details.id_value }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Full</v-col>\n <v-col>{{ details.units_full }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Abbr</v-col>\n <v-col>{{ details.units }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Endianness</v-col>\n <v-col>{{ details.endianness }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.states\">\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(state, key) in details.states\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ state.value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.limits\">\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(limit, key) in details.limits\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n {{ formatLimit(limit) }}\n <v-col></v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.meta\">\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters v-for=\"(value, key) in details.meta\" :key=\"key\">\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row v-else no-gutters>\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col>None</v-col>\n </v-row>\n </v-container>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n type: {\n default: 'tlm',\n validator: function (value) {\n // The value must match one of these strings\n return ['cmd', 'tlm'].indexOf(value) !== -1\n },\n },\n targetName: String,\n packetName: String,\n itemName: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n details: Object,\n updater: null,\n rawValue: null,\n convertedValue: null,\n formattedValue: null,\n unitsValue: null,\n }\n },\n computed: {\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n created() {\n this.api = new CosmosApi()\n },\n beforeDestroy() {\n clearInterval(this.updater)\n this.updater = null\n },\n watch: {\n // Create a watcher on value which is the indicator to display the dialog\n // If value is true we request the details from the server\n // If this is a tlm dialog we setup an interval to get the telemetry values\n value: function (newValue, oldValue) {\n if (newValue) {\n this.requestDetails()\n if (this.type === 'tlm') {\n this.updater = setInterval(() => {\n this.api\n .get_tlm_values([\n `${this.targetName}__${this.packetName}__${this.itemName}__RAW`,\n `${this.targetName}__${this.packetName}__${this.itemName}__CONVERTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__FORMATTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__WITH_UNITS`,\n ])\n .then((values) => {\n this.rawValue = values[0][0]\n this.convertedValue = values[1][0]\n this.formattedValue = values[2][0]\n this.unitsValue = values[3][0]\n })\n }, 1000)\n }\n } else {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n },\n methods: {\n requestDetails() {\n if (this.type === 'tlm') {\n this.api\n .get_item(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n } else {\n this.api\n .get_parameter(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n }\n },\n formatLimit(limit) {\n if (limit.green_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high +\n ' GL/' +\n limit.green_low +\n ' GH/' +\n limit.green_high\n )\n } else if (limit.red_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high\n )\n } else {\n return limit\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-weight: bold;\n text-transform: capitalize;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DetailsDialog.vue?vue&type=template&id=3eb9665d&scoped=true&\"\nimport script from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3eb9665d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"c-chooser px-0\"},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-target\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Target\",\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.targetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.targetNameChanged},model:{value:(_vm.selectedTargetName),callback:function ($$v) {_vm.selectedTargetName=$$v},expression:\"selectedTargetName\"}})],1),_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-packet\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Packet\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.packetsDisabled,\"items\":_vm.packetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.packetNameChanged},model:{value:(_vm.selectedPacketName),callback:function ($$v) {_vm.selectedPacketName=$$v},expression:\"selectedPacketName\"}})],1),(_vm.chooseItem && !_vm.buttonDisabled)?_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-item\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Item\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.itemsDisabled,\"items\":_vm.itemNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":function($event){return _vm.itemNameChanged($event)}},model:{value:(_vm.selectedItemName),callback:function ($$v) {_vm.selectedItemName=$$v},expression:\"selectedItemName\"}})],1):_vm._e(),(_vm.buttonText)?_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_c('v-btn',{attrs:{\"disabled\":_vm.buttonDisabled,\"block\":\"\",\"color\":\"primary\",\"data-test\":\"select-send\"},on:{\"click\":_vm.buttonPressed}},[_vm._v(\" \"+_vm._s(_vm.actualButtonText)+\" \")])],1):_vm._e()],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_vm._v(\"Description: \"+_vm._s(_vm.description))])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-container class=\"c-chooser px-0\">\n <v-row>\n <v-col :cols=\"colSize\" data-test=\"select-target\">\n <v-autocomplete\n label=\"Select Target\"\n hide-details\n dense\n @change=\"targetNameChanged\"\n :items=\"targetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedTargetName\"\n />\n </v-col>\n <v-col :cols=\"colSize\" data-test=\"select-packet\">\n <v-autocomplete\n label=\"Select Packet\"\n hide-details\n dense\n @change=\"packetNameChanged\"\n :disabled=\"packetsDisabled\"\n :items=\"packetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedPacketName\"\n />\n </v-col>\n <v-col\n v-if=\"chooseItem && !buttonDisabled\"\n :cols=\"colSize\"\n data-test=\"select-item\"\n >\n <v-autocomplete\n label=\"Select Item\"\n hide-details\n dense\n @change=\"itemNameChanged($event)\"\n :disabled=\"itemsDisabled\"\n :items=\"itemNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedItemName\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\">\n <v-btn\n :disabled=\"buttonDisabled\"\n block\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col :cols=\"colSize\">Description: {{ description }}</v-col>\n </v-row>\n </v-container>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api'\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n reduced: {\n type: String,\n default: 'DECOM',\n validator: (propValue) => {\n return [\n 'REDUCED_DAY',\n 'REDUCED_HOUR',\n 'REDUCED_MINUTE',\n 'DECOM',\n ].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n targetNames: [],\n packetNames: [],\n itemNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n selectedItemName: this.initialItemName?.toUpperCase(),\n description: '',\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n created() {\n this.internalDisabled = true\n this.api = new CosmosApi()\n this.api.get_target_list().then((result) => {\n this.targetNames = result.map((target) => {\n return { label: target, value: target }\n })\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n }\n this.updatePackets()\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n buttonDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n targetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '49%', float: 'left' }\n }\n },\n packetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '50%', float: 'right' }\n }\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n },\n watch: {\n mode: function (newVal, oldVal) {\n this.updatePackets()\n this.itemNames = []\n },\n reduced: function (newVal, oldVal) {\n this.updateItems()\n },\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_all_telemetry_list' : 'get_all_commands_list'\n this.api[cmd](this.selectedTargetName).then((packets) => {\n this.packetNames = packets.map((packet) => {\n return {\n label: packet.packet_name,\n value: packet.packet_name,\n description: packet.description,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.selectedPacketName)\n }\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n this.description = item.description\n if (this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items.map((item) => {\n if (this.reduced === 'DECOM') {\n return [{\n label: item.name,\n value: item.name,\n description: item.description,\n }]\n } else {\n return this.makeReducedItems(item)\n }\n }).reduce((result, item) => { return result.concat(item) }, [])\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.internalDisabled = false\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n }\n )\n },\n\n makeReducedItems: function (item) {\n const reducedOptions = !item.array_size && !item.states\n if (\n reducedOptions && ['UINT', 'INT', 'FLOAT'].includes(item.data_type)\n ) {\n return ['MIN', 'MAX', 'AVG', 'STDDEV'].map((ext) => {\n return {\n label: `${item.name}_${ext}`,\n value: `${item.name}_${ext}`,\n description: `${ext} ${item.description}`,\n }\n })\n }\n return []\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n this.updatePackets()\n },\n\n packetNameChanged: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n this.selectedPacketName = packet.value\n this.description = packet.description\n }\n if (this.chooseItem) {\n this.selectedItemName = ''\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n } else {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n reduced: this.reduced,\n })\n })\n }\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n reduced: this.reduced,\n })\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TargetPacketItemChooser.vue?vue&type=template&id=1cc45128&\"\nimport script from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\nexport * from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('mounting-portal',{attrs:{\"mount-to\":\"#cosmos-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider',{key:j}):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled}},[_vm._v(_vm._s(option.icon))])],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : ''))},[_vm._v(_vm._s(option.label))]):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <mounting-portal mount-to=\"#cosmos-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" :key=\"j\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :key=\"j\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n >\n <v-list-item-action v-if=\"option.radio\">\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action v-if=\"option.checkbox\">\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon :disabled=\"option.disabled\">{{ option.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n >{{ option.label }}</v-list-item-title\n >\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title>{{ title }}</v-toolbar-title>\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function (string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n },\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0b311b9a&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=0b311b9a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b311b9a\",\n null\n \n)\n\nexport default component.exports","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-overflow-btn[data-v-49aaed43]{margin-top:0}.container[data-v-49aaed43]{padding:0}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".label[data-v-3eb9665d]{font-weight:700;text-transform:capitalize}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-list[data-v-0b311b9a] .v-label{margin-left:5px}.v-list-item__icon[data-v-0b311b9a]{margin-right:15px!important}.v-list-item__title[data-v-0b311b9a]{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CommandParameterEditor.vue?vue&type=style&index=0&id=49aaed43&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7e475e85\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7c1e213a\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=style&index=0&id=0b311b9a&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"772a3f68\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["components","DetailsDialog","TargetPacketItemChooser","CommandParameterEditor","TopBar","data","title","search","headers","text","value","targetName","commandName","ignoreRangeChecks","statesInHex","showIgnoredParams","cmdRaw","ignoredParams","rows","interfaces","selectedInterface","rawCmdFile","status","history","displaySendHazardous","displayErrorDialog","displaySendRaw","sendDisabled","api","viewDetails","contextMenuShown","parameterName","reservedItemNames","x","y","contextMenuOptions","action","menus","label","items","checkbox","command","created","Api","packetName","methods","getBackgroundColor","historyEnter","event","showContextMenu","e","row","isFloat","str","isInt","isArray","removeQuotes","convertToValue","param","upcaseStr","hexStr","json_class","raw","jstr","convertToString","return_value","Object","nibble","commandChanged","replace","name","params","target","packet","catch","updateCmdParams","get_target","then","val","parameter_name","val_and_states","states","selected_state","selected_state_label","manual_value","description","units","type","statusChange","createParamList","paramList","buildCmd","sendCmd","hazardous","cmd","obs","sendHazardousCmd","cancelHazardousCmd","processCmdResponse","cmd_sent","response","msg","displayError","context","error","setupRawCmd","selectRawCmdFile","onLoad","bufView","sendRawCmd","reader","self","cancelRawCmd","request","method","url","noAuth","noScope","CosmosAuth","updateToken","defaultMinValidity","login","localStorage","cosmosToken","scope","axios","acceptOnlyDefaultHeaders","Accept","fullDefaultHeaders","get","path","put","post","delete","vueInstance","Vue","axiosInstance","baseURL","location","origin","timeout","interceptors","use","href","axiosIgnoreResponse","toString","Promise","reject","body","statusText","config","message","exception","class","$notify","serious","CosmosApi","kwparams","this","id","jsonrpc","keyword_params","Authorization","result","err","Error","NaN","Infinity","Number","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","item","log_writer_name","limits_set","target_name","packet_name","value_type","len","length","converted","i","decode_cosmos_type","item_name","command_name","param_list","key","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","ignored","array","string","window","isSecureContext","arrayBuffer","TextEncoder","encode","crypto","subtle","digest","hashAsArrayBuffer","uint8ViewOfHash","Uint8Array","Array","from","map","b","padStart","join","render","_vm","_h","$createElement","_c","_self","attrs","on","handleChange","staticClass","staticStyle","handleStateChange","model","callback","$$v","$set","expression","stateValue","staticRenderFns","prop","props","default","initialValue","computed","calcStates","component","$route","$event","_v","scopedSlots","_u","fn","ref","_e","_s","indexOf","_k","keyCode","_l","index","stopPropagation","apply","arguments","domProps","show","itemName","details","rawValue","convertedValue","formattedValue","unitsValue","bit_offset","bit_size","array_size","data_type","minimum","maximum","format_string","read_conversion","write_conversion","id_value","units_full","endianness","state","limit","formatLimit","validator","updater","set","beforeDestroy","clearInterval","watch","get_tlm_values","requestDetails","get_item","get_parameter","colSize","targetNames","targetNameChanged","selectedTargetName","packetsDisabled","packetNames","packetNameChanged","selectedPacketName","chooseItem","buttonDisabled","itemsDisabled","itemNames","itemNameChanged","selectedItemName","buttonPressed","actualButtonText","allowAll","buttonText","disabled","initialTargetName","initialPacketName","initialItemName","mode","reduced","includes","propValue","unknown","vertical","internalDisabled","ALL","UNKNOWN","targetChooserStyle","width","float","packetChooserStyle","updatePackets","updateItems","reduce","makeReducedItems","reducedOptions","allTargetPacketItems","allPacketItems","menu","_g","_b","formatDT","radioGroup","option","j","checked","icon","radio","style","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}