@@ -39,6 +39,7 @@ public class StatusPayload extends AbstractPayload {
3939 public boolean adaptiveSchedulerEnabled ;
4040 public boolean dfuServiceOn ;
4141 public boolean statusFlagFirstBoot ;
42+ public boolean secondaryStatusMsg ;
4243
4344 public int syncType = -1 ;
4445
@@ -91,7 +92,7 @@ public class STATUS_FLAGS {
9192 public static final int BIT_MASK_ADAPTIVE_SCHEDULER_ON = (1 << 4 );
9293 public static final int BIT_MASK_DFU_SERVICE_ON = (1 << 5 );
9394 public static final int BIT_MASK_FIRST_BOOT = (1 << 6 );
94- // public static final int BIT_MASK_UNUSED = (1 << 7);
95+ public static final int BIT_MASK_SECONDARY_STATUS = (1 << 7 );
9596
9697 public static final int BIT_SHIFT_FLASH_WRITE_RETRY_COUNTER_SHORT_TRY_LSB = (8 * 1 );
9798 public static final int BIT_SHIFT_FLASH_WRITE_RETRY_COUNTER_SHORT_TRY_MSB = (8 * 2 );
@@ -174,29 +175,7 @@ public boolean parsePayloadContents(byte[] payloadContents) {
174175 // reverse so the value of 9 00001001 will be 10010000 which is easier to read
175176 // via index/table provided in the document ASM-DES04
176177
177- usbPowered = ((statusFlags & STATUS_FLAGS .BIT_MASK_USB_PLUGGED_IN ) > 0 ) ? true : false ;
178- recordingPaused = ((statusFlags & STATUS_FLAGS .BIT_MASK_RECORDING_PAUSED ) > 0 ) ? true : false ;
179- flashIsFull = ((statusFlags & STATUS_FLAGS .BIT_MASK_FLASH_IS_FULL ) > 0 ) ? true : false ;
180- powerIsGood = ((statusFlags & STATUS_FLAGS .BIT_MASK_POWER_IS_GOOD ) > 0 ) ? true : false ;
181- adaptiveSchedulerEnabled = ((statusFlags & STATUS_FLAGS .BIT_MASK_ADAPTIVE_SCHEDULER_ON ) > 0 ) ? true : false ;
182- dfuServiceOn = ((statusFlags & STATUS_FLAGS .BIT_MASK_DFU_SERVICE_ON ) > 0 ) ? true : false ;
183- statusFlagFirstBoot = ((statusFlags & STATUS_FLAGS .BIT_MASK_FIRST_BOOT ) > 0 ) ? true : false ;
184-
185- // For a number of previous FW versions, the timestamp in ticks was stored in
186- // byte 5, 6 and 7. A better approach is to know what version of FW it is so it
187- // can be parsed correctly but that information isn't available at this point in
188- // the code.
189- if (isStatusFlagValid ()) {
190- // FW v1.02.123 onwards
191- flashWriteRetryCounterShortTry = (int ) parseByteArrayAtIndex (payloadContents , 27 , CHANNEL_DATA_TYPE .UINT16 );
192- flashWriteRetryCounterLongTry = (int ) parseByteArrayAtIndex (payloadContents , 29 , CHANNEL_DATA_TYPE .UINT16 );
193-
194- // FW v1.02.084 onwards
195- flashWriteFailCounter = (int ) parseByteArrayAtIndex (payloadContents , 31 , CHANNEL_DATA_TYPE .UINT16 );
196-
197- // FW v1.02.063 onwards
198- failedBleConnectionAttemptCount = (int ) parseByteArrayAtIndex (payloadContents , 33 , CHANNEL_DATA_TYPE .UINT8 );
199- }
178+ parseStatusFlagBytes (statusFlags );
200179 }
201180
202181 if (payloadContents .length > 34 ) { // supported fw for ASM-1329
@@ -221,6 +200,36 @@ public boolean parsePayloadContents(byte[] payloadContents) {
221200 return isSuccess ;
222201 }
223202
203+ public void parseStatusFlagBytes (long statusFlags ) {
204+ if (isStatusFlagValid ()) {
205+ usbPowered = ((statusFlags & STATUS_FLAGS .BIT_MASK_USB_PLUGGED_IN ) > 0 ) ? true : false ;
206+ recordingPaused = ((statusFlags & STATUS_FLAGS .BIT_MASK_RECORDING_PAUSED ) > 0 ) ? true : false ;
207+ flashIsFull = ((statusFlags & STATUS_FLAGS .BIT_MASK_FLASH_IS_FULL ) > 0 ) ? true : false ;
208+ powerIsGood = ((statusFlags & STATUS_FLAGS .BIT_MASK_POWER_IS_GOOD ) > 0 ) ? true : false ;
209+ adaptiveSchedulerEnabled = ((statusFlags & STATUS_FLAGS .BIT_MASK_ADAPTIVE_SCHEDULER_ON ) > 0 ) ? true : false ;
210+ dfuServiceOn = ((statusFlags & STATUS_FLAGS .BIT_MASK_DFU_SERVICE_ON ) > 0 ) ? true : false ;
211+ statusFlagFirstBoot = ((statusFlags & STATUS_FLAGS .BIT_MASK_FIRST_BOOT ) > 0 ) ? true : false ;
212+
213+ // FW v1.02.124 & FW v1.04.000 onwards (not the versions in between)
214+ secondaryStatusMsg = ((statusFlags & STATUS_FLAGS .BIT_MASK_SECONDARY_STATUS ) > 0 ) ? true : false ;
215+
216+ // For a number of previous FW versions, the timestamp in ticks was stored in
217+ // byte 5, 6 and 7. A better approach is to know what version of FW it is so it
218+ // can be parsed correctly but that information isn't available at this point in
219+ // the code.
220+
221+ // FW v1.02.123 onwards
222+ flashWriteRetryCounterShortTry = (int ) ((statusFlags >> STATUS_FLAGS .BIT_SHIFT_FLASH_WRITE_RETRY_COUNTER_SHORT_TRY_LSB ) & 0xFFFF );
223+ flashWriteRetryCounterLongTry = (int ) ((statusFlags >> STATUS_FLAGS .BIT_SHIFT_FLASH_WRITE_RETRY_COUNTER_LONG_TRY_LSB ) & 0xFFFF );
224+
225+ // FW v1.02.084 onwards
226+ flashWriteFailCounter = (int ) ((statusFlags >> STATUS_FLAGS .BIT_SHIFT_FAIL_COUNT_FLASH_WRITE_LSB ) & 0xFFFF );
227+
228+ // FW v1.02.063 onwards
229+ failedBleConnectionAttemptCount = (int ) ((statusFlags >> STATUS_FLAGS .BIT_SHIFT_FAIL_COUNT_BLE_SYNC ) & 0xFF );
230+ }
231+ }
232+
224233 public void parseBatteryChargerStatusValue () {
225234 if (hwVerMajor !=-1 && VerisenseDevice .isChargerLm3658dPresent (hwVerMajor , hwVerMinor , hwVerInternal )) {
226235 batteryChargerStatus = VerisenseDevice .CHARGER_STATUS_LM3658D .values ()[batteryChargerStatusValue ];
@@ -271,11 +280,15 @@ public boolean isStatusFlagValid() {
271280 }
272281
273282 public boolean isStatusFlagRecordingPaused () {
274- return ( isStatusFlagValid () && ( statusFlags & STATUS_FLAGS . BIT_MASK_RECORDING_PAUSED )> 0 ) ;
283+ return recordingPaused ;
275284 }
276285
277286 public boolean isStatusFlagFirstBoot () {
278- return (isStatusFlagValid () && (statusFlags &STATUS_FLAGS .BIT_MASK_FIRST_BOOT )>0 );
287+ return statusFlagFirstBoot ;
288+ }
289+
290+ public boolean isStatusFlagSecondaryStatusMsg () {
291+ return secondaryStatusMsg ;
279292 }
280293
281294 @ Override
@@ -314,19 +327,24 @@ public String generateDebugString() {
314327 if (payloadContents .length >= 34 ) {
315328 sb .append ("\t Status Message Flags:\n " );
316329
317- // First byte - Bits 0-7
330+ // Byte 0 - Status flags
318331 sb .append ("\t \t USB_PLUGGED_IN:\t \t \t " + usbPowered + "\n " );
319332 sb .append ("\t \t RECORDING_PAUSED:\t \t " + recordingPaused + "\n " );
320333 sb .append ("\t \t FLASH_IS_FULL:\t \t \t " + flashIsFull + "\n " );
321334 sb .append ("\t \t POWER_IS_GOOD:\t \t \t " + powerIsGood + "\n " );
322335 sb .append ("\t \t ADAPTIVE_SCHEDULER_ON:\t \t " + adaptiveSchedulerEnabled + "\n " );
323336 sb .append ("\t \t DFU_SERVICE_ON:\t \t \t " + dfuServiceOn + "\n " );
324337 sb .append ("\t \t FIRST BOOT ON:\t \t \t " + statusFlagFirstBoot + "\n " );
338+ sb .append ("\t \t Secondary Status:\t \t " + secondaryStatusMsg + "\n " );
339+
340+ // Bytes 1-4 - Pause counters
341+ sb .append ("\t \t LTF WRITE - Short Retry Counter (2 minutes gap, 10 retries):\t " + flashWriteRetryCounterShortTry + "\n " );
342+ sb .append ("\t \t LTF WRITE - Long Retry Counter (4hrs gap, 1 retry):\t \t " + flashWriteRetryCounterLongTry + "\n " );
325343
326- // 7th byte - Bits 0-7
344+ // Bytes 5-6 - LTF write fail counter
327345 sb .append ("\t \t LTF WRITE FAIL COUNTER:\t \t " + failedBleConnectionAttemptCount + "\n " );
328346
329- // Last byte - Bits 0-7
347+ // Byte 7 - Sync fail counter
330348 sb .append ("\t \t FAIL SYNC COUNTER:\t \t " + flashWriteFailCounter + "\n " );
331349 }
332350
0 commit comments