Skip to content

Command 19 Configure Alerts

Joe Moran edited this page Nov 12, 2023 · 27 revisions

0x19 Configure Alerts Command

Command 0x19 can used to configure a number of different alerts. This command is used multiple times during initial setup and for various other configuration situations like changing the Low Reservoir or Replace Pod Soon alerts and for Confidence Reminders. The $19 command can also follow a Command 1F Cancel-Request, when the user issues a suspend.

19 LL NNNNNNNN IVXX YYYY 0J0K [IVXX YYYY 0J0K]...

  • 19 (1 byte): Mtype of $19 specifies a Configure Alerts Command
  • LL (1 byte): Length of command (typically 0x0a, 0x10 or 0x16)
  • NNNNNNNN (4 bytes): Nonce, the 32-bit validator (random looking numbers)
  • IVXX (2 bytes): bit format 0iiiabcx xxxxxxxx as follows:
    • 0iii is the 3-bit alert #. In the $1D Status Response aaaaaaaa bits and in the TT byte of the $02 Pod Information Response Type 2, active, unacknowledged alerts are returned as a bit mask (1 << alert #).
    • The a (0x0800) bit being set indicates that this alert is active.
    • The b (0x0400) bit being set indicates that this alert is for setting a low reservoir alert and not a time based alert.
    • The c (0x0200) bit being set indicates that this alert is for the Auto-Off function.
    • x xxxxxxxx is a 9-bit value for the alert duration in minutes
  • YYYY (2 bytes): 14-bit alert value
    • If b bit is 0, YYYY is the number of minutes from now before alerting, maximum value 4,800 (i.e., 80 hours).
    • If b bit is 1, YYYY is the number of units for low reservoir alert x 10 (i.e., the # of 0.05U pulses / 2), maximum value 500 (i.e., 50U x 10).
  • 0J0K (2 bytes): 12-bit beep word consisting of two bytes 0J and 0K.
    • The J nibble is a beep repeat pattern value:

      • 0 - Beep once
      • 1 - Beep every minute for 3 minutes and repeat every 60 minutes
      • 2 - Beep every minute for 15 minutes
      • 3 - Beep every minute for 3 minutes and repeat every 15 minutes
      • 4 - Beep at 2, 5, 8, 11, ... 53, 56, 59 minutes
      • 5 - Beep every 60 minutes
      • 6 - Beep every 15 minutes
      • 7 - Beep at 14, 29, 44 and 59 minutes
      • 8 - Beep every 5 minutes
    • The K nibble is the beep type to be sounded when the alert is triggered. Recordings for common beep values can be found in All Beep Types. When deactivating an alert (a == 0), PDMs use a K nibble value of 0x0. However 0x0 cannot be used as a beep type for an actual alert that can be triggered (a == 1). To implement a non-sounding silent alert, a K nibble value of 0xF must be used instead. Values not listed for the K beep type nibble will fail and return an 0x6 Error Response, code 7.

      • 0x0 No beep (only with a bit == 0 for alert deactivation)
      • 0x1 BeepBeepBeepBeep
      • 0x2 BipBeep BipBeep BipBeep BipBeep
      • 0x3 BipBip
      • 0x4 Beep
      • 0x5 BeepBeepBeep
      • 0x6 Beeeeeep
      • 0x7 BipBipBip BipBipBip
      • 0x8 BeeepBeeep
      • 0xB BeepBeep
      • 0xC Beeep
      • 0xD BipBeeeeep
      • 0xF No beep (non-sounding silent alert when triggered)

The three-word entries can be repeated an arbitrary number of times for setting multiple alerts with the same $19 command. The command length LL for a single alert 0x19 command is 0x0a, for a double alert 0x19 command is 0x10, and for a triple alert 0x19 command is 0x16.

Some observed values for different values of I (0iii):

0 - Auto-off advisory alert (configurable)
020f 0000 0202    Auto-off disabled ('a' bit off disables Auto-off)
0a0f 003c 0202    Auto-off enabled 1 hour, $003c=60=1 hr, $0f=15 min limit
0a0f 05a0 0202    Auto-off enabled 24 hours, $05a0=1440=24 hrs, $0f=15 min
                  Beep word of $0202 => 2 sets of beeps every minute

1 - Never Observed

2 - Shutdown imminent alert
2800 1283 0602    2nd alert in startup triple, $1283=4739 min=78.98 hrs Shutdown imminent alert
                  Beep word $0602 => 2 sets of beeps every 15 minutes

3 - Expiration reminder alert (programmable)
3800 0ff0 0302    Pod startup #3 & Pod expiration configure, $0ff0=4080 min=68 hrs (default) Replace Pod Soon alert
                  Beep word of $0302 => 2 sets of beeps every minute for 3 minutes and then repeat every 15 minutes

4 - Low Reservoir alert (programmable)
4c00 00c8 0102    Pod startup #1 & low reservoir configure, $00c8=200/10=20U ('b' bit set) Low Reservoir advisory alert
                  Beep word $0102 => 2 sets of beeps every minute for 3 minutes and then repeat every 60 minutes

5 - Suspend in Progress alert (configurable, always observed paired with #6)
5000 0000 0000    After a Resume Insulin delivery with a Confidence Reminder ('a' bit off clears Suspend alert #5)
580f 000f 0604    As part of a 30 min Suspend, after silent $1F Cancel command ($0f = 15 min)
                  Beep word $0604 => 1 short beep every 15 minutes

6 - End of Insulin Suspend alert (configurable, always observed paired with #5)
6000 0000 0000    After a Resume Insulin delivery with a Confidence Reminder ('a' bit off clears Suspend alert #6)
6800 001e 0302    As part of a Suspend, after silent $1F Cancel command ($1e = 30 min)
                  Beep word $0302 => 2 sets of beeps every minute for 3 minutes and then repeat every 15 minutes

7 - Pod Expired alert (multiple uses)
786e 000a 0802    Fake internal call uses this constructed command for a 10 min alert ($6e=110, 10+110=120 min total)
                  Beep word of $0802 => 2 sets of beeps every 5 minutes
7837 0005 0802    Pod startup #2: 5 minute alert for priming ($37=55, 5+55=60 min total)
                  Beep word of $0802 => 2 sets of beeps every 5 minutes
7964 003c 0502    $3c=60 min alert in [[Status packets 33U left in reservoir]] ($164=356, 60+356=416 min total)
                  Beep word of $502 => 2 sets of beeps every 60 minutes
79a4 10df 0502    1st alert of startup triple: $10df=4319 min=71.98 hrs, $1a4=420 min=7 hrs (71.98+7=78.98 hrs total)
                  Beep word of $502 => 2 sets of beeps every 60 minutes

Observations

Except for a small difference for alert #0 case and some special case code for potentially shutting down for an expired alert #7 during Pod initialization, there is no special code to handle any of the other values of I any differently from any other cases and thus the most of the uses seem to just be by convention as used by the PDM. Alert #1 appears to have not been used by the PDM for its Custom Reminders feature (which is all done on the PDM itself). Alert #1 could be used to create custom or debugging alert or even a secondary timing or reservoir alert from the Pod.

When an alert is triggered (i.e., the specified number of minutes has passed or the reservoir has dropped to the requested level), the limit value reached is saved and a flag is set marking this alert # as unacknowledged. The Pod can use a $02 Response Type 1 to return the limit values (time or reservoir) reached so that the PDM can then use to notify the user for the reason of each triggered alert. The $02 Response Type 1 has a fixed length $13, followed by a 01 byte, followed by an word, followed by 8 words for the alert values #0 thru #7 respectively that have been reached or zeroes if that alert limit has not been reached.

In the aaaaaaaa bits of the $1D Status Response and the TT byte of the Type 2 $02 Response, active unacknowledged alerts are returned as a bit mask (1 << alert #). The PDM can issue a $11 Acknowledge Alerts command to acknowledge a triggered alert which will clear the unacknowledged bit for the specified alert #'s to suppress the audio beeps without actually clearing the triggered alert. Alerts can be totally cleared by issuing an $11 Acknowledge Alerts command with I set to alert # to be cleared with the rest of VXX, YYYY and 0J0K values as all 0's.

During Pairing

The initialization sequence typically sends the $19 Configure Alerts command three separate times for alerts #4 ($4c00), #7 ($7837) and #3 ($3800) in that order. Different initialization sequences are very similar, but can have differing YYYY values depending on the PDM settings for the IVXX=$4c00 (Low Reservoir) and IVXX=$3800 (Replace Pod Soon) advisory alerts and the exact timing.

First Pairing $19 Command for Alert #4

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a ae01a66c 4c00 0064 0102

This command uses alert #4 to be the default low reservoir advisory alert at $0064 = 100/10 = 10U. If the PDM has a different low reservoir amount set, YYYY will have a different value. The low reservoir 0J0K beep word is $102 which is 2 sets of beeps every minute for 3 minutes and then repeat every 60 minutes.

Second Pairing $19 Command for Alert #7

The following $19 Configure Alerts Command is used before the priming sequence is started:

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a 305a108b 7837 0005 0802

The Omnipod user manual states:

After filling the Pod with insulin, you should complete
the Pod change process within 60 minutes. As a
reminder that the Pod has been filled, it will beep
every 5 minutes to indicate that time is passing. If you
do not set up the Pod within 60 seconds, you must
deactivate and discard it.

The $19 Configure Alerts command for alert #7 implements this particular policy. The YYYY value of 5 denotes the beep after 5 minutes using 0J0K beep word of $0802 (2 sets of beeps every 5 minutes) while the XX value of $37 = 55 means that this alert will repeat for an additional 55 minutes have passed if this condition is not cleared.

Third Pairing $19 Command for Alert #3

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a 365deab7 3800 0ff0 0302

This command uses alert #3 to set default Replace Pod Soon alert of $0ff0 = 4080/60 = 68 hours from now (i.e., 4 hours before the nominal 72-hour Pod expiration time). If a different Pod expiration warning time has been set, the YYYY value will vary. This alert's 0J0K beep word is $302 which is 2 sets of beeps every minute for 3 minutes and then repeat every 15 minutes.

Fourth Pairing $19 Command Triple Alert for #7, #2, and #0

The fourth and final pairing $19 Command sets a triple alert and is used during the Cannula insert. Examples are taken from Pairing, Pairing 4, and Pairing 5 respectively:

19 LL NNNNNNNN IVXX YYYY 0J0K IVXX YYYY 0J0K IVXX YYYY 0J0K
19 16 feb6268b 79a4 10de 0502 2800 1282 0602 020f 0000 0202
19 16 4aa23e25 79a4 10df 0502 2800 1283 0602 020f 0000 0202
19 16 ba952b8b 79a4 10df 0502 2800 1283 0602 020f 0000 0202

These three different examples all have the nearly the same format and set 3 alerts (LL = $16) in the same command to set the #7, #2 and #0 alerts. The only difference is the exact YYYY values used for the first two alerts which can vary depending on how long it took to get to this part of the pairing sequence (e.g., in the first example the non-zero YYYY values are 1 less than in the other two examples which indicates that this pairing sequence took a minute longer than with the other 2 examples). Let's examine the last triple alert example in more detail.

  • Alert #7 is set for $10df=4319/60=71.98 hours with beep type $502 with an x xxxxxxxx value of $1a4=420 minutes=7 hours. This alert presumably sets up the beeping that occurs at 72 hours in the life of the Pod which will continue for the next 7 hours.
  • Alert #2 is set for $1283=4739/60=78.98 hours with a 0J0K beep word of $602 (2 sets of beeps every 15 minutes). This shutdown imminent alert sets up the beeping that occurs at 79 hours, which is the last hour of the Pod's absolute maximum 80 hour life.
  • Alert #0 has the 'c' ($0200) bit set which indicates that is an Auto-off alert. Since the 'a' ($0800) bit is not set, this alert is disabling the Auto-off alert and the XX value of $0f and the beep word of $0202 are actually not used. Presumably if an Auto-off time had previously been set in the PDM, the 'a' bit would have been set for this alert and the YYYY value would be the number of minutes for the Auto-off function with an XX value of $0f = 15 minutes and a 0J0K beep word of $0202 (2 sets of beeps every minute) (e.g., for a 2 hour Auto-off: 0a0f 0078 0202).

Suspend Double Alerts #5 and #6

As noted in the Suspend section of the Command 1F Cancel Request, a double alert for #5 and #6 is used immediately following a $1F Cancel Request command as shown this example for a 30 minute Suspend:

1f 05 NNNNNNNN AX  19 LL NNNNNNNN IVXX YYYY 0J0K IVXX YYYY 0J0K
1f 05 b15898b0 03  19 10 b15898b0 580f 000f 0604 6800 001e 0302

For the #5 alert both XX and YYYY values are $0f or 15 minutes using 0J0K beep word of $0604 (beep every 15 minutes) while for the #6 alert XX is 0 while YYYY is $1e or 30 minutes using beep type 0J0K of $0302 (2 sets of beeps every minute for 3 minutes and repeat in 15 minutes). The Omnipod user manual states that when the Pod is Suspended, it will beep every 15 minutes until the end of the suspension period and that at the end of a suspend time (30 minutes in this example), a Pod advisory alarm will occur. Presumably these two alerts will implement this policy.

Resume Double Alerts #5 and #6

19 LL NNNNNNNN IVXX YYYY 0J0K IVXX YYYY 0J0K
19 10 d4106aba 5000 0000 0000 6000 0000 0000

Double alerts for #5 and #6 can be found with all zeroes in multiple locations to clear both alerts set as part of a resume like operation:

These examples are used to cancel existing alerts for #5 and #6 using all zero values for VXX, YYYY and 0J0K values.

Set Low Reservoir Alert #4

Consider the following example of setting the maximum 50U low reservoir alert.

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a df72f66d 4c00 01f4 0102

To set a low reservoir advisory alert, the PDM uses an IVXX value of $4c00 which has 0iii=4, a=1, b=1, c=0, and x xxxxxxxx=0. The b bit indicates that this is a low reservoir level alert and so the YYYY value is the number of units x 10 (or # of pulses/2). The YYYY value of $01f4 is 500/10 (or 500x2x0.05U) = 50U and the 0J0K value of $0102 (2 sets of beeps every minute for 3 minutes and repeat each hour) The default PDM low reservoir alert is for 10U which has a YYYY value of 10U x 10 = 100 = $0064.

Examples from Set Low Reservoir Alert:

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a 76305e3b 4c00 0064 0102 // 10U
19 0a 84e4ce3d 4c00 0096 0102 // 15U
19 0a 25ceba2b 4c00 00c8 0102 // 20U
19 0a 260744b0 4c00 00fa 0102 // 25U
19 0a 483d195a 4c00 012c 0102 // 30U
19 0a 701a7f18 4c00 015e 0102 // 35U
19 0a c70532a2 4c00 0190 0102 // 40U
19 0a 29363c0a 4c00 01c2 0102 // 45U
19 0a df72f66d 4c00 01f4 0102 // 50U

Set Replace Pod Soon Alert #3

Consider the following example of setting the Replace Pod Soon alert to 2 hours.

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a cd665f5c 3800 1065 0302

To set a Replace Pod Soon alert, the PDM uses an IVXX value of $3800. In this case, alert #3 is for the Replace Pod Sooon alert with YYYY specifying the number of minutes from now until beeps using 0J0K beep type $302 (every minute for 3 minutes and repeat every 15 minutes). In this example, YYYY was $1065 = 4197/60 = 69.95 hours from now. Since the Pod is considered expired at 72 hours and 2 hours earlier would be 70, the 69.95 value indicates that 0.05 hours = 3 minutes have passed since Pod the pairing until this $19 command was run. The default Replace Pod Soon alert is 4 hours before the 72-hour Pod expiration immediately upon Pod startup which has a YYYY value of 68 x 60 = 4080 = $0ff0.

Examples from Set Pod Expiration Alert:

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a 997f9642 3800 10a0 0302 // 01H
19 0a 9d18848d 3800 1065 0302 // 02H
19 0a 681a38bc 3800 1029 0302 // 03H
19 0a cd665f5c 3800 0fed 0302 // 04H
19 0a 13ae006c 3800 0fb1 0302 // 05H
19 0a 71fcc666 3800 0f75 0302 // 06H
19 0a f3a41f97 3800 0f39 0302 // 07H
19 0a 0cde7b40 3800 0efd 0302 // 08H
19 0a 9d827ce7 3800 0ec1 0302 // 09H
19 0a 5c67daba 3800 0e85 0302 // 10H
19 0a 48843a93 3800 0e49 0302 // 11H
19 0a a767d583 3800 0e0d 0302 // 12H
19 0a ea764dd7 3800 0dd1 0302 // 13H
19 0a 15bad026 3800 0d95 0302 // 14H
19 0a 476eaddb 3800 0d59 0302 // 15H
19 0a a7318e50 3800 0d1d 0302 // 16H
19 0a 2935cbc0 3800 0ce1 0302 // 17H
19 0a 6500694d 3800 0ca5 0302 // 18H
19 0a 6012d12a 3800 0c69 0302 // 19H
19 0a ca334fac 3800 0c2d 0302 // 20H
19 0a 3372c7fb 3800 0bf0 0302 // 21H
19 0a 5239fe3f 3800 0bb4 0302 // 22H
19 0a bf4723b3 3800 0b78 0302 // 23H
19 0a 8f266624 3800 0b3c 0302 // 24H

The YYYY values of 0b3c to 10a0 (2877 to 4256) means that 0J0K beep type $302 (2 sets of beeps every minute for 3 minutes repeated every 15 minutes) will be delivered between 47.95 and 70.93 hours from now which is about 24 to 1 hour before the 72-hour nominal Pod expiration.

Set Auto-off Alert #0

Taken from Warning if no Pod status is available:

19 LL NNNNNNNN IVXX YYYY 0ZZZ
19 0a 840d3d7d 020f 0000 0202     // Off (Auto-off disabled)
19 0a e4e418da 0a0f 003c 0202     // 1H ($003c = 60 minutes)
19 0a f08922b7 0a0f 0078 0202     // 2H ($0078 = 120 minutes)
19 0a ae644678 0a0f 05a0 0202     // 24H ($05a0 = 1440 minutes)

In all of these Auto-off examples, the 'c' bit is set indicating that these alerts are for the Auto-off function. For the Off (Auto-off disabled) case, the 'a' bit is clear which disables the Auto-off alarm. For the other examples, the 'a' bit is set which enables the Auto-off function. When Auto-off is enabled ('a' == 1, 'b' == 0, 'c' == 1), then YYYY specifies the number of minutes for the Auto-off timer. The XX value of $0f = 15 indicates that this advisory alarm will escalate to an Auto-off hazard alarm if not acknowledged within 15 minutes.

Other Pairing Examples Showing the First Three $19 Commands

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a ae01a66c 4c00 0064 0102
19 0a 305a108b 7837 0005 0802
19 0a 365deab7 3800 0ff0 0302

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a 8c61ee59 4c00 00c8 0102
19 0a c0256620 7837 0005 0802
19 0a acf076ca 3800 10a4 0302

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a b83db892 4c00 0064 0102
19 0a d14d9c49 7837 0005 0802
19 0a fddb8e55 3800 0ff0 0302

19 LL NNNNNNNN IVXX YYYY 0J0K
19 0a c8a1e987 4c00 00c8 0102
19 0a e3955e60 7837 0005 0802
19 0a b76fae1a 3800 10a4 0302

Restrictions

This command can only be used when the current Pod Progress State is between 3 and 12.

Clone this wiki locally