@@ -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 }
0 commit comments