@@ -58,18 +58,23 @@ var FlightLogParser = function(logData) {
58
58
//Predict that this field is minthrottle
59
59
FLIGHT_LOG_FIELD_PREDICTOR_MINMOTOR = 11 ,
60
60
61
+ //Predict that this field is dshot status and other data
62
+ FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_VOLTAGE = 12 ,
63
+ FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_ERPM_FRACTION_18 = 13 ,
64
+
61
65
//Home coord predictors appear in pairs (two copies of FLIGHT_LOG_FIELD_PREDICTOR_HOME_COORD). Rewrite the second
62
66
//one we see to this to make parsing easier
63
67
FLIGHT_LOG_FIELD_PREDICTOR_HOME_COORD_1 = 256 ,
64
68
65
- FLIGHT_LOG_FIELD_ENCODING_SIGNED_VB = 0 , // Signed variable-byte
66
- FLIGHT_LOG_FIELD_ENCODING_UNSIGNED_VB = 1 , // Unsigned variable-byte
67
- FLIGHT_LOG_FIELD_ENCODING_NEG_14BIT = 3 , // Unsigned variable-byte but we negate the value before storing, value is 14 bits
68
- FLIGHT_LOG_FIELD_ENCODING_TAG8_8SVB = 6 ,
69
- FLIGHT_LOG_FIELD_ENCODING_TAG2_3S32 = 7 ,
70
- FLIGHT_LOG_FIELD_ENCODING_TAG8_4S16 = 8 ,
71
- FLIGHT_LOG_FIELD_ENCODING_NULL = 9 , // Nothing is written to the file, take value to be zero
72
- FLIGHT_LOG_FIELD_ENCODING_TAG2_3SVARIABLE = 10 ,
69
+ FLIGHT_LOG_FIELD_ENCODING_SIGNED_VB = 0 , // Signed variable-byte
70
+ FLIGHT_LOG_FIELD_ENCODING_UNSIGNED_VB = 1 , // Unsigned variable-byte
71
+ FLIGHT_LOG_FIELD_ENCODING_NEG_14BIT = 3 , // Unsigned variable-byte but we negate the value before storing, value is 14 bits
72
+ FLIGHT_LOG_FIELD_ENCODING_TAG8_8SVB = 6 ,
73
+ FLIGHT_LOG_FIELD_ENCODING_TAG2_3S32 = 7 ,
74
+ FLIGHT_LOG_FIELD_ENCODING_TAG8_4S16 = 8 ,
75
+ FLIGHT_LOG_FIELD_ENCODING_NULL = 9 , // Nothing is written to the file, take value to be zero
76
+ FLIGHT_LOG_FIELD_ENCODING_TAG2_3SVARIABLE = 10 ,
77
+ FLIGHT_LOG_FIELD_ENCODING_PACK_1F_1F_1F_1G_4U_8U = 11 , // 1 flagBit, 1 flagBit, 1 flagBit, 1 gapBit, 4 unsignedIntBit, 8 unsignedIntBit
73
78
74
79
FLIGHT_LOG_EVENT_LOG_END = 255 ,
75
80
@@ -528,9 +533,9 @@ var FlightLogParser = function(logData) {
528
533
function translateFieldName ( fieldName ) {
529
534
var translation = translationValues [ fieldName ] ;
530
535
if ( typeof translation !== 'undefined' ) {
531
- return translation ;
536
+ return translation ;
532
537
} else {
533
- return fieldName ;
538
+ return fieldName ;
534
539
}
535
540
}
536
541
@@ -600,14 +605,14 @@ var FlightLogParser = function(logData) {
600
605
case "Cleanflight" :
601
606
that . sysConfig . firmwareType = FIRMWARE_TYPE_CLEANFLIGHT ;
602
607
$ ( 'html' ) . removeClass ( 'isBaseF' ) ;
603
- $ ( 'html' ) . addClass ( 'isCF' ) ;
608
+ $ ( 'html' ) . addClass ( 'isCF' ) ;
604
609
$ ( 'html' ) . removeClass ( 'isBF' ) ;
605
610
$ ( 'html' ) . removeClass ( 'isINAV' ) ;
606
611
break ;
607
612
default :
608
613
that . sysConfig . firmwareType = FIRMWARE_TYPE_BASEFLIGHT ;
609
614
$ ( 'html' ) . addClass ( 'isBaseF' ) ;
610
- $ ( 'html' ) . removeClass ( 'isCF' ) ;
615
+ $ ( 'html' ) . removeClass ( 'isCF' ) ;
611
616
$ ( 'html' ) . removeClass ( 'isBF' ) ;
612
617
$ ( 'html' ) . removeClass ( 'isINAV' ) ;
613
618
}
@@ -943,7 +948,7 @@ var FlightLogParser = function(logData) {
943
948
$ ( 'html' ) . addClass ( 'isINAV' ) ;
944
949
} else {
945
950
946
- // Cleanflight 1.x and others
951
+ // Cleanflight 1.x and others
947
952
that . sysConfig . firmwareVersion = '0.0.0' ;
948
953
that . sysConfig . firmware = 0.0 ;
949
954
that . sysConfig . firmwarePatch = 0 ;
@@ -1106,6 +1111,34 @@ var FlightLogParser = function(logData) {
1106
1111
% that . sysConfig . frameIntervalPDenom < that . sysConfig . frameIntervalPNum ;
1107
1112
}
1108
1113
1114
+ /**
1115
+ * Debug data interpretation depends on the chosen debug mode encodings and other parameters could need to be fixed
1116
+ */
1117
+ function assimilateDebugMode ( sysConfig , frameDef ) {
1118
+ console . log ( "Debug mode is " + DEBUG_MODE [ sysConfig . debug_mode ] + ":" + sysConfig . debug_mode ) ;
1119
+
1120
+ if ( DEBUG_MODE [ sysConfig . debug_mode ] . startsWith ( "DSHOT_STATUS_N_" ) ) {
1121
+ for ( let k = 0 ; k < frameDef . name . length ; k ++ ) {
1122
+ if ( frameDef . name [ k ] . startsWith ( "debug" ) ) {
1123
+ // Assimilate encoding depending on debug mode
1124
+ frameDef . encoding [ k ] = FLIGHT_LOG_FIELD_ENCODING_PACK_1F_1F_1F_1G_4U_8U ;
1125
+
1126
+ // Assimilate predictor depending on debug mode
1127
+ switch ( DEBUG_MODE [ sysConfig . debug_mode ] ) {
1128
+ case "DSHOT_STATUS_N_VOLTAGE" :
1129
+ frameDef . predictor [ k ] = FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_VOLTAGE ;
1130
+ break ;
1131
+ case "DSHOT_STATUS_N_ERPM_FRACTION_18" :
1132
+ frameDef . predictor [ k ] = FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_ERPM_FRACTION_18 ;
1133
+ break ;
1134
+ default :
1135
+ break ;
1136
+ }
1137
+ }
1138
+ }
1139
+ }
1140
+ }
1141
+
1109
1142
/**
1110
1143
* Attempt to parse the frame of into the supplied `current` buffer using the encoding/predictor
1111
1144
* definitions from `frameDefs`. The previous frame values are used for predictions.
@@ -1120,8 +1153,8 @@ var FlightLogParser = function(logData) {
1120
1153
predictor = frameDef . predictor ,
1121
1154
encoding = frameDef . encoding ,
1122
1155
values = new Array ( 8 ) ,
1123
- i , j , groupCount ;
1124
-
1156
+ i , j , groupCount , updateCurrent ;
1157
+
1125
1158
i = 0 ;
1126
1159
while ( i < frameDef . count ) {
1127
1160
var
@@ -1135,6 +1168,10 @@ var FlightLogParser = function(logData) {
1135
1168
1136
1169
i ++ ;
1137
1170
} else {
1171
+ // Update current by default
1172
+ updateCurrent = true ;
1173
+
1174
+ // Decode
1138
1175
switch ( encoding [ i ] ) {
1139
1176
case FLIGHT_LOG_FIELD_ENCODING_SIGNED_VB :
1140
1177
value = stream . readSignedVB ( ) ;
@@ -1155,7 +1192,7 @@ var FlightLogParser = function(logData) {
1155
1192
for ( j = 0 ; j < 4 ; j ++ , i ++ )
1156
1193
current [ i ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , values [ j ] , current , previous , previous2 ) ;
1157
1194
1158
- continue ;
1195
+ updateCurrent = false ;
1159
1196
break ;
1160
1197
case FLIGHT_LOG_FIELD_ENCODING_TAG2_3S32 :
1161
1198
stream . readTag2_3S32 ( values ) ;
@@ -1164,7 +1201,7 @@ var FlightLogParser = function(logData) {
1164
1201
for ( j = 0 ; j < 3 ; j ++ , i ++ )
1165
1202
current [ i ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , values [ j ] , current , previous , previous2 ) ;
1166
1203
1167
- continue ;
1204
+ updateCurrent = false ;
1168
1205
break ;
1169
1206
case FLIGHT_LOG_FIELD_ENCODING_TAG2_3SVARIABLE :
1170
1207
stream . readTag2_3SVariable ( values ) ;
@@ -1173,7 +1210,7 @@ var FlightLogParser = function(logData) {
1173
1210
for ( j = 0 ; j < 3 ; j ++ , i ++ )
1174
1211
current [ i ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , values [ j ] , current , previous , previous2 ) ;
1175
1212
1176
- continue ;
1213
+ updateCurrent = false ;
1177
1214
break ;
1178
1215
case FLIGHT_LOG_FIELD_ENCODING_TAG8_8SVB :
1179
1216
//How many fields are in this encoded group? Check the subsequent field encodings:
@@ -1188,7 +1225,20 @@ var FlightLogParser = function(logData) {
1188
1225
for ( j = 0 ; j < groupCount ; j ++ , i ++ )
1189
1226
current [ i ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , values [ j ] , current , previous , previous2 ) ;
1190
1227
1191
- continue ;
1228
+ updateCurrent = false ;
1229
+ break ;
1230
+ case FLIGHT_LOG_FIELD_ENCODING_PACK_1F_1F_1F_1G_4U_8U :
1231
+ value = stream . readSignedVB ( ) ;
1232
+
1233
+ current [ i ] = new Array ( 5 ) ;
1234
+ current [ i ] [ 0 ] = ( ( value & 0x8000 ) != 0 ) ? 1 : 0 ;
1235
+ current [ i ] [ 1 ] = ( ( value & 0x4000 ) != 0 ) ? 1 : 0 ;
1236
+ current [ i ] [ 2 ] = ( ( value & 0x2000 ) != 0 ) ? 1 : 0 ;
1237
+ current [ i ] [ 3 ] = ( value >> 8 ) & 0x000F ;
1238
+ current [ i ] [ 4 ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , value & 0x00FF , current , previous , previous2 ) ;
1239
+ i ++ ;
1240
+
1241
+ updateCurrent = false ;
1192
1242
break ;
1193
1243
case FLIGHT_LOG_FIELD_ENCODING_NULL :
1194
1244
//Nothing to read
@@ -1201,8 +1251,11 @@ var FlightLogParser = function(logData) {
1201
1251
throw "Unsupported field encoding " + encoding [ i ] ;
1202
1252
}
1203
1253
1204
- current [ i ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , value , current , previous , previous2 ) ;
1205
- i ++ ;
1254
+ // Updates current when it is not updated by the decoder path`
1255
+ if ( updateCurrent ) {
1256
+ current [ i ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , value , current , previous , previous2 ) ;
1257
+ i ++ ;
1258
+ }
1206
1259
}
1207
1260
}
1208
1261
}
@@ -1363,6 +1416,12 @@ var FlightLogParser = function(logData) {
1363
1416
if ( mainHistory [ 1 ] )
1364
1417
value += mainHistory [ 1 ] [ FlightLogParser . prototype . FLIGHT_LOG_FIELD_INDEX_TIME ] ;
1365
1418
break ;
1419
+ case FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_VOLTAGE :
1420
+ value /= 4 ;
1421
+ break ;
1422
+ case FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_ERPM_FRACTION_18 :
1423
+ value *= 18 ;
1424
+ break ;
1366
1425
default :
1367
1426
throw "Unsupported field predictor " + predictor ;
1368
1427
}
@@ -1700,6 +1759,8 @@ var FlightLogParser = function(logData) {
1700
1759
} else {
1701
1760
lastSlow = [ ] ;
1702
1761
}
1762
+
1763
+ assimilateDebugMode ( that . sysConfig , this . frameDefs . I ) ;
1703
1764
} ;
1704
1765
1705
1766
/**
0 commit comments