-
Notifications
You must be signed in to change notification settings - Fork 46
Pulse Log Entry
The Omnipod maintains a log in flash memory of 32-bit entries
for each pulse delivery event during its operation.
During normal use with a PDM,
up to 100 of these pulse log entries (i.e., the last 5.0U of delivered)
are read out by the PDM during Pod deactivation using the
Status Request Type 80 and Type 81 which will return the
02 Response, Type 80 (0x50) and
02 Response, Type 81 (0x51) respectively.
The Omnikit Command Tester
will display the results of these pulse log entries which can be manually captured
using the Read Pulse Log
command or
automatically captured when deactivating a faulted pod.
The 32-bit (dword) pulse log entries have the following form:
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee0a
-
eeeeee
= 6-bit unsigned encoder count (byte_71 & 0x3F) -
a
1-bit pump driving flag, LOAD1=0 or LOAD2=1 (byte_11E & 1)
-
-
pppliiib
-
ppp
= 3-bit pulse mode:000
=None,001
=basal,010
=temp basal,011
=bolus,100
=extended bolus (byte_35F & 7) -
l
= 1-bit low reservoir signal value ((PTBD & 8) != 0) -
iii
= 3-bit unsigned immediate bolus tick counter / 2 ((byte_280/2) & 7) -
b
= LoadCountVal & 1 (i.e., the low bit of the LoadCountVal)
-
-
cccccccc
-
cccccccc
= LoadCountVal / 2 (ifppp
!= 0) or 0
-
-
dfgggggg
-
d
= 1-bit last analog comparator read (byte_27B & 1) -
f
= 1-bit fault flag for validate_encoder_count() $4n fault with Tab5[0x10] == 0 (byte_B96 & 1) -
gggggg
= signed 6-bit last computed encoder value (last value from byte_BE3[] & 0x3F), 0 is nominal value
-
byte_280 is incremented on each 1/8 of a second tick during an immediate bolus
and then reset to 0 when the pulse is delivered and the pulse log entry created.
Since iii
is byte_280/2, each higher value represents a quarter of a second and
since iii
is a 3-bit value, it can represents between 0 and < 2 seconds
(which is the timing between pulses when delivering an immediate bolus).
LoadCountVal is an unsigned 9-bit adjusted & rounded load count value as given by the following calculation
which essentially adjusts LOADCNT
up by 2.45% and rounds up the result.
LoadCountCal = (((LOADCNT & 0x1FF) * 1000) + 488) / 976
byte_B96 is set in main_loop_control_pump() on a Pod fault where validate_encoder_count() returns a error which is not a 0x40 error with a non-zero Tab5[0x10]. Possible validate_encoder_count() errors:
- $40 - count too high (> 30 or 34)
- $41 - last 10 counts either too low or too high by 13
- $42 - count too low (< 20)
- $43 - other error
byte_BE3[10] is an array of 10 bytes which is indexed by byte_73. byte_73 is updated atomically and has a shadow verifier value. All of byte_BE3[] and byte_73 are summed and its complementary value saved in word_BED and used as for verification. byte_BE3[] is updated with byte_71 - 25 in validate_encoder_count() (nominally the encoder count should be 25). The last 10 counts are stored in byte_BE3[].
The Pod pulse logs reads are the largest messages returned from the Pod. Many of the capture logs are missing one of of the CON packets for these messages and thus do not have the full 50 32-bit pulse log entries. This analysis of the PDM request for the Pod pulse log entries at Pod shutdown was taken from 0.05 Insulin not delivered with deactivation after a 0x6a fault had occurred:
OFF 1 2 3 4 5 6 7 8
02 LL 50 IIII XXXXXXXX XXXXXXXX XXXXXXXX ...
02 cb 50 00ec 50203301 55213e81 58213381 ...
-
LL
= 0xcb or 205 (4N+5), N = 50 -
IIII
= 0x00ec = 236, the index of last dword log entry (# of pulses delivered)
The 50 dword pulse log entries from slots 187 to 236 returned are as follows:
50203301 55213e81 58213381 5d203d81 002032bf 05203ebf 082132bf 0d213fbf 102033bf 15213dbf
182033bf 1d203bbf 202132bf 25213d3f 2821333f 2d213d3f 3021343f 35213d3f 3820333f 3d203e3f
4021343f 4520403f 4820363f 4d203d3f 5020363f 55203e3f 582134bf 5d2040bf 602035bf 01213f80
04203680 09213e80 0c203680 11203e80 14213580 19213b80 1c213680 21213d80 24203580 29203d00
2c203700 31213c00 34213600 39203e00 3c203700 41213e00 44213600 49203e00 4c203600 51213e00
Detailed analysis for the last pulse log entry (slot 236) which was 51213e00
.
01010001 00100001 00111110 00000000
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee
= 0x14 = 20, encoder count (byte_71) -
a
= 1, LOAD2 (byte_11E) -
ppp
= 1, pulse mode = basal (byte_35F) -
l
= 0, no low reservoir signal, ((PTBD & 8) == 0) -
iii
= 0, no immediate bolus tick counter active (byte_280/2) -
b
= 1, LoadCountVal & 1 -
cccccccc
= 0x3e = 62, LoadCountVal / 2 -
d
= 0, last analog comparator read value (byte_27B) -
f
= 0, no $4n fault with Tab5[0x10] == 0 (byte_B96) -
gggggg
= 0, last normalized encoder count (from byte_BE3[])
Since cccccccc
= 62 and b
= 1, LoadCountVal
was 62 x 2 + 1 = 125 and LOADCNT
was (125 * 976) / 1000 = 122.
Since the last normalized encoder count (byte_71 - 25) was 0, the last byte_71 would have been 25.
OFF 1 2 3 4 5 6 7 8
02 LL 51 NNNN XXXXXXXX XXXXXXXX XXXXXXXX ...
02 cb 51 0032 5421223f 592129bf 5c2023bf ...
-
LL
= 0xcb or 205 (4N+5), N = 50 -
NNNN
= 0x0032 = 50, number of dword log entries returned
Note that NNNN
will always be 0032
for a Type 51 Pod Information read
after the Pod has delivered 5.0U since the pulse log will then have at least 100 entries.
The fifty dword pulse log entries from slots 137 to 186 returned are as follows:
5421223f 592129bf 5c2023bf 612129bf 00202380 05202980 08202380 0d212c80 10202580 15202f80
18212680 1d213080 20202880 25203180 28202a00 2d203600 30212b00 35213700 38202d00 3d213800
40202e00 45203900 48212e00 4d213900 50212d00 55203600 58212e00 5d203880 60212e80 65203880
00212e81 05213881 08212f81 0d203981 10213181 15213a81 18203081 1d213981 20203101 25203b01
28203101 2d213901 30213101 35203901 38213001 3d203b01 40213001 45213b01 48203201 4d203c01
Detailed analysis for the first pulse log entry (slot 137) which was 5421223f
.
01010100 00100001 00100010 00111111
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee
= 0x15 = 21, encoder count (byte_71) -
a
= 1, LOAD2 (byte_11E) -
ppp
= 1, pulse mode = basal (byte_35F) -
l
= 0, no low reservoir signal, ((PTBD & 8) == 0) -
iii
= 0, no immediate bolus tick counter active (byte_280/2) -
b
= 1, LoadCountVal & 1 -
cccccccc
= 0x21 = 33, LoadCountVal / 2 -
d
= 0, last analog comparator read value (byte_27B) -
f
= 0, no 0x4x fault when Tab5[0x10] == 0 (byte_B96) -
gggggg
= 0x3F = (a 6-bit signed value) = -1, last normalized encoder count (from byte_BE3[])
Since cccccccc
= 33 and b
= 1, LoadCountVal
was 33 x 2 + 1 = 67 and LOADCNT
was (67 * 976) / 1000 = 65.
Since the last normalized encoder count (byte_71 - 25) was -1, the last byte_71 would have been 24.
This analysis is for the results of a Loop Read Pulse Log
command
being manually run after an induced $40 fault which occurred during
the beginning of a second consecutive 30U bolus after 72 hours of Pod use.
02 LL 50 IIII XXXXXXXX XXXXXXXX XXXXXXXX...
02 cb 50 0ac1 1d73bc80 2073bc00 2573bc00 ...
IIII
= 0x0ac1 = 2753 entries (2704..2753)
1d73bc80 2073bc00 2573bc00 2873bc00 2d73bc00 3073bc00 3573bc00 3873bc00 3d73bc00 4073bc00
4573bc00 4873bc00 4d73bc00 5073bc00 5573bc00 5873bc80 5d73bc80 6073bc80 0173bc80 0473bc80
0973bc80 0c73bc80 1173bc80 1472bd80 1973bc80 1c73bc00 2173bc00 2473bc00 2972bd00 2c738d00
3173bc00 3473bc00 3973bc00 3c738d00 4173bc00 4473bc00 4973bc00 4c739400 5173bc00 54728b00
5973bc00 5c728b00 6171bc00 64307a00 6974be00 6c73bc00 7173bc00 7473bc00 7973bc00 7c73bc40
Detailed analysis for the last pulse log entry (slot 2753) which was 7c73bc40
:
01111100 01110011 10111100 01000000
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee
=011111
= 0x1F = 31, encoder count (byte_71) -
a
= 0, LOAD1 (byte_11E) -
ppp
=011
= 3, pulse mode = bolus (byte_35F) -
l
= 1, low reservoir signal, ((PTBD & 8) != 0) -
iii
= 1, immediate bolus tick counter, 1/4 second has passed for this pulse (byte_280/2) -
b
= 1, LoadCountVal & 1 -
cccccccc
=10111100
= 0xbc = 188, LoadCountVal / 2 -
d
= 0, last analog comparator read value (byte_27B) -
f
= 1, a 0x4x fault when Tab5[0x10] == 0 (byte_B96) -
gggggg
=000000
= 0, last normalized encoder count (from byte_BE3[])
LoadCountVal = 188 x 2 + 1 = 377 and LOADCNT
= 368.
Since the last normalized encoder count (byte_71 - 25) was 0, the last byte_71 would have been 25.
Detailed analysis for the first entry returned in last 50 entries (slot 2704) which was 1d73bc80
:
00011101 01110011 10111100 10000000
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee
=000111
= 7, encoder count (byte_71) -
a
= 1, LOAD2 (byte_11E) -
ppp
=011
= 3, pulse mode = bolus (byte_35F) -
l
= 1, low reservoir signal, ((PTBD & 8) != 0) -
iii
= 1, immediate bolus tick counter, 1/4 second has passed for this pulse (byte_280/2) -
b
= 1, LoadCountVal & 1 -
cccccccc
=10111100
= 0xbc = 188, LoadCountVal / 2 -
d
= 0, last analog comparator read value (byte_27B) -
f
= 0, no 0x4x fault when Tab5[0x10] == 0 (byte_B96) -
gggggg
=000000
= 0, last normalized encoder count (from byte_BE3[])
LoadCountVal = 188 x 2 + 1 = 377 and LOADCNT
= 377 x 976 / 1000 = 368.
Since the last normalized encoder count (byte_71 - 25) was 0, the last byte_71 would have been 25.
02 LL 51 NNNN XXXXXXXX XXXXXXXX XXXXXXXX ...
02 cb 51 0032 1d73bc82 2073bc02 2573bc02 ...
Entries 2654..2703:
1d73bc82 2073bc02 2573bc02 2873bc02 2d73bc02 3073bc02 3573bc02 3873bc02 3d73bc02 4073bc02
4573bc02 4853bc02 4d73bc02 5073bc02 5573bc02 5873bc82 5d73bc82 6073bc82 0173bc80 0473bc80
0973bc80 0c73bc80 1173bc80 1473bc80 1973bc80 1c73bc80 2173bc80 2473bc00 2973bc00 2c53bc00
3173bc00 3473bc00 3973bc00 3c73bc00 4173bc00 4473bc00 4973bc00 4c73bc00 5173bc00 5473bc00
5973bc80 5c73bc80 6173bc80 0073bc80 0572bc80 0873bc80 0d73bc80 1053bc80 1573bc80 1873bc80
Detailed analysis for the last pulse log entry returned in this call
(slot 2703, 51st from last entry) which was 1873bc80
:
00011000 01110011 10111100 10000000
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee
=000110
= 6, encoder count (byte_71) -
a
= 0, LOAD1 (byte_11E) -
ppp
=011
= 3, pulse mode = bolus (byte_35F) -
l
= 1, low reservoir signal, ((PTBD & 8) != 0) -
iii
= 1, immediate bolus tick counter, 1/4 second has passed for this pulse (byte_280/2) -
b
= 1, LoadCountVal & 1 -
cccccccc
=10111100
= 0xbc = 188, LoadCountVal / 2 -
d
= 1, last analog comparator read value (byte_27B) -
f
= 0, no a 0x4x fault when Tab5[0x10] (byte_B96) -
gggggg
=000000
= 0, last normalized encoder count (from byte_BE3[])
LoadCountVal = 188 x 2 + 1 = 377 and LOADCNT
= 377 x 1000 / 976 = 368.
Since the last normalized encoder count (byte_71 - 25) was 0, the last byte_71 would have been 25.
Detailed analysis for the first pulse log entry returned in this call
(slot 2654, 100th from last entry) which was 1d73bc82
:
00011101 01110011 10111100 10000010
eeeeee0a pppliiib cccccccc dfgggggg
-
eeeeee
=000111
= 7, encoder count (byte_71) -
a
= 1, LOAD2 (byte_11E) -
ppp
= 3, pulse mode = bolus (byte_35F) -
l
= 1, low reservoir signal, ((PTBD & 8) != 0) -
iii
= 1, immediate bolus tick counter, 1/4 second has passed for this pulse (byte_280/2) -
b
= 1, LoadCountVal & 1 -
cccccccc
=10111100
= 0xbc = 188, LoadCountVal / 2 -
d
= 1, last analog comparator read value (byte_27B) -
f
= 0, no a 0x4x fault when Tab5[0x10] (byte_B96) -
gggggg
=000010
= 2, last normalized encoder count (from byte_BE3[])
LoadCountVal = 188 x 2 + 1 = 377 and LOADCNT
= 377 x 1000 / 976 = 368.
Since the last normalized encoder count (byte_71 - 25) was 2, the last and last byte_71 was 27.
Raw data from 0.05 Insulin not delivered with deactivation:
2018-10-07T06:48:24.713 ID1:1f05e70a PTYPE:PDM SEQ:12 ID2:1f05e70a B9:08 BLEN:3 BODY:0e0150811e CRC:9b
2018-10-07T06:48:24.817 ID1:1f05e70a PTYPE:POD SEQ:13 ID2:1f05e70a B9:0c BLEN:205 BODY:02cb5000ec5020330155213e81582133815d203d81002032bf CRC:e4
2018-10-07T06:48:24.818 ID1:1f05e70a PTYPE:ACK SEQ:14 ID2:1f05e70a CRC:e2
2018-10-07T06:48:24.918 ID1:1f05e70a PTYPE:CON SEQ:15 CON:05203ebf082132bf0d213fbf102033bf15213dbf182033bf1d203bbf202132 CRC:08
2018-10-07T06:48:25.013 ID1:1f05e70a PTYPE:ACK SEQ:16 ID2:1f05e70a CRC:82
2018-10-07T06:48:25.115 ID1:1f05e70a PTYPE:CON SEQ:17 CON:bf25213d3f2821333f2d213d3f3021343f35213d3f3820333f3d203e3f4021 CRC:22
2018-10-07T06:48:25.116 ID1:1f05e70a PTYPE:ACK SEQ:18 ID2:1f05e70a CRC:46
2018-10-07T06:48:25.218 ID1:1f05e70a PTYPE:CON SEQ:19 CON:343f4520403f4820363f4d203d3f5020363f55203e3f582134bf5d2040bf60 CRC:88
2018-10-07T06:48:25.220 ID1:1f05e70a PTYPE:ACK SEQ:20 ID2:1f05e70a CRC:0d
2018-10-07T06:48:25.320 ID1:1f05e70a PTYPE:CON SEQ:21 CON:2035bf01213f800420368009213e800c20368011203e801421358019213b80 CRC:bc
2018-10-07T06:48:25.322 ID1:1f05e70a PTYPE:ACK SEQ:22 ID2:1f05e70a CRC:c9
2018-10-07T06:48:25.423 ID1:1f05e70a PTYPE:CON SEQ:23 CON:1c21368021213d802420358029203d002c20370031213c003421360039203e CRC:03
2018-10-07T06:48:25.425 ID1:1f05e70a PTYPE:ACK SEQ:24 ID2:1f05e70a CRC:9b
2018-10-07T06:48:25.524 ID1:1f05e70a PTYPE:CON SEQ:25 CON:003c20370041213e004421360049203e004c20360051213e00024e CRC:69
2018-10-07T06:48:25.620 ID1:1f05e70a PTYPE:ACK SEQ:26 ID2:1f05e637 CRC:e6
2018-10-07T06:48:25.720 ID1:1f05e70a PTYPE:CON SEQ:25 CON:003c20370041213e004421360049203e004c20360051213e00024e CRC:69
2018-10-07T06:48:25.825 ID1:1f05e70a PTYPE:CON SEQ:25 CON:003c20370041213e004421360049203e004c20360051213e00024e CRC:69
2018-10-07T06:48:25.926 ID1:1f05e70a PTYPE:CON SEQ:25 CON:003c20370041213e004421360049203e004c20360051213e00024e CRC:69
2018-10-07T06:48:26.030 ID1:1f05e70a PTYPE:PDM SEQ:27 ID2:1f575757 B9:56 BLEN:120 BODY:3e0bce15320078406e0082427c0088426c0092407c009840 CRC:6c
2018-10-07T06:48:26.225 ID1:1f05e70a PTYPE:CON SEQ:25 CON:003c20370041213e004421360049203e004c20360051213e00024e CRC:69
2018-10-07T06:48:26.327 ID1:d5d5d5d5 PTYPE:CON SEQ:30 CON:0f82f3854c801e101b8020909f0022109b0024901f0026101b0028909f00 CRC:01
2018-10-07T06:48:26.327 ID1:1f05e70a PTYPE:PDM SEQ:27 ID2:1f05e70a B9:08 BLEN:3 BODY:0e0151011b CRC:02
2018-10-07T06:48:26.431 ID1:1f05e70a PTYPE:POD SEQ:28 ID2:1f05e70a B9:0c BLEN:205 BODY:02cb5100325421223f592129bf5c2023bf612129bf00202380 CRC:58
2018-10-07T06:48:26.432 ID1:1f05e70a PTYPE:ACK SEQ:29 ID2:1f05e70a CRC:76
2018-10-07T06:48:26.534 ID1:1f05e70a PTYPE:CON SEQ:30 CON:05202980082023800d212c801020258015202f80182126801d213080202028 CRC:f8
2018-10-07T06:48:26.627 ID1:1f05e70a PTYPE:ACK SEQ:31 ID2:1f05e70a CRC:b2
2018-10-07T06:48:26.729 ID1:1f05e70a PTYPE:CON SEQ:00 CON:802520318028202a002d20360030212b003521370038202d003d2138004020 CRC:5e
2018-10-07T06:48:26.731 ID1:1f05e70a PTYPE:ACK SEQ:01 ID2:1f05e70a CRC:d2
2018-10-07T06:48:26.833 ID1:1f05e70a PTYPE:CON SEQ:02 CON:2e004520390048212e004d21390050212d005520360058212e005d20388060 CRC:5b
2018-10-07T06:48:26.834 ID1:1f05e70a PTYPE:ACK SEQ:03 ID2:1f05e70a CRC:16
2018-10-07T06:48:26.934 ID1:1f05e70a PTYPE:CON SEQ:04 CON:212e806520388000212e810521388108212f810d2039811021318115213a81 CRC:d3
2018-10-07T06:48:26.935 ID1:1f05e70a PTYPE:ACK SEQ:05 ID2:1f05e70a CRC:5d
2018-10-07T06:48:27.035 ID1:1f05e70a PTYPE:CON SEQ:06 CON:182030811d2139812020310125203b01282031012d21390130213101352039 CRC:74
2018-10-07T06:48:27.131 ID1:1f05e70a PTYPE:ACK SEQ:07 ID2:1f05e70a CRC:99
2018-10-07T06:48:27.232 ID1:1f05e70a PTYPE:CON SEQ:08 CON:01382130013d203b014021300145213b01482032014d203c01026f CRC:e5
2018-10-07T06:48:27.233 ID1:1f05e70a PTYPE:ACK SEQ:09 ID2:1f052130 CRC:05
2018-10-07T06:48:27.336 ID1:1f05e70a PTYPE:CON SEQ:08 CON:01382130013d203b014021300145213b01482032014d203c01026f CRC:e5
2018-10-07T06:48:27.337 ID1:1f05e70a PTYPE:ACK SEQ:09 ID2:1f05e70a CRC:cb
2018-10-07T06:48:27.539 ID1:1f05e70a PTYPE:PDM SEQ:10 ID2:1f05e70a B9:08 BLEN:6 BODY:1c04300820eb8117 CRC:fb
2018-10-07T06:48:27.843 ID1:1f05e70a PTYPE:PDM SEQ:10 ID2:1f05e70a B9:08 BLEN:6 BODY:1c04300820eb8117 CRC:fb
2018-10-07T06:48:27.942 ID1:1f05e70a PTYPE:POD SEQ:11 ID2:1f05e70a B9:0c BLEN:24 BODY:0216020f0000010200ec6a026803ff026b000028a708202301 CRC:a2
0x6a Fault Information returned at 2018-10-07T06:48:27.942:
02 16 02 0J 0K LLLL MM NNNN PP QQQQ RRRR SSSS TT UU VV WW 0X YYYY
02 16 02 0f 00 0001 02 00ec 6a 0268 03ff 026b 00 00 28 a7 08 2023
PP=$6a fault, RRRR=$03ff or >= 50U remaining,
LLLL=$0001 or 0.05U not delivered (basal pulse failure),
SSSS=$026b = 619 min or 10h19m,
NNNN=$00ec = 236 pulses delivered
236 == # of pulse log entries returned in type 80 pulse log read return
Simplified MessageLog entries with selected comments from a Loop Issue Report
after an induced 0x40 fault during the start of second consecutive 30U bolus after 72 hours:
2019-10-11 23:43:17 send 1f04145f181f 1a0e61a1b09402015a01258002580258170dc0177000030d40000000000000 // start of second consecutive 30U bolus
2019-10-11 23:43:20 receive 1f04145f1c0a 1d69055db2580043bfda
2019-10-11 23:43:22 send 1f04145f2007 1f058e6eced600
2019-10-11 23:43:23 receive 1f04145f240a 1d69055e42570043bfd9 // Some time around 23:44:00 the Pod faults
2019-10-11 23:44:09 send 1f04145f2807 1f0501f8fb5700 // manual `Read Pod Status` (to fetch fault info)
2019-10-11 23:44:10 receive 1f04145f2c18 0216020d000252080ac14010ef03d410ef000019b709030d // $40 fault information returned (see below)
2019-10-11 23:44:27 send 1f04145f3003 0e0150 // manual `Read Pulse Log` (manually run to fetch pulse log)
2019-10-11 23:44:33 receive 1f04145f34cd 02cb500ac11d73bc802073bc002573bc002873bc002d73bc003073bc003573bc003873bc003d73bc004073bc004573bc004873bc004d73bc005073bc005573bc005873bc805d73bc806073bc800173bc800473bc800973bc800c73bc801173bc801472bd801973bc801c73bc002173bc002473bc002972bd002c738d003173bc003473bc003973bc003c738d004173bc004473bc004973bc004c7394005173bc0054728b005973bc005c728b006171bc0064307a006974be006c73bc007173bc007473bc007973bc007c73bc40
2019-10-11 23:44:34 send 1f04145f3803 0e0151 // type $51 pod info request as part of `Read Pulse Log`
2019-10-11 23:44:40 receive 1f04145f3ccd 02cb5100321d73bc822073bc022573bc022873bc022d73bc023073bc023573bc023873bc023d73bc024073bc024573bc024853bc024d73bc025073bc025573bc025873bc825d73bc826073bc820173bc800473bc800973bc800c73bc801173bc801473bc801973bc801c73bc802173bc802473bc002973bc002c53bc003173bc003473bc003973bc003c73bc004173bc004473bc004973bc004c73bc005173bc005473bc005973bc805c73bc806173bc800073bc800572bc800873bc800d73bc801053bc801573bc801873bc80
0x40 Fault Information returned at 2019-10-11 23:44:10:
02 16 02 0J 0K LLLL MM NNNN PP QQQQ RRRR SSSS TT UU VV WW 0X YYYY
02 16 02 0d 00 0252 08 0ac1 40 10ef 03d4 10ef 00 00 19 b7 09 030d
PP=$40 fault, RRRR=$03d4 = 980 pulses remaining (49.0U) in reservoir
LLLL=$0252=594 pulses or 29.7U not delivered
SSSS=$10ef = 4335 min or 72h15m
NNNN=$ac1 = 2753 pulses or 137.65U delivered
2753 pulses == # of pulse log entries returned in type 80 pulse log read return