@@ -58,18 +58,23 @@ var FlightLogParser = function(logData) {
5858 //Predict that this field is minthrottle
5959 FLIGHT_LOG_FIELD_PREDICTOR_MINMOTOR = 11 ,
6060
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+
6165 //Home coord predictors appear in pairs (two copies of FLIGHT_LOG_FIELD_PREDICTOR_HOME_COORD). Rewrite the second
6266 //one we see to this to make parsing easier
6367 FLIGHT_LOG_FIELD_PREDICTOR_HOME_COORD_1 = 256 ,
6468
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
7378
7479 FLIGHT_LOG_EVENT_LOG_END = 255 ,
7580
@@ -1080,6 +1085,46 @@ var FlightLogParser = function(logData) {
10801085 % that . sysConfig . frameIntervalPDenom < that . sysConfig . frameIntervalPNum ;
10811086 }
10821087
1088+ /**
1089+ * Debug data interpretation depends on the chosen debug mode encodings and other parameters could need to be fixed
1090+ */
1091+ function assimilateDebugMode ( sysConfig , frameDef )
1092+ {
1093+ var k ;
1094+
1095+ console . log ( "Debug mode is " + DEBUG_MODE [ sysConfig . debug_mode ] + ":" + sysConfig . debug_mode ) ;
1096+
1097+ if ( DEBUG_MODE [ sysConfig . debug_mode ] . startsWith ( "DSHOT_STATUS_N_" ) )
1098+ {
1099+ for ( k = 0 ; k < frameDef . name . length ; k ++ )
1100+ {
1101+ if ( frameDef . name [ k ] . startsWith ( "debug" ) ) {
1102+ // Assimilate encoding depending on debug mode
1103+ frameDef . encoding [ k ] = FLIGHT_LOG_FIELD_ENCODING_PACK_1F_1F_1F_1G_4U_8U ;
1104+
1105+ // Assimilate predictor depending on debug mode
1106+ switch ( DEBUG_MODE [ sysConfig . debug_mode ] )
1107+ {
1108+ case "DSHOT_STATUS_N_VOLTAGE" :
1109+ frameDef . predictor [ k ] = FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_VOLTAGE ;
1110+ break ;
1111+ case "DSHOT_STATUS_N_ERPM_FRACTION_18" :
1112+ frameDef . predictor [ k ] = FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_ERPM_FRACTION_18 ;
1113+ break ;
1114+ default :
1115+ break ;
1116+ }
1117+
1118+ // Debugging (to be deleted)
1119+ //console.log("Name = " + frameDef.name[k]);
1120+ //console.log(JSON.stringify(frameDef.encoding[k]));
1121+ //console.log(JSON.stringify(frameDef.predictor[k]));
1122+ //console.trace();
1123+ }
1124+ }
1125+ }
1126+ }
1127+
10831128 /**
10841129 * Attempt to parse the frame of into the supplied `current` buffer using the encoding/predictor
10851130 * definitions from `frameDefs`. The previous frame values are used for predictions.
@@ -1095,7 +1140,7 @@ var FlightLogParser = function(logData) {
10951140 encoding = frameDef . encoding ,
10961141 values = new Array ( 8 ) ,
10971142 i , j , groupCount ;
1098-
1143+
10991144 i = 0 ;
11001145 while ( i < frameDef . count ) {
11011146 var
@@ -1108,7 +1153,7 @@ var FlightLogParser = function(logData) {
11081153 current [ i ] += previous [ i ] ;
11091154
11101155 i ++ ;
1111- } else {
1156+ } else {
11121157 switch ( encoding [ i ] ) {
11131158 case FLIGHT_LOG_FIELD_ENCODING_SIGNED_VB :
11141159 value = stream . readSignedVB ( ) ;
@@ -1164,6 +1209,19 @@ var FlightLogParser = function(logData) {
11641209
11651210 continue ;
11661211 break ;
1212+ case FLIGHT_LOG_FIELD_ENCODING_PACK_1F_1F_1F_1G_4U_8U :
1213+ value = stream . readSignedVB ( ) ;
1214+
1215+ current [ i ] = new Array ( 5 ) ;
1216+ current [ i ] [ 0 ] = ( ( value & 0x8000 ) != 0 ) ? 1 : 0 ;
1217+ current [ i ] [ 1 ] = ( ( value & 0x4000 ) != 0 ) ? 1 : 0 ;
1218+ current [ i ] [ 2 ] = ( ( value & 0x2000 ) != 0 ) ? 1 : 0 ;
1219+ current [ i ] [ 3 ] = ( value >> 8 ) & 0x000F ;
1220+ current [ i ] [ 4 ] = applyPrediction ( i , raw ? FLIGHT_LOG_FIELD_PREDICTOR_0 : predictor [ i ] , value & 0x00FF , current , previous , previous2 ) ;
1221+ i ++ ;
1222+
1223+ continue ;
1224+ break ;
11671225 case FLIGHT_LOG_FIELD_ENCODING_NULL :
11681226 //Nothing to read
11691227 value = 0 ;
@@ -1337,6 +1395,12 @@ var FlightLogParser = function(logData) {
13371395 if ( mainHistory [ 1 ] )
13381396 value += mainHistory [ 1 ] [ FlightLogParser . prototype . FLIGHT_LOG_FIELD_INDEX_TIME ] ;
13391397 break ;
1398+ case FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_VOLTAGE :
1399+ value /= 4 ;
1400+ break ;
1401+ case FLIGHT_LOG_FIELD_PREDICTOR_DSHOT_STATUS_N_ERPM_FRACTION_18 :
1402+ value *= 18 ;
1403+ break ;
13401404 default :
13411405 throw "Unsupported field predictor " + predictor ;
13421406 }
@@ -1674,6 +1738,8 @@ var FlightLogParser = function(logData) {
16741738 } else {
16751739 lastSlow = [ ] ;
16761740 }
1741+
1742+ assimilateDebugMode ( that . sysConfig , this . frameDefs . I ) ;
16771743 } ;
16781744
16791745 /**
0 commit comments