Skip to content

Commit a9d3ccc

Browse files
Add support for dataflash logging array instances
1 parent ca35d08 commit a9d3ccc

File tree

4 files changed

+84
-16
lines changed

4 files changed

+84
-16
lines changed

src/components/Plotly.vue

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,11 +309,10 @@ export default {
309309
},
310310
311311
addPlots (plots) {
312-
console.log(plots)
313312
this.state.plot_loading = true
314313
let requested = new Set()
315-
const RE = /[A-Z][A-Z0-9_]+\.[a-zA-Z0-9]+/g
316-
let RE2 = /[A-Z][A-Z0-9_]+\b/g
314+
const RE = /[A-Z][A-Z0-9_]+(\[[0-9]\])\.[a-zA-Z0-9]+/g
315+
let RE2 = /[A-Z][A-Z0-9_]+(\[[0-9]\])/g
317316
for (let plot of plots) {
318317
let expression = plot[0]
319318
// ensure we have the data
@@ -448,7 +447,7 @@ export default {
448447
// delete all expressions after dots (and dots)
449448
let toDelete = /\.[A-Za-z-0-9_]+/g
450449
let name = expression.replace(toDelete, '')
451-
let RE = /[A-Z][A-Z0-9_]+/g
450+
let RE = /[A-Z][A-Z0-9_]+(\[[0-9]\])?/g
452451
let fields = name.match(RE)
453452
return fields
454453
},

src/components/SideBarMessageMenu.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<template v-for="key of Object.keys(this.messageTypesFiltered).sort()">
2626
<li class="type" v-bind:key="key">
2727
<div v-b-toggle="'type' + key">
28-
<a class="section">{{key}}
28+
<a class="section">{{key}} <span v-if="messageTypes[key].isArray">{{"[...]"}}</span>
2929
<i class="expand fas fa-caret-down"></i></a>
3030
</div>
3131
</li>
@@ -217,7 +217,7 @@ export default {
217217
// delete all expressions after dots (and dots)
218218
let toDelete = /\.[A-Za-z-0-9_]+/g
219219
let name = expression.replace(toDelete, '')
220-
let RE = /[A-Z][A-Z0-9_]+/g
220+
let RE = /[A-Z][A-Z0-9_]+(\[0-9\])?/g
221221
let fields = name.match(RE)
222222
if (fields === null) {
223223
return []

src/tools/parsers/dataflashParser.js

Lines changed: 78 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -389,15 +389,70 @@ export class DataflashParser {
389389
}
390390
}
391391
delete this.messages[name]
392+
console.log(parsed)
392393
this.messages[name] = parsed
393-
this.fixDataOnce(name)
394-
this.simplifyData(name)
394+
395395
self.postMessage({percentage: 100})
396-
self.postMessage({messageType: name, messageList: this.messages[name]})
396+
if (parsed.length && Object.keys(parsed[0]).includes('C')) {
397+
let instances = []
398+
for (let msg of parsed) {
399+
try {
400+
instances[msg.C].push(msg)
401+
} catch (e) {
402+
instances[msg.C] = [ msg ]
403+
}
404+
}
405+
let i = 0
406+
for (let instance of instances) {
407+
let newName = name + '[' + i + ']'
408+
this.messages[newName] = instance
409+
console.log(instance)
410+
this.fixDataOnce(newName)
411+
console.log(this.messages[newName])
412+
this.simplifyData(newName)
413+
self.postMessage({messageType: newName,
414+
messageList: this.messages[newName]})
415+
console.log(this.messages[newName])
416+
i += 1
417+
}
418+
console.log(instances)
419+
} else {
420+
this.fixDataOnce(name)
421+
this.simplifyData(name)
422+
self.postMessage({messageType: name, messageList: this.messages[name]})
423+
}
397424
this.alreadyParsed.push(name)
398425
return parsed
399426
}
400427

428+
checkNumberOfInstances (name) {
429+
// Similar to parseOffset, but finishes earlier and updates messageTypes
430+
let type = this.getMsgType(name)
431+
let numberOfInstances = 1
432+
for (var i = 0; i < this.msgType.length; i++) {
433+
if (type === this.msgType[i]) {
434+
this.offset = this.offsetArray[i]
435+
try {
436+
let temp = this.FORMAT_TO_STRUCT(this.FMT[this.msgType[i]])
437+
if (temp['name'] != null) {
438+
let msg = temp
439+
if (!msg.hasOwnProperty('C')) {
440+
break
441+
}
442+
if ((msg['C'] + 1) < numberOfInstances) {
443+
return numberOfInstances
444+
} else {
445+
numberOfInstances = msg['C'] + 1
446+
}
447+
}
448+
} catch (e) {
449+
console.log(e)
450+
}
451+
}
452+
}
453+
return numberOfInstances
454+
}
455+
401456
timestamp (TimeUs) {
402457
let temp = this.timebase + TimeUs * 0.000001
403458
if (temp > 0) {
@@ -527,7 +582,9 @@ export class DataflashParser {
527582
if (['FMTU'].indexOf(name) === -1) {
528583
if (this.messageTypes.hasOwnProperty(name)) {
529584
let fields = this.messageTypes[name].expressions
530-
fields.push('time_boot_ms')
585+
if (!fields.includes('time_boot_ms')) {
586+
fields.push('time_boot_ms')
587+
}
531588
let mergedData = {}
532589
for (let field of fields) {
533590
mergedData[field] = []
@@ -600,11 +657,23 @@ export class DataflashParser {
600657
}
601658
}
602659
}
603-
messageTypes[msg.Name] = {
604-
expressions: fields,
605-
units: msg.units,
606-
multipiers: msg.multipliers,
607-
complexFields: complexFields
660+
let numberOfInstances = this.checkNumberOfInstances(msg.Name)
661+
if (numberOfInstances > 1) {
662+
for (let instance = 0; instance < numberOfInstances; instance++) {
663+
messageTypes[msg.Name + '[' + instance + ']'] = {
664+
expressions: fields,
665+
units: msg.units,
666+
multipiers: msg.multipliers,
667+
complexFields: complexFields
668+
}
669+
}
670+
} else {
671+
messageTypes[msg.Name] = {
672+
expressions: fields,
673+
units: msg.units,
674+
multipiers: msg.multipliers,
675+
complexFields: complexFields
676+
}
608677
}
609678
}
610679
}

src/tools/parsers/parser.worker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ self.addEventListener('message', function (event) {
1717
let data = event.data.file
1818
parser.processData(data)
1919
} else if (event.data.action === 'loadType') {
20-
parser.loadType(event.data.type)
20+
parser.loadType(event.data.type.split('[')[0])
2121
}
2222
})

0 commit comments

Comments
 (0)