├── .idea
├── .name
├── .gitignore
├── compiler.xml
├── vcs.xml
├── misc.xml
└── gradle.xml
├── app
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── dimens.xml
│ │ │ ├── colors.xml
│ │ │ ├── request_message_list_options.xml
│ │ │ ├── strings.xml
│ │ │ └── themes.xml
│ │ ├── values-land
│ │ │ └── dimens.xml
│ │ ├── values-w1240dp
│ │ │ └── dimens.xml
│ │ ├── values-w600dp
│ │ │ └── dimens.xml
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── menu
│ │ │ └── menu_main.xml
│ │ ├── values-night
│ │ │ └── themes.xml
│ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ └── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ └── AndroidManifest.xml
├── proguard-rules.pro
└── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── lib
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── jwoglom
│ │ │ └── pumpx2
│ │ │ ├── pump
│ │ │ ├── events
│ │ │ │ ├── Event.java
│ │ │ │ ├── BTScanForPumpEvent.java
│ │ │ │ ├── BTPermissionsGrantedEvent.java
│ │ │ │ ├── BTConnectedToPumpEvent.java
│ │ │ │ ├── SendPumpMessageEvent.java
│ │ │ │ ├── TriggerConnectionInitEvent.java
│ │ │ │ ├── BTConnStateChangedEvent.java
│ │ │ │ ├── BTConnectToPumpEvent.java
│ │ │ │ ├── BTRequestPermissionsEvent.java
│ │ │ │ ├── BTProcessGattOperationEvent.java
│ │ │ │ └── PumpResponseMessageEvent.java
│ │ │ ├── messages
│ │ │ │ ├── MessageType.java
│ │ │ │ ├── UndefinedMessage.java
│ │ │ │ ├── response
│ │ │ │ │ ├── currentStatus
│ │ │ │ │ │ ├── CurrentBatteryAbstractResponse.java
│ │ │ │ │ │ ├── PumpFeaturesAbstractResponse.java
│ │ │ │ │ │ ├── HistoryLogResponse.java
│ │ │ │ │ │ ├── CGMHardwareInfoResponse.java
│ │ │ │ │ │ └── CurrentBatteryV1Response.java
│ │ │ │ │ ├── historyLog
│ │ │ │ │ │ ├── HistoryLog.java
│ │ │ │ │ │ ├── DateChangeResponse.java
│ │ │ │ │ │ └── DateChangeHistoryLog.java
│ │ │ │ │ └── authentication
│ │ │ │ │ │ └── PumpChallengeResponse.java
│ │ │ │ ├── helpers
│ │ │ │ │ └── Dates.java
│ │ │ │ ├── builders
│ │ │ │ │ ├── CentralChallengeBuilder.java
│ │ │ │ │ ├── PumpFeaturesBuilder.java
│ │ │ │ │ ├── PumpChallengeBuilder.java
│ │ │ │ │ └── CurrentBatteryBuilder.java
│ │ │ │ ├── TransactionId.java
│ │ │ │ ├── README.md
│ │ │ │ ├── models
│ │ │ │ │ ├── MinsTime.java
│ │ │ │ │ └── MultiDay.java
│ │ │ │ ├── request
│ │ │ │ │ ├── currentStatus
│ │ │ │ │ │ ├── ApiVersionRequest.java
│ │ │ │ │ │ ├── AlarmStatusRequest.java
│ │ │ │ │ │ ├── AlertStatusRequest.java
│ │ │ │ │ │ ├── ControlIQIOBRequest.java
│ │ │ │ │ │ ├── CGMHardwareInfoRequest.java
│ │ │ │ │ │ ├── LastBGRequest.java
│ │ │ │ │ │ ├── CGMStatusRequest.java
│ │ │ │ │ │ ├── PumpGlobalsRequest.java
│ │ │ │ │ │ ├── NonControlIQIOBRequest.java
│ │ │ │ │ │ ├── TempRateRequest.java
│ │ │ │ │ │ ├── PumpSettingsRequest.java
│ │ │ │ │ │ ├── RemindersRequest.java
│ │ │ │ │ │ ├── InsulinStatusRequest.java
│ │ │ │ │ │ ├── PumpFeaturesV1Request.java
│ │ │ │ │ │ ├── PumpVersionRequest.java
│ │ │ │ │ │ ├── ControlIQInfoV1Request.java
│ │ │ │ │ │ ├── CurrentBatteryV1Request.java
│ │ │ │ │ │ ├── CurrentBatteryV2Request.java
│ │ │ │ │ │ ├── CGMAlertStatusRequest.java
│ │ │ │ │ │ ├── PumpFeaturesV2Request.java
│ │ │ │ │ │ ├── ReminderStatusRequest.java
│ │ │ │ │ │ ├── TimeSinceResetRequest.java
│ │ │ │ │ │ ├── ControlIQInfoV2Request.java
│ │ │ │ │ │ ├── CurrentBasalStatusRequest.java
│ │ │ │ │ │ ├── CurrentBolusStatusRequest.java
│ │ │ │ │ │ ├── CurrentEGVGuiDataRequest.java
│ │ │ │ │ │ ├── BasalLimitSettingsRequest.java
│ │ │ │ │ │ ├── CGMOORAlertSettingsRequest.java
│ │ │ │ │ │ ├── ControlIQSleepScheduleRequest.java
│ │ │ │ │ │ ├── CGMRateAlertSettingsRequest.java
│ │ │ │ │ │ ├── GlobalMaxBolusSettingsRequest.java
│ │ │ │ │ │ ├── CGMGlucoseAlertSettingsRequest.java
│ │ │ │ │ │ ├── BasalIQStatusRequest.java
│ │ │ │ │ │ ├── ProfileStatusRequest.java
│ │ │ │ │ │ ├── BasalIQSettingsRequest.java
│ │ │ │ │ │ ├── HistoryLogStatusRequest.java
│ │ │ │ │ │ ├── HomeScreenMirrorRequest.java
│ │ │ │ │ │ ├── ExtendedBolusStatusRequest.java
│ │ │ │ │ │ ├── BasalIQAlertInfoRequest.java
│ │ │ │ │ │ └── IDPSegmentRequest.java
│ │ │ │ │ ├── NonexistentErrorRequest.java
│ │ │ │ │ └── historyLog
│ │ │ │ │ │ └── NonexistentHistoryLogStreamRequest.java
│ │ │ │ └── annotations
│ │ │ │ │ └── MessageProps.java
│ │ │ └── bluetooth
│ │ │ │ ├── PumpConfig.java
│ │ │ │ ├── ServiceUUID.java
│ │ │ │ └── models
│ │ │ │ └── Packet.java
│ │ │ ├── util
│ │ │ └── timber
│ │ │ │ └── DebugTree.java
│ │ │ └── shared
│ │ │ ├── EventService.java
│ │ │ └── L.java
│ └── AndroidManifest.xml
│ ├── test
│ └── java
│ │ └── com
│ │ └── jwoglom
│ │ └── pumpx2
│ │ ├── ExampleUnitTest.java
│ │ ├── JavaHelpersTest.java
│ │ └── pump
│ │ └── messages
│ │ ├── request
│ │ ├── currentStatus
│ │ │ ├── ApiVersionRequestTest.java
│ │ │ ├── AlertStatusRequestTest.java
│ │ │ ├── ControlIQInfoV1RequestTest.java
│ │ │ ├── PumpFeaturesV1RequestTest.java
│ │ │ ├── PumpFeaturesV2RequestTest.java
│ │ │ ├── LastBGRequestTest.java
│ │ │ ├── BasalLimitSettingsRequestTest.java
│ │ │ ├── TempRateRequestTest.java
│ │ │ ├── CGMStatusRequestTest.java
│ │ │ ├── RemindersRequestTest.java
│ │ │ ├── HistoryLogRequestTest.java
│ │ │ ├── IDPSegmentRequestTest.java
│ │ │ ├── PumpVersionRequestTest.java
│ │ │ ├── AlarmStatusRequestTest.java
│ │ │ ├── PumpGlobalsRequestTest.java
│ │ │ ├── PumpSettingsRequestTest.java
│ │ │ ├── BasalIQStatusRequestTest.java
│ │ │ ├── ControlIQIOBRequestTest.java
│ │ │ ├── InsulinStatusRequestTest.java
│ │ │ ├── ProfileStatusRequestTest.java
│ │ │ ├── CGMAlertStatusRequestTest.java
│ │ │ ├── ReminderStatusRequestTest.java
│ │ │ ├── TimeSinceResetRequestTest.java
│ │ │ ├── BasalIQSettingsRequestTest.java
│ │ │ ├── BasalIQAlertInfoRequestTest.java
│ │ │ ├── CGMHardwareInfoRequestTest.java
│ │ │ ├── CurrentBatteryV1RequestTest.java
│ │ │ ├── HistoryLogStatusRequestTest.java
│ │ │ ├── HomeScreenMirrorRequestTest.java
│ │ │ ├── CurrentEGVGuiDataRequestTest.java
│ │ │ ├── CurrentBasalStatusRequestTest.java
│ │ │ ├── CurrentBolusStatusRequestTest.java
│ │ │ ├── CGMOORAlertSettingsRequestTest.java
│ │ │ ├── ExtendedBolusStatusRequestTest.java
│ │ │ ├── CGMRateAlertSettingsRequestTest.java
│ │ │ ├── ControlIQInfoV2RequestTest.java
│ │ │ ├── ControlIQSleepScheduleRequestTest.java
│ │ │ ├── GlobalMaxBolusSettingsRequestTest.java
│ │ │ ├── CGMGlucoseAlertSettingsRequestTest.java
│ │ │ └── CurrentBatteryV2RequestTest.java
│ │ ├── template.j2
│ │ └── authentication
│ │ │ ├── CentralChallengeRequestTest.java
│ │ │ └── PumpChallengeRequestTest.java
│ │ ├── response
│ │ ├── historyLog
│ │ │ ├── template.j2
│ │ │ ├── BolexCompletedHistoryLogTest.java
│ │ │ ├── BGHistoryLogTest.java
│ │ │ ├── BolusCompletedHistoryLogTest.java
│ │ │ ├── DateChangeHistoryLogTest.java
│ │ │ ├── BolusRequestedMsg3HistoryLogTest.java
│ │ │ └── TimeChangeHistoryLogTest.java
│ │ ├── template.j2
│ │ ├── currentStatus
│ │ │ ├── HistoryLogResponseTest.java
│ │ │ ├── LastBGResponseTest.java
│ │ │ ├── PumpFeaturesV2ResponseTest.java
│ │ │ ├── ApiVersionResponseTest.java
│ │ │ ├── BasalLimitSettingsResponseTest.java
│ │ │ ├── CGMAlertStatusResponseTest.java
│ │ │ ├── ReminderStatusResponseTest.java
│ │ │ ├── TempRateResponseTest.java
│ │ │ ├── CGMHardwareInfoResponseTest.java
│ │ │ ├── InsulinStatusResponseTest.java
│ │ │ ├── BasalIQAlertInfoResponseTest.java
│ │ │ ├── BasalIQStatusResponseTest.java
│ │ │ ├── CGMStatusResponseTest.java
│ │ │ ├── BasalIQSettingsResponseTest.java
│ │ │ ├── HistoryLogStatusResponseTest.java
│ │ │ ├── CurrentBasalStatusResponseTest.java
│ │ │ ├── GlobalMaxBolusSettingsResponseTest.java
│ │ │ ├── CGMOORAlertSettingsResponseTest.java
│ │ │ ├── ProfileStatusResponseTest.java
│ │ │ ├── CurrentBolusStatusResponseTest.java
│ │ │ ├── CurrentEGVGuiDataResponseTest.java
│ │ │ ├── ExtendedBolusStatusResponseTest.java
│ │ │ ├── PumpVersionResponseTest.java
│ │ │ ├── PumpSettingsResponseTest.java
│ │ │ ├── CurrentBatteryV2ResponseTest.java
│ │ │ ├── ControlIQInfoV2ResponseTest.java
│ │ │ ├── ControlIQIOBResponseTest.java
│ │ │ ├── PumpFeaturesV1ResponseTest.java
│ │ │ └── PumpGlobalsResponseTest.java
│ │ ├── authentication
│ │ │ ├── CentralChallengeResponseTest.java
│ │ │ └── PumpChallengeResponseTest.java
│ │ └── ErrorResponseTest.java
│ │ ├── helpers
│ │ └── BytesTest.java
│ │ └── OpCodeFinderTest.java
│ └── androidTest
│ └── java
│ └── com
│ └── jwoglom
│ └── pumpx2
│ └── ExampleInstrumentedTest.java
├── .gitattributes
├── .gitignore
├── settings.gradle
├── .github
└── workflows
│ └── code-coverage.yml
├── LICENSE.md
└── gradle.properties
/.idea/.name:
--------------------------------------------------------------------------------
1 | PumpX2
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 16dp
3 |
--------------------------------------------------------------------------------
/app/src/main/res/values-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 48dp
3 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w1240dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 200dp
3 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 48dp
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/Event.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | public class Event {
4 | }
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rifkyprayoga/pumpX2/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/MessageType.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages;
2 |
3 | public enum MessageType {
4 | REQUEST,
5 | RESPONSE
6 | }
7 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | #
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | #
4 | # These are explicitly windows files and should use crlf
5 | *.bat text eol=crlf
6 |
7 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/BTScanForPumpEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | public class BTScanForPumpEvent extends Event {
4 | public BTScanForPumpEvent() {}
5 |
6 | public String toString() {
7 | return "BTScanForPumpEvent()";
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/BTPermissionsGrantedEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | public class BTPermissionsGrantedEvent extends Event {
4 | public BTPermissionsGrantedEvent() {}
5 |
6 | public String toString() {
7 | return "BTPermissionsGrantedEvent()";
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/UndefinedMessage.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages;
2 |
3 | import org.apache.commons.lang3.NotImplementedException;
4 |
5 | public class UndefinedMessage extends Message {
6 | public UndefinedMessage() {}
7 |
8 | @Override
9 | public void parse(byte[] raw) {
10 | throw new NotImplementedException();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CurrentBatteryAbstractResponse.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 |
5 | public abstract class CurrentBatteryAbstractResponse extends Message {
6 | public abstract int getCurrentBatteryAbc();
7 | public abstract int getCurrentBatteryIbc();
8 | }
9 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/bluetooth/PumpConfig.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.bluetooth;
2 |
3 | public class PumpConfig {
4 |
5 | public static String pumpSerial = "90556643";
6 | public static String pumpMAC = "F7:9F:58:02:A9:3C";
7 |
8 | public static String bluetoothName() {
9 | return "tslim X2 ***" + pumpSerial.substring(pumpSerial.length()-3);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/PumpFeaturesAbstractResponse.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 |
5 | import java.util.Set;
6 |
7 | public abstract class PumpFeaturesAbstractResponse extends Message {
8 | public abstract Set getFeatures();
9 | }
10 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/util/timber/DebugTree.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.util.timber;
2 |
3 | import androidx.annotation.NonNull;
4 |
5 | import timber.log.Timber;
6 |
7 | public class DebugTree extends Timber.DebugTree {
8 | @Override
9 | public void log(int priority, String tag, @NonNull String message, Throwable t) {
10 | super.log(priority, "X2:"+tag, message, t);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /example/local.properties
5 | /.idea/caches
6 | /.idea/libraries
7 | /.idea/modules.xml
8 | /.idea/workspace.xml
9 | /.idea/navEditor.xml
10 | /.idea/assetWizardSettings.xml
11 | .DS_Store
12 | /build
13 | /example/build
14 | /captures
15 | /example/captures
16 | .externalNativeBuild
17 | .cxx
18 | local.properties
19 | PumpPrivateConfig.java
20 |
21 | # Ignore Gradle build output directory
22 | build
23 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/lib/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/bluetooth/ServiceUUID.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.bluetooth;
2 |
3 | import java.util.UUID;
4 |
5 | public class ServiceUUID {
6 | // Pump-specific UUID used for all known functions
7 | public static final UUID PUMP_SERVICE_UUID = UUID.fromString("0000fdfb-0000-1000-8000-00805f9b34fb");
8 |
9 | // Generic Bluetooth Device Information service (DIS)
10 | public static final UUID DIS_SERVICE_UUID = UUID.fromString("0000180A-0000-1000-8000-00805f9b34fb");
11 | }
12 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/BTConnectedToPumpEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 |
4 | public class BTConnectedToPumpEvent {
5 | // private final RxBleDevice device;
6 | //
7 | // public BTConnectedToPumpEvent(RxBleDevice device) {
8 | // this.device = device;
9 | // }
10 | //
11 | // public RxBleDevice device() {
12 | // return device;
13 | // }
14 | //
15 | // public String toString() {
16 | // return "BTConnectedToPumpEvent(device="+device+")";
17 | // }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/SendPumpMessageEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 |
5 | public class SendPumpMessageEvent {
6 | private final Message message;
7 | public SendPumpMessageEvent(Message message) {
8 | this.message = message;
9 | }
10 |
11 | public Message message() {
12 | return message;
13 | }
14 |
15 | public String toString() {
16 | return "SendPumpMessageEvent(message=" + message + ")";
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/helpers/Dates.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.helpers;
2 |
3 | import java.time.Instant;
4 | import java.util.Date;
5 | import java.util.concurrent.TimeUnit;
6 |
7 | public class Dates {
8 | public static long fromJan12008ToUnixEpochSeconds(long seconds) {
9 | return seconds + 1199145600;
10 | }
11 |
12 | public static Instant fromJan12008EpochSecondsToDate(long seconds) {
13 | return Instant.ofEpochSecond(fromJan12008ToUnixEpochSeconds(seconds));
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | gradlePluginPortal()
4 | google()
5 | mavenCentral()
6 | maven {
7 | url 'https://jitpack.io'
8 | }
9 | }
10 | }
11 | dependencyResolutionManagement {
12 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
13 | repositories {
14 | google()
15 | mavenCentral()
16 | maven {
17 | url 'https://jitpack.io'
18 | }
19 | }
20 | }
21 | rootProject.name = "PumpX2"
22 | include ':app', ':lib'
23 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/TriggerConnectionInitEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | import android.app.Activity;
4 |
5 | public class TriggerConnectionInitEvent {
6 |
7 | private final Activity activity;
8 | public TriggerConnectionInitEvent(Activity activity) {
9 | this.activity = activity;
10 | }
11 |
12 | public Activity activity() {
13 | return activity;
14 | }
15 |
16 | public String toString() {
17 | return "TriggerConnectionInitEvent(activity=" + activity + ")";
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/builders/CentralChallengeBuilder.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.builders;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.helpers.Bytes;
4 | import com.jwoglom.pumpx2.pump.messages.request.authentication.CentralChallengeRequest;
5 |
6 | public class CentralChallengeBuilder {
7 | public static CentralChallengeRequest create(int appInstanceId) {
8 | byte[] centralChallenge = Bytes.getSecureRandom10Bytes();
9 | return new CentralChallengeRequest(appInstanceId, centralChallenge);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/TransactionId.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages;
2 |
3 | public class TransactionId {
4 | private int txId = 0;
5 |
6 | public void set(int i) {
7 | if (i < 0 || i > 255) {
8 | i = 0;
9 | }
10 | txId = i;
11 | }
12 |
13 | public void increment() {
14 | set(txId + 1);
15 | }
16 |
17 | public byte get() {
18 | return (byte) txId;
19 | }
20 |
21 | public String toString() {
22 | return "TransactionId(txId="+txId+")";
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/README.md:
--------------------------------------------------------------------------------
1 | ## t:slim X2 Bluetooth Protocol
2 |
3 | When the t:connect app initializes on first launch:
4 |
5 | * sends **CentralChallengeRequest** with centralChallenge random bytes
6 | * receives **CentralChallengeResponse** with new bytes
7 |
8 |
9 | * sends **PumpChallengeRequest** with pumpChallengeHash (hmac sha1 of the pump's Pairing Code)
10 | * receives **PumpChallengeResponse** with success status
11 |
12 |
13 | * sends **ApiVersionRequest** with empty cargo
14 | * receives **ApiVersionResponse** with major and minor bluetooth API version
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values/request_message_list_options.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | - AlarmStatusRequest
5 | - AlertStatusRequest
6 | - CGMHardwareInfoRequest
7 | - ControlIQIOBRequest
8 | - NonControlIQIOBRequest
9 | - PumpFeaturesRequest
10 | - PumpGlobalsRequest
11 | - PumpSettingsRequest
12 | - CGMStatusRequest
13 |
14 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/shared/EventService.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.shared;
2 |
3 |
4 | import android.app.Service;
5 | import android.content.Intent;
6 | import android.os.IBinder;
7 |
8 | import androidx.annotation.Nullable;
9 |
10 | import com.google.common.base.Strings;
11 |
12 | public class EventService extends Service {
13 | public static String TAG = "X2-" + Strings.nullToEmpty(new Object(){}.getClass().getEnclosingClass().getSimpleName());
14 |
15 | @Nullable
16 | @Override
17 | public IBinder onBind(Intent intent) {
18 | return null;
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | PumpX2
3 | Settings
4 |
5 | First Fragment
6 | Second Fragment
7 | Next
8 | Previous
9 |
10 | Hello first fragment
11 | Hello second fragment. Arg: %1$s
12 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/BTConnStateChangedEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | public class BTConnStateChangedEvent {
4 | // private final RxBleConnection.RxBleConnectionState state;
5 | // public BTConnStateChangedEvent(RxBleConnection.RxBleConnectionState state) {
6 | // this.state = state;
7 | // }
8 | //
9 | // public RxBleConnection.RxBleConnectionState state() {
10 | // return state;
11 | // }
12 | //
13 | // public String toString() {
14 | // return "BTConnStateChangedEvent(state=" + state + ")";
15 | // }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/BTConnectToPumpEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | public class BTConnectToPumpEvent extends Event {
4 | private String deviceName;
5 | private String macAddress;
6 |
7 | public BTConnectToPumpEvent(String deviceName, String macAddress) {
8 | this.deviceName = deviceName;
9 | this.macAddress = macAddress;
10 | }
11 |
12 | public String deviceName() { return deviceName; }
13 | public String macAddress() { return macAddress; }
14 |
15 | public String toString() {
16 | return "BTConnectToPumpEvent(deviceName="+deviceName+", macAddress="+macAddress+")";
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/events/BTRequestPermissionsEvent.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.events;
2 |
3 | import android.app.Activity;
4 |
5 | public class BTRequestPermissionsEvent {
6 | private int attempt;
7 | private final Activity activity;
8 | public BTRequestPermissionsEvent(int attempt, Activity activity) {
9 | this.attempt = attempt;
10 | this.activity = activity;
11 | }
12 |
13 | public int attempt() {
14 | return attempt;
15 | }
16 |
17 | public Activity activity() {
18 | return activity;
19 | }
20 |
21 | public String toString() {
22 | return "BTRequestPermissionsEvent(attempt="+attempt+", activity="+activity+")";
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/models/MinsTime.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.models;
2 |
3 | /**
4 | * Used by ControlIQSleepScheduleResponse and RemindersResponse.Reminder
5 | */
6 | public class MinsTime {
7 | private final int hour;
8 | private final int min;
9 |
10 | public MinsTime(int totalMins) {
11 | this.hour = totalMins / 60;
12 | this.min = totalMins % 60;
13 | }
14 |
15 | public MinsTime(int hour, int min) {
16 | this.hour = hour;
17 | this.min = min;
18 | }
19 |
20 | public int hour() {
21 | return hour;
22 | }
23 |
24 | public int min() {
25 | return min;
26 | }
27 |
28 | public int encode() {
29 | return hour*60 + min;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ApiVersionRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ApiVersionResponse;
7 |
8 | @MessageProps(
9 | opCode=32,
10 | size=0,
11 | type=MessageType.REQUEST,
12 | response=ApiVersionResponse.class
13 | )
14 | public class ApiVersionRequest extends Message {
15 | public ApiVersionRequest() {
16 | this.cargo = EMPTY;
17 | }
18 |
19 | public void parse(byte[] raw) {
20 | this.cargo = raw;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/AlarmStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.AlarmStatusResponse;
7 |
8 | @MessageProps(
9 | opCode=70,
10 | size=0,
11 | type= MessageType.REQUEST,
12 | response= AlarmStatusResponse.class
13 | )
14 | public class AlarmStatusRequest extends Message {
15 | public AlarmStatusRequest() {
16 | this.cargo = EMPTY;
17 | }
18 |
19 | public void parse(byte[] raw) {
20 | this.cargo = raw;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/AlertStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.AlertStatusResponse;
7 |
8 | @MessageProps(
9 | opCode=68,
10 | size=0,
11 | type= MessageType.REQUEST,
12 | response= AlertStatusResponse.class
13 | )
14 | public class AlertStatusRequest extends Message {
15 | public AlertStatusRequest() {
16 | this.cargo = EMPTY;
17 | }
18 |
19 | public void parse(byte[] raw) {
20 | this.cargo = raw;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQIOBRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ControlIQIOBResponse;
7 |
8 | @MessageProps(
9 | opCode=108,
10 | size=0,
11 | type=MessageType.REQUEST,
12 | response= ControlIQIOBResponse.class
13 | )
14 | public class ControlIQIOBRequest extends Message {
15 | public ControlIQIOBRequest() {
16 | this.cargo = EMPTY;
17 | }
18 |
19 | public void parse(byte[] raw) {
20 | this.cargo = raw;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMHardwareInfoRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMHardwareInfoResponse;
7 |
8 | @MessageProps(
9 | opCode=96,
10 | size=0,
11 | type= MessageType.REQUEST,
12 | response= CGMHardwareInfoResponse.class
13 | )
14 | public class CGMHardwareInfoRequest extends Message {
15 | public CGMHardwareInfoRequest() {
16 | this.cargo = EMPTY;
17 | }
18 |
19 | public void parse(byte[] raw) {
20 | this.cargo = raw;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
20 |
21 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/LastBGRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.LastBGResponse;
8 |
9 | @MessageProps(
10 | opCode=50,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=LastBGResponse.class
14 | )
15 | public class LastBGRequest extends Message {
16 | public LastBGRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
--------------------------------------------------------------------------------
/lib/src/androidTest/java/com/jwoglom/pumpx2/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2;
2 |
3 | import android.content.Context;
4 |
5 | import androidx.test.platform.app.InstrumentationRegistry;
6 | import androidx.test.ext.junit.runners.AndroidJUnit4;
7 |
8 | import org.junit.Test;
9 | import org.junit.runner.RunWith;
10 |
11 | import static org.junit.Assert.*;
12 |
13 | /**
14 | * Instrumented test, which will execute on an Android device.
15 | *
16 | * @see Testing documentation
17 | */
18 | @RunWith(AndroidJUnit4.class)
19 | public class ExampleInstrumentedTest {
20 | @Test
21 | public void useAppContext() {
22 | // Context of the app under test.
23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
24 | assertEquals("com.jwoglom.pumpx2.test", appContext.getPackageName());
25 | }
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMStatusResponse;
8 |
9 | @MessageProps(
10 | opCode=80,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CGMStatusResponse.class
14 | )
15 | public class CGMStatusRequest extends Message {
16 | public CGMStatusRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpGlobalsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.PumpGlobalsResponse;
8 |
9 | @MessageProps(
10 | opCode=86,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=PumpGlobalsResponse.class
14 | )
15 | public class PumpGlobalsRequest extends Message {
16 |
17 | public PumpGlobalsRequest() {
18 | this.cargo = EMPTY;
19 | }
20 |
21 | public void parse(byte[] raw) {
22 | Preconditions.checkArgument(raw.length == props().size());
23 | this.cargo = raw;
24 | }
25 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/NonControlIQIOBRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.NonControlIQIOBResponse;
7 |
8 | /**
9 | * ControlIQIOBRequest should be used instead if control IQ is supported
10 | */
11 | @MessageProps(
12 | opCode=38,
13 | size=0,
14 | type=MessageType.REQUEST,
15 | response= NonControlIQIOBResponse.class
16 | )
17 | public class NonControlIQIOBRequest extends Message {
18 | public NonControlIQIOBRequest() {
19 | this.cargo = EMPTY;
20 | }
21 |
22 | public void parse(byte[] raw) {
23 | this.cargo = raw;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/TempRateRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.TempRateResponse;
8 |
9 | @MessageProps(
10 | opCode=42,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=TempRateResponse.class
14 | )
15 | public class TempRateRequest extends Message {
16 | public TempRateRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpSettingsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.PumpSettingsResponse;
8 |
9 | @MessageProps(
10 | opCode=82,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=PumpSettingsResponse.class
14 | )
15 | public class PumpSettingsRequest extends Message {
16 |
17 | public PumpSettingsRequest() {
18 | this.cargo = EMPTY;
19 | }
20 |
21 | public void parse(byte[] raw) {
22 | Preconditions.checkArgument(raw.length == props().size());
23 | this.cargo = raw;
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/RemindersRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.RemindersResponse;
8 |
9 | @MessageProps(
10 | opCode=88,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=RemindersResponse.class
14 | )
15 | public class RemindersRequest extends Message {
16 | public RemindersRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/InsulinStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.InsulinStatusResponse;
8 |
9 | @MessageProps(
10 | opCode=36,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=InsulinStatusResponse.class
14 | )
15 | public class InsulinStatusRequest extends Message {
16 | public InsulinStatusRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpFeaturesV1Request.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.PumpFeaturesV1Response;
8 |
9 | @MessageProps(
10 | opCode=78,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=PumpFeaturesV1Response.class
14 | )
15 | public class PumpFeaturesV1Request extends Message {
16 |
17 |
18 | public PumpFeaturesV1Request() {
19 | this.cargo = EMPTY;
20 | }
21 |
22 | public void parse(byte[] raw) {
23 | Preconditions.checkArgument(raw.length == props().size());
24 | this.cargo = raw;
25 | }
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpVersionRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.PumpVersionResponse;
8 |
9 | @MessageProps(
10 | opCode=84,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=PumpVersionResponse.class
14 | )
15 | public class PumpVersionRequest extends Message {
16 | public PumpVersionRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQInfoV1Request.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ControlIQInfoV1Response;
8 |
9 | @MessageProps(
10 | opCode=104,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response= ControlIQInfoV1Response.class
14 | )
15 | public class ControlIQInfoV1Request extends Message {
16 | public ControlIQInfoV1Request() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/shared/L.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.shared;
2 |
3 | import android.util.Log;
4 |
5 | public class L {
6 | public static void w(String tag, String out) {
7 | try {
8 | Log.w(tag, out);
9 | } catch (RuntimeException e) {
10 | System.out.println("WARN: " + tag + ": " + out);
11 | }
12 | }
13 |
14 | public static void w(String tag, Throwable out) {
15 | try {
16 | Log.w(tag, out);
17 | } catch (RuntimeException e) {
18 | System.out.println("WARN: " + tag + ": " + out);
19 | }
20 | }
21 |
22 | private static boolean isJUnitTest() {
23 | for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
24 | if (element.getClassName().startsWith("org.junit.")) {
25 | return true;
26 | }
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBatteryV1Request.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentBatteryV1Response;
8 |
9 | @MessageProps(
10 | opCode=52,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CurrentBatteryV1Response.class
14 | )
15 | public class CurrentBatteryV1Request extends Message {
16 | public CurrentBatteryV1Request() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBatteryV2Request.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentBatteryV2Response;
8 |
9 | @MessageProps(
10 | opCode=-112,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CurrentBatteryV2Response.class
14 | )
15 | public class CurrentBatteryV2Request extends Message {
16 | public CurrentBatteryV2Request() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMAlertStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMAlertStatusResponse;
8 |
9 | @MessageProps(
10 | opCode=74,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CGMAlertStatusResponse.class
14 | )
15 | public class CGMAlertStatusRequest extends Message {
16 | public CGMAlertStatusRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpFeaturesV2Request.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.PumpFeaturesV2Response;
8 |
9 | @MessageProps(
10 | opCode=-96,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=PumpFeaturesV2Response.class
14 | )
15 | public class PumpFeaturesV2Request extends Message {
16 | public PumpFeaturesV2Request() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ReminderStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ReminderStatusResponse;
8 |
9 | @MessageProps(
10 | opCode=72,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=ReminderStatusResponse.class
14 | )
15 | public class ReminderStatusRequest extends Message {
16 | public ReminderStatusRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/TimeSinceResetRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.TimeSinceResetResponse;
8 |
9 | @MessageProps(
10 | opCode=54,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=TimeSinceResetResponse.class
14 | )
15 | public class TimeSinceResetRequest extends Message {
16 | public TimeSinceResetRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/annotations/MessageProps.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.annotations;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.UndefinedMessage;
6 |
7 | import java.lang.annotation.ElementType;
8 | import java.lang.annotation.Retention;
9 | import java.lang.annotation.RetentionPolicy;
10 | import java.lang.annotation.Target;
11 |
12 | @Target(ElementType.TYPE)
13 | @Retention(RetentionPolicy.RUNTIME)
14 | public @interface MessageProps {
15 | int opCode();
16 | int size() default 0;
17 | boolean variableSize() default false;
18 | boolean stream() default false;
19 | boolean signed() default false;
20 | MessageType type();
21 | Class extends Message> response() default UndefinedMessage.class;
22 | Class extends Message> request() default UndefinedMessage.class;
23 | }
24 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/NonexistentErrorRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.ErrorResponse;
7 |
8 | /**
9 | * This message is used as a paired request message for responses which can occur
10 | * either in response to any request message (e.g. ErrorResponse).
11 | */
12 | @MessageProps(
13 | opCode=-99999999,
14 | size=0,
15 | type=MessageType.REQUEST,
16 | response=ErrorResponse.class
17 | )
18 | public class NonexistentErrorRequest extends Message {
19 |
20 | public NonexistentErrorRequest() {
21 | this.cargo = EMPTY;
22 | }
23 |
24 | public void parse(byte[] raw) {
25 | this.cargo = raw;
26 | }
27 |
28 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQInfoV2Request.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ControlIQInfoV2Response;
8 |
9 | @MessageProps(
10 | opCode=-78,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=ControlIQInfoV2Response.class
14 | )
15 | public class ControlIQInfoV2Request extends Message {
16 | public ControlIQInfoV2Request() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBasalStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentBasalStatusResponse;
8 |
9 | @MessageProps(
10 | opCode=40,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CurrentBasalStatusResponse.class
14 | )
15 | public class CurrentBasalStatusRequest extends Message {
16 | public CurrentBasalStatusRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBolusStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentBolusStatusResponse;
8 |
9 | @MessageProps(
10 | opCode=44,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CurrentBolusStatusResponse.class
14 | )
15 | public class CurrentBolusStatusRequest extends Message {
16 | public CurrentBolusStatusRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentEGVGuiDataRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentEGVGuiDataResponse;
8 |
9 | @MessageProps(
10 | opCode=34,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CurrentEGVGuiDataResponse.class
14 | )
15 | public class CurrentEGVGuiDataRequest extends Message {
16 | public CurrentEGVGuiDataRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/BasalLimitSettingsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.BasalLimitSettingsResponse;
8 |
9 | @MessageProps(
10 | opCode=-118,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response= BasalLimitSettingsResponse.class
14 | )
15 | public class BasalLimitSettingsRequest extends Message {
16 | public BasalLimitSettingsRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMOORAlertSettingsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMOORAlertSettingsResponse;
8 |
9 | @MessageProps(
10 | opCode=94,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CGMOORAlertSettingsResponse.class
14 | )
15 | public class CGMOORAlertSettingsRequest extends Message {
16 | public CGMOORAlertSettingsRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQSleepScheduleRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ControlIQSleepScheduleResponse;
8 |
9 | @MessageProps(
10 | opCode=106,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=ControlIQSleepScheduleResponse.class
14 | )
15 | public class ControlIQSleepScheduleRequest extends Message {
16 | public ControlIQSleepScheduleRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 | }
24 |
25 |
26 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMRateAlertSettingsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMRateAlertSettingsResponse;
8 |
9 | @MessageProps(
10 | opCode=92,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CGMRateAlertSettingsResponse.class
14 | )
15 | public class CGMRateAlertSettingsRequest extends Message {
16 | public CGMRateAlertSettingsRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/GlobalMaxBolusSettingsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.GlobalMaxBolusSettingsResponse;
8 |
9 | @MessageProps(
10 | opCode=-116,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=GlobalMaxBolusSettingsResponse.class
14 | )
15 | public class GlobalMaxBolusSettingsRequest extends Message {
16 | public GlobalMaxBolusSettingsRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMGlucoseAlertSettingsRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Message;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMGlucoseAlertSettingsResponse;
8 |
9 | @MessageProps(
10 | opCode=90,
11 | size=0,
12 | type=MessageType.REQUEST,
13 | response=CGMGlucoseAlertSettingsResponse.class
14 | )
15 | public class CGMGlucoseAlertSettingsRequest extends Message {
16 | public CGMGlucoseAlertSettingsRequest() {
17 | this.cargo = EMPTY;
18 | }
19 |
20 | public void parse(byte[] raw) {
21 | Preconditions.checkArgument(raw.length == props().size());
22 | this.cargo = raw;
23 |
24 | }
25 |
26 |
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/HistoryLog.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.historyLog;
2 |
3 | import android.os.Build;
4 |
5 | import androidx.annotation.RequiresApi;
6 |
7 | import com.google.common.collect.ImmutableSet;
8 | import com.jwoglom.pumpx2.shared.JavaHelpers;
9 |
10 | import java.util.HashSet;
11 |
12 | public abstract class HistoryLog {
13 | protected byte[] cargo = null;
14 |
15 | public abstract int typeId();
16 |
17 | public abstract void parse(byte[] raw);
18 |
19 | public byte[] getCargo() {
20 | return this.cargo;
21 | }
22 |
23 | @RequiresApi(api = Build.VERSION_CODES.N)
24 | public String toString() {
25 | return JavaHelpers.autoToString(this, new HashSet<>());
26 | }
27 |
28 | @RequiresApi(api = Build.VERSION_CODES.N)
29 | public String verboseToString() {
30 | return JavaHelpers.autoToStringVerbose(this, ImmutableSet.of("cargo"));
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/builders/PumpFeaturesBuilder.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.builders;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.response.currentStatus.ApiVersionResponse.ApiVersion.V2_API;
4 |
5 | import android.content.Context;
6 |
7 | import com.jwoglom.pumpx2.pump.PumpState;
8 | import com.jwoglom.pumpx2.pump.messages.Message;
9 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.PumpFeaturesV1Request;
10 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.PumpFeaturesV2Request;
11 |
12 | /**
13 | * On a message;
11 |
12 | public PumpResponseMessageEvent(byte[] data) {
13 | this.data = data;
14 | this.message = Optional.absent();
15 | }
16 | public PumpResponseMessageEvent(byte[] data, Message message) {
17 | this.data = data;
18 | this.message = Optional.of(message);
19 | }
20 |
21 | public byte[] data() {
22 | return data;
23 | }
24 |
25 | public Optional message() {
26 | return message;
27 | }
28 |
29 | public String toString() {
30 | return "PumpResponseMessageEvent(data=" + Hex.encodeHexString(data) + ", message=" + message + ")";
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ExtendedBolusStatusRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.helpers.Bytes;
5 | import com.jwoglom.pumpx2.pump.messages.Message;
6 | import com.jwoglom.pumpx2.pump.messages.MessageType;
7 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
8 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ExtendedBolusStatusResponse;
9 |
10 | @MessageProps(
11 | opCode=46,
12 | size=0,
13 | type=MessageType.REQUEST,
14 | response=ExtendedBolusStatusResponse.class
15 | )
16 | public class ExtendedBolusStatusRequest extends Message {
17 | public ExtendedBolusStatusRequest() {
18 | this.cargo = EMPTY;
19 | }
20 |
21 | public void parse(byte[] raw) {
22 | Preconditions.checkArgument(raw.length == props().size());
23 | this.cargo = raw;
24 |
25 | }
26 |
27 |
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/JavaHelpersTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2;
2 |
3 | import static org.junit.Assert.assertFalse;
4 | import static org.junit.Assert.assertTrue;
5 |
6 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ApiVersionRequest;
7 | import com.jwoglom.pumpx2.shared.JavaHelpers;
8 |
9 | import org.junit.Test;
10 |
11 | import java.util.List;
12 |
13 | public class JavaHelpersTest {
14 |
15 | @Test
16 | public void testGetClassNamesWithPackage() {
17 | // Ensure loaded
18 | ApiVersionRequest foo;
19 | List requestMessages = JavaHelpers.getClassNamesWithPackage("com.jwoglom.pumpx2.pump.messages.request");
20 | assertFalse(requestMessages.isEmpty());
21 | }
22 |
23 | @Test
24 | public void testGetAllPumpRequestMessages() {
25 | // Ensure loaded
26 | ApiVersionRequest foo;
27 | List requestMessages = JavaHelpers.getAllPumpRequestMessages();
28 | assertFalse(requestMessages.isEmpty());
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ApiVersionRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
4 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
5 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ApiVersionRequest;
6 |
7 | import org.apache.commons.codec.DecoderException;
8 | import org.junit.Test;
9 |
10 | public class ApiVersionRequestTest {
11 | @Test
12 | public void testApiVersion() throws DecoderException {
13 | // empty cargo
14 | ApiVersionRequest expected = new ApiVersionRequest();
15 |
16 | ApiVersionRequest parsedReq = (ApiVersionRequest) MessageTester.test(
17 | "0002200200382c",
18 | 2,
19 | 1,
20 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
21 | expected
22 | );
23 |
24 | MessageTester.assertHexEquals(expected.getCargo(), parsedReq.getCargo());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/AlertStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
4 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
5 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.AlertStatusRequest;
6 |
7 | import org.apache.commons.codec.DecoderException;
8 | import org.junit.Test;
9 |
10 | public class AlertStatusRequestTest {
11 | @Test
12 | public void testAlertStatusRequest() throws DecoderException {
13 | // empty cargo
14 | AlertStatusRequest expected = new AlertStatusRequest();
15 |
16 | AlertStatusRequest parsedReq = (AlertStatusRequest) MessageTester.test(
17 | "0003440300a258",
18 | 3,
19 | 1,
20 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
21 | expected
22 | );
23 |
24 | MessageTester.assertHexEquals(expected.getCargo(), parsedReq.getCargo());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/template.j2:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.{{cat}};
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.{{cat}}.{{requestName}};
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class {{requestName}}Test {
13 | @Test
14 | public void test{{requestName}}() throws DecoderException {
15 | // empty cargo
16 | {{requestName}} expected = new {{requestName}}();
17 |
18 | {{requestName}} parsedReq = ({{requestName}}) MessageTester.test(
19 | "xxxx",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/BasalIQAlertInfoRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.helpers.Bytes;
5 | import com.jwoglom.pumpx2.pump.messages.Message;
6 | import com.jwoglom.pumpx2.pump.messages.MessageType;
7 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
8 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.BasalIQAlertInfoResponse;
9 |
10 | /**
11 | * On a non-BasalIQ pump returns BAD_OPCODE
12 | */
13 | @MessageProps(
14 | opCode=102,
15 | size=0,
16 | type=MessageType.REQUEST,
17 | response=BasalIQAlertInfoResponse.class
18 | )
19 | public class BasalIQAlertInfoRequest extends Message {
20 | public BasalIQAlertInfoRequest() {
21 | this.cargo = EMPTY;
22 | }
23 |
24 | public void parse(byte[] raw) {
25 | Preconditions.checkArgument(raw.length == props().size());
26 | this.cargo = raw;
27 |
28 | }
29 |
30 |
31 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQInfoV1RequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Test;
10 |
11 | public class ControlIQInfoV1RequestTest {
12 | @Test
13 | public void testControlIQInfoRequest() throws DecoderException {
14 | // empty cargo
15 | ControlIQInfoV1Request expected = new ControlIQInfoV1Request();
16 |
17 | ControlIQInfoV1Request parsedReq = (ControlIQInfoV1Request) MessageTester.test(
18 | "000368030005ab",
19 | 3,
20 | 1,
21 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
26 | }
27 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpFeaturesV1RequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Test;
10 |
11 | public class PumpFeaturesV1RequestTest {
12 | @Test
13 | public void testPumpFeaturesRequest() throws DecoderException {
14 | // empty cargo
15 | PumpFeaturesV1Request expected = new PumpFeaturesV1Request();
16 |
17 | PumpFeaturesV1Request parsedReq = (PumpFeaturesV1Request) MessageTester.test(
18 | "00034e0300639f",
19 | 3,
20 | 1,
21 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpFeaturesV2RequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Test;
10 |
11 | public class PumpFeaturesV2RequestTest {
12 | @Test
13 | public void testPumpSupportedFeaturesRequest() throws DecoderException {
14 | // empty cargo
15 | PumpFeaturesV2Request expected = new PumpFeaturesV2Request();
16 |
17 | PumpFeaturesV2Request parsedReq = (PumpFeaturesV2Request) MessageTester.test(
18 | "0003a003005324",
19 | 3,
20 | 1,
21 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
26 | }
27 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/request/historyLog/NonexistentHistoryLogStreamRequest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.historyLog;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.Message;
4 | import com.jwoglom.pumpx2.pump.messages.MessageType;
5 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
6 | import com.jwoglom.pumpx2.pump.messages.response.ErrorResponse;
7 | import com.jwoglom.pumpx2.pump.messages.response.historyLog.HistoryLogStreamResponse;
8 |
9 | /**
10 | * This message is used as a paired request message for HistoryLogStreamResponse,
11 | * which does not have an originating request.
12 | */
13 | @MessageProps(
14 | opCode=-99999998,
15 | size=0,
16 | type=MessageType.REQUEST,
17 | response=HistoryLogStreamResponse.class
18 | )
19 | public class NonexistentHistoryLogStreamRequest extends Message {
20 |
21 | public NonexistentHistoryLogStreamRequest() {
22 | this.cargo = EMPTY;
23 | }
24 |
25 | public void parse(byte[] raw) {
26 | this.cargo = raw;
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/LastBGRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.LastBGRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class LastBGRequestTest {
13 | @Test
14 | public void testLastBGRequest() throws DecoderException {
15 | // empty cargo
16 | LastBGRequest expected = new LastBGRequest();
17 |
18 | LastBGRequest parsedReq = (LastBGRequest) MessageTester.test(
19 | "00033203000a32",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/BasalLimitSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Test;
10 |
11 | public class BasalLimitSettingsRequestTest {
12 | @Test
13 | public void testBasalLimitSettingsRequest() throws DecoderException {
14 | // empty cargo
15 | BasalLimitSettingsRequest expected = new BasalLimitSettingsRequest();
16 |
17 | BasalLimitSettingsRequest parsedReq = (BasalLimitSettingsRequest) MessageTester.test(
18 | "00048a0400c3fc",
19 | 4,
20 | 1,
21 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
26 | }
27 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/TempRateRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.TempRateRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class TempRateRequestTest {
13 | @Test
14 | public void testTempRateRequest() throws DecoderException {
15 | // empty cargo
16 | TempRateRequest expected = new TempRateRequest();
17 |
18 | TempRateRequest parsedReq = (TempRateRequest) MessageTester.test(
19 | "00032a0300c8d8",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CGMStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMStatusRequestTest {
13 | @Test
14 | public void testCGMStatusRequest() throws DecoderException {
15 | // empty cargo
16 | CGMStatusRequest expected = new CGMStatusRequest();
17 |
18 | CGMStatusRequest parsedReq = (CGMStatusRequest) MessageTester.test(
19 | "000350030001c7",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/RemindersRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.RemindersRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class RemindersRequestTest {
13 | @Test
14 | public void testRemindersRequest() throws DecoderException {
15 | // empty cargo
16 | RemindersRequest expected = new RemindersRequest();
17 |
18 | RemindersRequest parsedReq = (RemindersRequest) MessageTester.test(
19 | "0003580300a06e",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/HistoryLogRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.HistoryLogRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class HistoryLogRequestTest {
13 | @Test
14 | public void testHistoryLogRequest10Messages() throws DecoderException {
15 | HistoryLogRequest expected = new HistoryLogRequest(3950, 10);
16 |
17 | HistoryLogRequest parsedReq = (HistoryLogRequest) MessageTester.test(
18 | "00043c04056e0f00000a4247",
19 | 4,
20 | 1,
21 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
26 | }
27 | }
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 James Woglom
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/IDPSegmentRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.IDPSegmentRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class IDPSegmentRequestTest {
13 | @Test
14 | public void testIDPSegmentRequest() throws DecoderException {
15 | // empty cargo
16 | IDPSegmentRequest expected = new IDPSegmentRequest(0, 0);
17 |
18 | IDPSegmentRequest parsedReq = (IDPSegmentRequest) MessageTester.test(
19 | "0004420402000076e0",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpVersionRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.PumpVersionRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class PumpVersionRequestTest {
13 | @Test
14 | public void testPumpVersionRequest() throws DecoderException {
15 | // empty cargo
16 | PumpVersionRequest expected = new PumpVersionRequest();
17 |
18 | PumpVersionRequest parsedReq = (PumpVersionRequest) MessageTester.test(
19 | "0003540300c11b",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/AlarmStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.AlarmStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class AlarmStatusRequestTest {
13 | @Test
14 | public void testAlarmStatusRequest() throws DecoderException {
15 | // empty cargo
16 | AlarmStatusRequest expected = new AlarmStatusRequest();
17 |
18 | AlarmStatusRequest parsedReq = (AlarmStatusRequest) MessageTester.test(
19 | "0003460300c236",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpGlobalsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.PumpGlobalsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class PumpGlobalsRequestTest {
13 | @Test
14 | public void testPumpGlobalsRequest() throws DecoderException {
15 | // empty cargo
16 | PumpGlobalsRequest expected = new PumpGlobalsRequest();
17 |
18 | PumpGlobalsRequest parsedReq = (PumpGlobalsRequest) MessageTester.test(
19 | "0003560300a175",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/PumpSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.PumpSettingsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class PumpSettingsRequestTest {
13 | @Test
14 | public void testPumpSettingsRequest() throws DecoderException {
15 | // empty cargo
16 | PumpSettingsRequest expected = new PumpSettingsRequest();
17 |
18 | PumpSettingsRequest parsedReq = (PumpSettingsRequest) MessageTester.test(
19 | "0004520400f630",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/template.j2:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.{{cat}};
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.{{cat}}.{{responseName}};
8 |
9 | import com.google.common.collect.ImmutableList;
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Test;
12 |
13 | public class {{responseName}}Test {
14 | @Test
15 | public void test{{responseName}}() throws DecoderException {
16 | {{responseName}} expected = new {{responseName}}(
17 | // {% for arg in responseArgs %}{{ arg.type }} {{ arg.name }}{{ ", " if not loop.last else "" }}{% endfor %}
18 | );
19 |
20 | {{responseName}} parsedRes = ({{responseName}}) HistoryLogMessageTester.testSingle(
21 | "xxxx",
22 | expected
23 | );
24 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/BasalIQStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.BasalIQStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class BasalIQStatusRequestTest {
13 | @Test
14 | public void testBasalIQStatusRequest() throws DecoderException {
15 | // empty cargo
16 | BasalIQStatusRequest expected = new BasalIQStatusRequest();
17 |
18 | BasalIQStatusRequest parsedReq = (BasalIQStatusRequest) MessageTester.test(
19 | "000570050061eb",
20 | 5,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQIOBRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ControlIQIOBRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ControlIQIOBRequestTest {
13 | @Test
14 | public void testControlIQIOBRequest() throws DecoderException {
15 | // empty cargo
16 | ControlIQIOBRequest expected = new ControlIQIOBRequest();
17 |
18 | ControlIQIOBRequest parsedReq = (ControlIQIOBRequest) MessageTester.test(
19 | "00046c040052ee",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/InsulinStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.InsulinStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class InsulinStatusRequestTest {
13 | @Test
14 | public void testInsulinStatusRequest() throws DecoderException {
15 | // empty cargo
16 | InsulinStatusRequest expected = new InsulinStatusRequest();
17 |
18 | InsulinStatusRequest parsedReq = (InsulinStatusRequest) MessageTester.test(
19 | "00042404005e5a",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ProfileStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ProfileStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ProfileStatusRequestTest {
13 | @Test
14 | public void testProfileStatusRequest() throws DecoderException {
15 | // empty cargo
16 | ProfileStatusRequest expected = new ProfileStatusRequest();
17 |
18 | ProfileStatusRequest parsedReq = (ProfileStatusRequest) MessageTester.test(
19 | "00033e03006b47",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMAlertStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CGMAlertStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMAlertStatusRequestTest {
13 | @Test
14 | public void testCGMAlertStatusRequest() throws DecoderException {
15 | // empty cargo
16 | CGMAlertStatusRequest expected = new CGMAlertStatusRequest();
17 |
18 | CGMAlertStatusRequest parsedReq = (CGMAlertStatusRequest) MessageTester.test(
19 | "00034a0300a343",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ReminderStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ReminderStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ReminderStatusRequestTest {
13 | @Test
14 | public void testReminderStatusRequest() throws DecoderException {
15 | // empty cargo
16 | ReminderStatusRequest expected = new ReminderStatusRequest();
17 |
18 | ReminderStatusRequest parsedReq = (ReminderStatusRequest) MessageTester.test(
19 | "0003480300c32d",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/TimeSinceResetRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.TimeSinceResetRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class TimeSinceResetRequestTest {
13 | @Test
14 | public void testTimeSinceResetRequest() throws DecoderException {
15 | // empty cargo
16 | TimeSinceResetRequest expected = new TimeSinceResetRequest();
17 |
18 | TimeSinceResetRequest parsedReq = (TimeSinceResetRequest) MessageTester.test(
19 | "0003360300caee",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/res/navigation/nav_graph.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
17 |
18 |
23 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/BasalIQSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.BasalIQSettingsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class BasalIQSettingsRequestTest {
13 | @Test
14 | public void testBasalIQSettingsRequest() throws DecoderException {
15 | // empty cargo
16 | BasalIQSettingsRequest expected = new BasalIQSettingsRequest();
17 |
18 | BasalIQSettingsRequest parsedReq = (BasalIQSettingsRequest) MessageTester.test(
19 | "000462040053f5",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/models/MultiDay.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.models;
2 |
3 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ControlIQSleepScheduleResponse;
4 |
5 | import java.util.HashSet;
6 | import java.util.Set;
7 |
8 | public enum MultiDay {
9 | MONDAY(1),
10 | TUESDAY(2),
11 | WEDNESDAY(4),
12 | THURSDAY(8),
13 | FRIDAY(16),
14 | SATURDAY(32),
15 | SUNDAY(64),
16 | ;
17 |
18 | private final int id;
19 |
20 | MultiDay(int id) {
21 | this.id = id;
22 | }
23 |
24 | public int id() {
25 | return id;
26 | }
27 |
28 | public static Set fromBitmask(int bitmask) {
29 | Set set = new HashSet<>();
30 | for (MultiDay day : values()) {
31 | if (bitmask % day.id() == 0) {
32 | set.add(day);
33 | }
34 | }
35 |
36 | return set;
37 | }
38 |
39 | public static int toBitmask(MultiDay... days) {
40 | int mask = 0;
41 | for (MultiDay day : days) {
42 | mask += day.id();
43 | }
44 |
45 | return mask;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/BasalIQAlertInfoRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.BasalIQAlertInfoRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class BasalIQAlertInfoRequestTest {
13 | @Test
14 | public void testBasalIQAlertInfoRequest() throws DecoderException {
15 | // empty cargo
16 | BasalIQAlertInfoRequest expected = new BasalIQAlertInfoRequest();
17 |
18 | BasalIQAlertInfoRequest parsedReq = (BasalIQAlertInfoRequest) MessageTester.test(
19 | "000366030004b0",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMHardwareInfoRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CGMHardwareInfoRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMHardwareInfoRequestTest {
13 | @Test
14 | public void testCGMHardwareInfoRequest() throws DecoderException {
15 | // empty cargo
16 | CGMHardwareInfoRequest expected = new CGMHardwareInfoRequest();
17 |
18 | CGMHardwareInfoRequest parsedReq = (CGMHardwareInfoRequest) MessageTester.test(
19 | "0004600400339b",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBatteryV1RequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBatteryV1Request;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentBatteryV1RequestTest {
13 | @Test
14 | public void testCurrentBatteryV1Request() throws DecoderException {
15 | // empty cargo
16 | CurrentBatteryV1Request expected = new CurrentBatteryV1Request();
17 |
18 | CurrentBatteryV1Request parsedReq = (CurrentBatteryV1Request) MessageTester.test(
19 | "0003340300aa80",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/HistoryLogStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.HistoryLogStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class HistoryLogStatusRequestTest {
13 | @Test
14 | public void testHistoryLogStatusRequest() throws DecoderException {
15 | // empty cargo
16 | HistoryLogStatusRequest expected = new HistoryLogStatusRequest();
17 |
18 | HistoryLogStatusRequest parsedReq = (HistoryLogStatusRequest) MessageTester.test(
19 | "00033a0300ab9b",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/HomeScreenMirrorRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.HomeScreenMirrorRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class HomeScreenMirrorRequestTest {
13 | @Test
14 | public void testHomeScreenMirrorRequest() throws DecoderException {
15 | // empty cargo
16 | HomeScreenMirrorRequest expected = new HomeScreenMirrorRequest();
17 |
18 | HomeScreenMirrorRequest parsedReq = (HomeScreenMirrorRequest) MessageTester.test(
19 | "0003380300cbf5",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentEGVGuiDataRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentEGVGuiDataRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentEGVGuiDataRequestTest {
13 | @Test
14 | public void testCurrentEGVGuiDataRequest() throws DecoderException {
15 | // empty cargo
16 | CurrentEGVGuiDataRequest expected = new CurrentEGVGuiDataRequest();
17 |
18 | CurrentEGVGuiDataRequest parsedReq = (CurrentEGVGuiDataRequest) MessageTester.test(
19 | "00032203006971",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBasalStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBasalStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentBasalStatusRequestTest {
13 | @Test
14 | public void testCurrentBasalStatusRequest() throws DecoderException {
15 | // empty cargo
16 | CurrentBasalStatusRequest expected = new CurrentBasalStatusRequest();
17 |
18 | CurrentBasalStatusRequest parsedReq = (CurrentBasalStatusRequest) MessageTester.test(
19 | "0003280300a8b6",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBolusStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBolusStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentBolusStatusRequestTest {
13 | @Test
14 | public void testCurrentBolusStatusRequest() throws DecoderException {
15 | // empty cargo
16 | CurrentBolusStatusRequest expected = new CurrentBolusStatusRequest();
17 |
18 | CurrentBolusStatusRequest parsedReq = (CurrentBolusStatusRequest) MessageTester.test(
19 | "00032c0300686a",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/template.j2:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.{{cat}};
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.{{cat}}.{{responseName}};
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class {{responseName}}Test {
13 | @Test
14 | public void test{{responseName}}() throws DecoderException {
15 | {{responseName}} expected = new {{responseName}}(
16 | // {% for arg in responseArgs %}{{ arg.type }} {{ arg.name }}{{ ", " if not loop.last else "" }}{% endfor %}
17 | );
18 |
19 | {{responseName}} parsedRes = ({{responseName}}) MessageTester.test(
20 | "xxxx",
21 | 3,
22 | 1,
23 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
24 | expected
25 | );
26 |
27 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMOORAlertSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CGMOORAlertSettingsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMOORAlertSettingsRequestTest {
13 | @Test
14 | public void testCGMOORAlertSettingsRequest() throws DecoderException {
15 | // empty cargo
16 | CGMOORAlertSettingsRequest expected = new CGMOORAlertSettingsRequest();
17 |
18 | CGMOORAlertSettingsRequest parsedReq = (CGMOORAlertSettingsRequest) MessageTester.test(
19 | "00035e030000dc",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ExtendedBolusStatusRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ExtendedBolusStatusRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ExtendedBolusStatusRequestTest {
13 | @Test
14 | public void testExtendedBolusStatusRequest() throws DecoderException {
15 | // empty cargo
16 | ExtendedBolusStatusRequest expected = new ExtendedBolusStatusRequest();
17 |
18 | ExtendedBolusStatusRequest parsedReq = (ExtendedBolusStatusRequest) MessageTester.test(
19 | "00062e0600fdfb",
20 | 6,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/HistoryLogResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.HistoryLogResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class HistoryLogResponseTest {
13 | @Test
14 | public void testHistoryLogResponse() throws DecoderException {
15 | HistoryLogResponse expected = new HistoryLogResponse(
16 | // int status, int streamId
17 | 0, 1
18 | );
19 |
20 | HistoryLogResponse parsedRes = (HistoryLogResponse) MessageTester.test(
21 | "00033d0302000105d9",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/LastBGResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.LastBGResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class LastBGResponseTest {
13 | @Test
14 | public void testLastBGResponseEmpty() throws DecoderException {
15 | LastBGResponse expected = new LastBGResponse(
16 | // long bgTimestamp, int bgValue, int bgSource
17 | 0L, 0, 0
18 | );
19 |
20 | LastBGResponse parsedRes = (LastBGResponse) MessageTester.test(
21 | "0003330307000000000000003117",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMRateAlertSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CGMRateAlertSettingsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMRateAlertSettingsRequestTest {
13 | @Test
14 | public void testCGMRateAlertSettingsRequest() throws DecoderException {
15 | // empty cargo
16 | CGMRateAlertSettingsRequest expected = new CGMRateAlertSettingsRequest();
17 |
18 | CGMRateAlertSettingsRequest parsedReq = (CGMRateAlertSettingsRequest) MessageTester.test(
19 | "00045c0400f72b",
20 | 4,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/helpers/BytesTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.helpers;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 | import static org.junit.Assert.assertEquals;
5 |
6 | import com.google.common.collect.ImmutableList;
7 |
8 | import org.junit.Test;
9 |
10 | import java.util.Arrays;
11 | import java.util.List;
12 |
13 | public class BytesTest {
14 | @Test
15 | public void testFloats() {
16 | List tests = ImmutableList.of(
17 | 0.0F,
18 | 1.0F,
19 | 1.11F,
20 | 1.123F,
21 | -1.0F,
22 | -1.11F,
23 | -1.123F,
24 | 0.00000001F,
25 | -0.00000001F,
26 | 12345.54321F,
27 | -12345.54321F,
28 | Float.NaN
29 | );
30 |
31 | tests.forEach(f -> {
32 | byte[] bytes = Bytes.toFloat(f);
33 | float read = Bytes.readFloat(bytes, 0);
34 | assertEquals(f, read, 0.00001);
35 | byte[] back = Bytes.toFloat(read);
36 | assertHexEquals(bytes, back);
37 | });
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQInfoV2RequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ControlIQInfoV2Request;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Ignore;
11 | import org.junit.Test;
12 |
13 | public class ControlIQInfoV2RequestTest {
14 | @Test
15 | @Ignore("need test input")
16 | public void testControlIQInfoV2Request() throws DecoderException {
17 | // empty cargo
18 | ControlIQInfoV2Request expected = new ControlIQInfoV2Request();
19 |
20 | ControlIQInfoV2Request parsedReq = (ControlIQInfoV2Request) MessageTester.test(
21 | "xxxx",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/ControlIQSleepScheduleRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ControlIQSleepScheduleRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ControlIQSleepScheduleRequestTest {
13 | @Test
14 | public void testControlIQSleepScheduleRequest() throws DecoderException {
15 | // empty cargo
16 | ControlIQSleepScheduleRequest expected = new ControlIQSleepScheduleRequest();
17 |
18 | ControlIQSleepScheduleRequest parsedReq = (ControlIQSleepScheduleRequest) MessageTester.test(
19 | "00036a030065c5",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/GlobalMaxBolusSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.GlobalMaxBolusSettingsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class GlobalMaxBolusSettingsRequestTest {
13 | @Test
14 | public void testGlobalMaxBolusSettingsRequest() throws DecoderException {
15 | // empty cargo
16 | GlobalMaxBolusSettingsRequest expected = new GlobalMaxBolusSettingsRequest();
17 |
18 | GlobalMaxBolusSettingsRequest parsedReq = (GlobalMaxBolusSettingsRequest) MessageTester.test(
19 | "00038c0300f4d7",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/PumpFeaturesV2ResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Ignore;
10 | import org.junit.Test;
11 |
12 | public class PumpFeaturesV2ResponseTest {
13 | @Test
14 | @Ignore("needs to be run on a V2 pump")
15 | public void testPumpSupportedFeaturesResponse() throws DecoderException {
16 | PumpFeaturesV2Response expected = new PumpFeaturesV2Response(
17 | // int status, int supportedFeaturesIndex, long pumpFeaturesBitmask
18 | );
19 |
20 | PumpFeaturesV2Response parsedRes = (PumpFeaturesV2Response) MessageTester.test(
21 | "xxxx",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CGMGlucoseAlertSettingsRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CGMGlucoseAlertSettingsRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMGlucoseAlertSettingsRequestTest {
13 | @Test
14 | public void testCGMGlucoseAlertSettingsRequest() throws DecoderException {
15 | // empty cargo
16 | CGMGlucoseAlertSettingsRequest expected = new CGMGlucoseAlertSettingsRequest();
17 |
18 | CGMGlucoseAlertSettingsRequest parsedReq = (CGMGlucoseAlertSettingsRequest) MessageTester.test(
19 | "00035a0300c000",
20 | 3,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/ApiVersionResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static org.junit.Assert.assertEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ApiVersionResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ApiVersionResponseTest {
13 | @Test
14 | public void testApiVersionResponse() throws DecoderException {
15 | // Control-IQ pump v7.3.1
16 | ApiVersionResponse expected = new ApiVersionResponse(2, 0);
17 |
18 | ApiVersionResponse parsedRes = (ApiVersionResponse) MessageTester.test(
19 | "00022102040200000077c8",
20 | 2,
21 | 1,
22 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
23 | expected
24 | );
25 |
26 | assertEquals(expected.getMajorVersion(), parsedRes.getMajorVersion());
27 | assertEquals(expected.getMinorVersion(), parsedRes.getMinorVersion());
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/BasalLimitSettingsResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Ignore;
10 | import org.junit.Test;
11 |
12 | public class BasalLimitSettingsResponseTest {
13 | @Test
14 | @Ignore("needs to be run on a V2 pump")
15 | public void testBasalLimitSettingsRequestResponse() throws DecoderException {
16 | BasalLimitSettingsResponse expected = new BasalLimitSettingsResponse(
17 | // long basalLimit, long basalLimitDefault
18 | );
19 |
20 | BasalLimitSettingsResponse parsedRes = (BasalLimitSettingsResponse) MessageTester.test(
21 | "xxxx",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/currentStatus/CurrentBatteryV2RequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBatteryV2Request;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.apache.commons.lang3.NotImplementedException;
11 | import org.junit.Test;
12 |
13 | public class CurrentBatteryV2RequestTest {
14 | @Test
15 | public void testCurrentBatteryV2Request() throws DecoderException {
16 | // empty cargo
17 | CurrentBatteryV2Request expected = new CurrentBatteryV2Request();
18 |
19 | CurrentBatteryV2Request parsedReq = (CurrentBatteryV2Request) MessageTester.test(
20 | "0005900500504b",
21 | 5,
22 | 1,
23 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
24 | expected
25 | );
26 |
27 | assertHexEquals(expected.getCargo(), parsedReq.getCargo());
28 | }
29 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CGMAlertStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMAlertStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMAlertStatusResponseTest {
13 | @Test
14 | public void testCGMAlertStatusResponse() throws DecoderException {
15 | CGMAlertStatusResponse expected = new CGMAlertStatusResponse(
16 | // BigInteger cgmAlertBitmask
17 | 0L
18 | );
19 |
20 | CGMAlertStatusResponse parsedRes = (CGMAlertStatusResponse) MessageTester.test(
21 | "00034b030800000000000000009ed2",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/bluetooth/models/Packet.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.bluetooth.models;
2 |
3 | import kotlin.collections.ArraysKt;
4 |
5 | public class Packet {
6 | private final byte packetsRemaining;
7 | private final byte transactionId;
8 | private final byte[] internalCargo;
9 |
10 | public Packet(byte packetsRemaining, byte transactionId, byte[] internalCargo) {
11 | this.packetsRemaining = packetsRemaining;
12 | this.transactionId = transactionId;
13 | this.internalCargo = internalCargo;
14 | }
15 |
16 | public byte[] build() {
17 | byte[] ret = new byte[internalCargo.length + 2];
18 | ret[0] = (byte)packetsRemaining;
19 | ret[1] = transactionId;
20 | System.arraycopy(internalCargo, 0, ret, 2, internalCargo.length);
21 | return ret;
22 | }
23 |
24 | public byte transactionId() {
25 | return transactionId;
26 | }
27 |
28 | public byte[] internalCargo() {
29 | return internalCargo;
30 | }
31 |
32 | public Packet merge(Packet newPacket) {
33 | return new Packet(newPacket.packetsRemaining, transactionId, ArraysKt.plus(this.internalCargo, newPacket.internalCargo));
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/ReminderStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ReminderStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | import java.math.BigInteger;
13 |
14 | public class ReminderStatusResponseTest {
15 | @Test
16 | public void testReminderStatusResponseEmpty() throws DecoderException {
17 | ReminderStatusResponse expected = new ReminderStatusResponse(
18 | BigInteger.ZERO
19 | );
20 |
21 | ReminderStatusResponse parsedRes = (ReminderStatusResponse) MessageTester.test(
22 | "000349030800000000000000002d72",
23 | 3,
24 | 1,
25 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
26 | expected
27 | );
28 |
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/TempRateResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.TempRateResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class TempRateResponseTest {
13 | @Test
14 | public void testTempRateResponseNotActive() throws DecoderException {
15 | TempRateResponse expected = new TempRateResponse(
16 | // boolean active, int percentage, long startTime, long duration
17 | false, 0, 0, 0
18 | );
19 |
20 | TempRateResponse parsedRes = (TempRateResponse) MessageTester.test(
21 | "00032b030a0000000000000000000039c6",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/builders/PumpChallengeBuilder.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.builders;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.Packetize;
5 | import com.jwoglom.pumpx2.pump.messages.request.authentication.PumpChallengeRequest;
6 |
7 | import java.nio.charset.Charset;
8 |
9 | public class PumpChallengeBuilder {
10 | public static PumpChallengeRequest create(int appInstanceId, String pairingCode, byte[] hmacKey) {
11 | String pairingChars = processPairingCode(pairingCode);
12 | Preconditions.checkArgument(pairingChars.length() == 16);
13 | return new PumpChallengeRequest(
14 | appInstanceId,
15 | Packetize.doHmacSha1(hmacKey, pairingChars.getBytes(Charset.forName("UTF-8"))));
16 | }
17 |
18 | // Remove all dashes and spaces
19 | private static String processPairingCode(String pairingCode) {
20 | String processed = "";
21 | for (Character c : pairingCode.toCharArray()) {
22 | if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
23 | processed += c;
24 | }
25 | }
26 | return processed;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CGMHardwareInfoResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static org.junit.Assert.assertEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMHardwareInfoResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMHardwareInfoResponseTest {
13 | @Test
14 | public void testCGMHardwareInfo() throws DecoderException {
15 | CGMHardwareInfoResponse expected = new CGMHardwareInfoResponse("8RR239", 0);
16 |
17 | CGMHardwareInfoResponse parsedRes = (CGMHardwareInfoResponse) MessageTester.test(
18 | "00036103113852523233390000000000000000000000a2a3",
19 | 3,
20 | 2,
21 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertEquals(expected.getHardwareInfoString(), parsedRes.getHardwareInfoString());
26 | assertEquals(expected.getLastByte(), parsedRes.getLastByte());
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/InsulinStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.InsulinStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class InsulinStatusResponseTest {
13 | @Test
14 | public void testInsulinStatusResponse() throws DecoderException {
15 | InsulinStatusResponse expected = new InsulinStatusResponse(
16 | // int currentInsulinAmount, int isEstimate, int insulinLowAmount
17 | 0, 0, 35
18 | );
19 |
20 | InsulinStatusResponse parsedRes = (InsulinStatusResponse) MessageTester.test(
21 | "000425040400000023397d",
22 | 4,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
17 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/BasalIQAlertInfoResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.BasalIQAlertInfoResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Ignore;
11 | import org.junit.Test;
12 |
13 | public class BasalIQAlertInfoResponseTest {
14 | @Test
15 | @Ignore("needs to be run on a BasalIQ pump")
16 | public void testBasalIQAlertInfoResponse() throws DecoderException {
17 | BasalIQAlertInfoResponse expected = new BasalIQAlertInfoResponse(
18 | // long alertId
19 | );
20 |
21 | BasalIQAlertInfoResponse parsedRes = (BasalIQAlertInfoResponse) MessageTester.test(
22 | "xxxx",
23 | 3,
24 | 1,
25 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
26 | expected
27 | );
28 |
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/BolexCompletedHistoryLogTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.historyLog;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.historyLog.BolexCompletedHistoryLog;
8 |
9 | import com.google.common.collect.ImmutableList;
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Ignore;
12 | import org.junit.Test;
13 |
14 | public class BolexCompletedHistoryLogTest {
15 | @Test
16 | @Ignore("no samples to test")
17 | public void testBolexCompletedHistoryLog() throws DecoderException {
18 | BolexCompletedHistoryLog expected = new BolexCompletedHistoryLog(
19 | // int completionStatus, int bolusId, float iob, float insulinDelivered, float insulinRequested
20 | );
21 |
22 | BolexCompletedHistoryLog parsedRes = (BolexCompletedHistoryLog) HistoryLogMessageTester.testSingle(
23 | "xxxx",
24 | expected
25 | );
26 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/BasalIQStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.BasalIQStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Ignore;
11 | import org.junit.Test;
12 |
13 | public class BasalIQStatusResponseTest {
14 | @Test
15 | @Ignore("needs to be run on a BasalIQ pump")
16 | public void testBasalIQStatusResponse() throws DecoderException {
17 | BasalIQStatusResponse expected = new BasalIQStatusResponse(
18 | // int basalIQStatusState, boolean deliveringTherapy
19 | );
20 |
21 | BasalIQStatusResponse parsedRes = (BasalIQStatusResponse) MessageTester.test(
22 | "xxxx",
23 | 3,
24 | 1,
25 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
26 | expected
27 | );
28 |
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
17 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CGMStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMStatusResponseTest {
13 | @Test
14 | public void testCGMStatusResponse() throws DecoderException {
15 | CGMStatusResponse expected = new CGMStatusResponse(
16 | // int sessionState, long lastCalibrationTimestamp, long sensorStartedTimestamp, int transmitterBatteryStatus
17 | 0, 0L, 0L, 0
18 | );
19 |
20 | CGMStatusResponse parsedRes = (CGMStatusResponse) MessageTester.test(
21 | "000351030a00000000000000000000a926",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/BGHistoryLogTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.historyLog;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.historyLog.BGHistoryLog;
8 |
9 | import com.google.common.collect.ImmutableList;
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Ignore;
12 | import org.junit.Test;
13 |
14 | public class BGHistoryLogTest {
15 | @Test
16 | public void testBGHistoryLog() throws DecoderException {
17 | BGHistoryLog expected = new BGHistoryLog(
18 | // int bg, int cgmCalibration, int bgSource, float iob, int targetBG, int isf, long spare
19 | new byte[]{8,90,-106,26,-19,-52,2,0},
20 | 162, 0, 1, 10.91F, 110, 30, 1
21 | );
22 |
23 | BGHistoryLog parsedRes = (BGHistoryLog) HistoryLogMessageTester.testSingle(
24 | "1000085a961aedcc0200a20000015c8f2e416e001e0001000000",
25 | expected
26 | );
27 |
28 | //assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/OpCodeFinderTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages;
2 |
3 | import static org.junit.Assert.assertEquals;
4 |
5 | import org.apache.commons.codec.DecoderException;
6 | import org.apache.commons.codec.binary.Hex;
7 | import org.junit.Test;
8 |
9 | public class OpCodeFinderTest {
10 | @Test
11 | public void testOpCodeFinder() throws DecoderException {
12 | // 16: CentralChallengeRequest
13 | assertEquals(16, findOpCode("000010000a00004d08435da26947356d6f"));
14 | // 17: CentralChallengeResponse
15 | assertEquals(17, findOpCode("000011001e01008c212d7a8fbda85f83a3440254488dfb561264ec840c4e16873046bc2c1a"));
16 | // 18: PumpChallengeRequest
17 | assertEquals(18, findOpCode("010112011601000194a8f98ca49cddf70c2c1331"));
18 | // 19: PumpChallengeResponse
19 | assertEquals(19, findOpCode("0001130103010001e8cc"));
20 | // 32: ApiVersionRequest
21 | assertEquals(32, findOpCode("0002200200382c"));
22 | // 33: ApiVersionResponse
23 | assertEquals(33, findOpCode("00022102040200000077c8"));
24 | }
25 |
26 | public int findOpCode(String hex) throws DecoderException {
27 | byte[] raw = Hex.decodeHex(hex);
28 |
29 | return (int) raw[2];
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/BasalIQSettingsResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.BasalIQSettingsResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Ignore;
11 | import org.junit.Test;
12 |
13 | public class BasalIQSettingsResponseTest {
14 | @Test
15 | @Ignore("needs to be run on a BasalIQ pump")
16 | public void testBasalIQSettingsResponse() throws DecoderException {
17 | BasalIQSettingsResponse expected = new BasalIQSettingsResponse(
18 | // int hypoMinimization, int suspendAlert, int resumeAlert
19 | );
20 |
21 | BasalIQSettingsResponse parsedRes = (BasalIQSettingsResponse) MessageTester.test(
22 | "xxxx",
23 | 3,
24 | 1,
25 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
26 | expected
27 | );
28 |
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/HistoryLogStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.HistoryLogStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class HistoryLogStatusResponseTest {
13 | @Test
14 | public void testHistoryLogStatusResponse() throws DecoderException {
15 | HistoryLogStatusResponse expected = new HistoryLogStatusResponse(
16 | // long numEntries, long firstSequenceNum, long lastSequenceNum
17 | 2756, 0, 2755
18 | );
19 |
20 | HistoryLogStatusResponse parsedRes = (HistoryLogStatusResponse) MessageTester.test(
21 | "00033b030cc40a000000000000c30a0000d84d",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CurrentBasalStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentBasalStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentBasalStatusResponseTest {
13 | @Test
14 | public void testCurrentBasalStatusResponse() throws DecoderException {
15 | CurrentBasalStatusResponse expected = new CurrentBasalStatusResponse(
16 | // long profileBasalRate, long currentBasalRate, int basalModifiedBitmask
17 | 800L, 0L, 1
18 | );
19 |
20 | CurrentBasalStatusResponse parsedRes = (CurrentBasalStatusResponse) MessageTester.test(
21 | "0003290309200300000000000001d8d0",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Enables namespacing of each library's R class so that its R class includes only the
19 | # resources declared in the library itself and none from the library's dependencies,
20 | # thereby reducing the size of the R class for that library
21 | android.nonTransitiveRClass=true
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/GlobalMaxBolusSettingsResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.GlobalMaxBolusSettingsResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Ignore;
11 | import org.junit.Test;
12 |
13 | public class GlobalMaxBolusSettingsResponseTest {
14 | @Test
15 | @Ignore("needs to be run on a V2 pump")
16 | public void testGlobalMaxBolusSettingsResponse() throws DecoderException {
17 | GlobalMaxBolusSettingsResponse expected = new GlobalMaxBolusSettingsResponse(
18 | // int maxBolus, int maxBolusDefault
19 | );
20 |
21 | GlobalMaxBolusSettingsResponse parsedRes = (GlobalMaxBolusSettingsResponse) MessageTester.test(
22 | "xxxx",
23 | 3,
24 | 1,
25 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
26 | expected
27 | );
28 |
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CGMOORAlertSettingsResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CGMOORAlertSettingsResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CGMOORAlertSettingsResponseTest {
13 | @Test
14 | public void testCGMOORAlertSettingsResponse() throws DecoderException {
15 | CGMOORAlertSettingsResponse expected = new CGMOORAlertSettingsResponse(
16 | // int sensorTimeoutAlertEnabled, int sensorTimeoutAlertThreshold, int sensorTimeoutDefaultBitmask
17 | 20, 1, 5
18 | );
19 |
20 | CGMOORAlertSettingsResponse parsedRes = (CGMOORAlertSettingsResponse) MessageTester.test(
21 | "00035f0303140105be32",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/BolusCompletedHistoryLogTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.historyLog;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.historyLog.BolusCompletedHistoryLog;
8 |
9 | import com.google.common.collect.ImmutableList;
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Ignore;
12 | import org.junit.Test;
13 |
14 | public class BolusCompletedHistoryLogTest {
15 | @Test
16 | public void testBolusCompletedHistoryLog() throws DecoderException {
17 | BolusCompletedHistoryLog expected = new BolusCompletedHistoryLog(
18 | // int completionStatus, int bolusId, float iob, float insulinDelivered, float insulinRequested
19 | 3, 1057, 3.652852F, 1.7869551F, 1.7869551F
20 | );
21 |
22 | BolusCompletedHistoryLog parsedRes = (BolusCompletedHistoryLog) HistoryLogMessageTester.testSingle(
23 | "14009ed7971a70d802000300210454c86940f2bae43ff2bae43f",
24 | expected
25 | );
26 | //assertHexEquals(expected.getCargo(), parsedRes.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/DateChangeHistoryLogTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.historyLog;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.historyLog.DateChangeHistoryLog;
8 |
9 | import com.google.common.collect.ImmutableList;
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Ignore;
12 | import org.junit.Test;
13 |
14 | public class DateChangeHistoryLogTest {
15 | @Test
16 | @Ignore("needs hex input")
17 | public void testDateChangeHistoryLog() throws DecoderException {
18 | DateChangeHistoryLog expected = new DateChangeHistoryLog(
19 | // long datePrior, long dateAfter, long rawRTCTime
20 | );
21 |
22 | HistoryLogStreamResponse parsedMessage = HistoryLogMessageTester.test(
23 | "xxxx",
24 | 0,
25 | ImmutableList.of(expected)
26 | );
27 |
28 | DateChangeHistoryLog parsedRes = (DateChangeHistoryLog) parsedMessage.getHistoryLogs().stream().findFirst().get();
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/ProfileStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ProfileStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ProfileStatusResponseTest {
13 | @Test
14 | public void testProfileStatusResponse() throws DecoderException {
15 | ProfileStatusResponse expected = new ProfileStatusResponse(
16 | // int numberOfProfiles, int idpSlot0Id, int idpSlot1Id, int idpSlot2Id, int idpSlot3Id, int idpSlot4Id, int idpSlot5Id, int activeSegmentIndex
17 | 1, 0, -1, -1, -1, -1, -1, 3
18 | );
19 |
20 | ProfileStatusResponse parsedRes = (ProfileStatusResponse) MessageTester.test(
21 | "00033f03080100ffffffffff03d4c6",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/historyLog/BolusRequestedMsg3HistoryLogTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.historyLog;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.historyLog.BolusRequestedMsg3HistoryLog;
8 |
9 | import com.google.common.collect.ImmutableList;
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Ignore;
12 | import org.junit.Test;
13 |
14 | public class BolusRequestedMsg3HistoryLogTest {
15 | @Test
16 | public void testBolusRequestedMsg3HistoryLog() throws DecoderException {
17 | BolusRequestedMsg3HistoryLog expected = new BolusRequestedMsg3HistoryLog(
18 | // int bolusId, int spare, float foodBolusSize, float correctionBolusSize, float totalBolusSize
19 | 1032, 0, 3.33F, 0.0F, 3.33F
20 | );
21 |
22 | BolusRequestedMsg3HistoryLog parsedRes = (BolusRequestedMsg3HistoryLog) HistoryLogMessageTester.testSingle(
23 | "4200214e951a8ac5020008040000b81e554000000000b81e5540",
24 | expected
25 | );
26 | //assertHexEquals(expected.getCargo(), parsedRes.getCargo());
27 | }
28 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CurrentBolusStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentBolusStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentBolusStatusResponseTest {
13 | @Test
14 | public void testCurrentBolusStatusResponseEmpty() throws DecoderException {
15 | CurrentBolusStatusResponse expected = new CurrentBolusStatusResponse(
16 | // int status, int bolusId, long timestamp, long requestedVolume, int bolusSource, int bolusTypeBitmask
17 | 0, 0, 0L, 0, 0, 0
18 | );
19 |
20 | CurrentBolusStatusResponse parsedRes = (CurrentBolusStatusResponse) MessageTester.test(
21 | "00032d030f000000000000000000000000000000b109",
22 | 3,
23 | 2,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CurrentEGVGuiDataResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.CurrentEGVGuiDataResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CurrentEGVGuiDataResponseTest {
13 | @Test
14 | public void testCurrentEGVGuiDataResponseNoCGM() throws DecoderException {
15 | CurrentEGVGuiDataResponse expected = new CurrentEGVGuiDataResponse(
16 | // long bgReadingTimestampSeconds, int cgmReading, int egvStatus, int trendRate
17 | 0L, 0, CurrentEGVGuiDataResponse.EGVStatus.UNAVAILABLE.id(), 0
18 | );
19 |
20 | CurrentEGVGuiDataResponse parsedRes = (CurrentEGVGuiDataResponse) MessageTester.test(
21 | "000323030800000000000004007b52",
22 | 3,
23 | 1,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/ExtendedBolusStatusResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ExtendedBolusStatusResponse;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class ExtendedBolusStatusResponseTest {
13 | @Test
14 | public void testExtendedBolusStatusResponseEmpty() throws DecoderException {
15 | ExtendedBolusStatusResponse expected = new ExtendedBolusStatusResponse(
16 | // int bolusStatus, int bolusId, long timestamp, long requestedVolume, long duration, int bolusSource
17 | 0, 0, 0, 0, 0, 0
18 | );
19 |
20 | ExtendedBolusStatusResponse parsedRes = (ExtendedBolusStatusResponse) MessageTester.test(
21 | "00062f06120000000000000000000000000000000000007cdd",
22 | 6,
23 | 2,
24 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
25 | expected
26 | );
27 |
28 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
29 | }
30 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/request/authentication/CentralChallengeRequestTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.request.authentication;
2 |
3 | import static org.junit.Assert.assertEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 | import com.jwoglom.pumpx2.pump.messages.request.authentication.CentralChallengeRequest;
8 |
9 | import org.apache.commons.codec.DecoderException;
10 | import org.junit.Test;
11 |
12 | public class CentralChallengeRequestTest {
13 | @Test
14 | public void testTconnectAppFirstRequest() throws DecoderException {
15 | CentralChallengeRequest expected = new CentralChallengeRequest(0, new byte[]{77, 8, 67, 93, -94, 105, 71, 53});
16 |
17 | CentralChallengeRequest parsedReq = (CentralChallengeRequest) MessageTester.test(
18 | "000010000a00004d08435da26947356d6f",
19 | 0,
20 | 1,
21 | CharacteristicUUID.AUTHORIZATION_CHARACTERISTICS,
22 | expected
23 | );
24 |
25 | assertEquals(expected.getAppInstanceId(), parsedReq.getAppInstanceId());
26 | MessageTester.assertHexEquals(expected.getCentralChallenge(), parsedReq.getCentralChallenge());
27 | MessageTester.assertHexEquals(expected.getCargo(), parsedReq.getCargo());
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/PumpVersionResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 |
5 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
6 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
7 |
8 | import org.apache.commons.codec.DecoderException;
9 | import org.junit.Test;
10 |
11 | public class PumpVersionResponseTest {
12 | @Test
13 | public void testPumpVersionResponse() throws DecoderException {
14 | PumpVersionResponse expected = new PumpVersionResponse(
15 | // long armSwVer, long mspSwVer, long configABits, long configBBits, long serialNum, long partNum, String pumpRev, long pcbaSN, String pcbaRev, long modelNum
16 | 105900L, 105900L, 0L, 0L, 90556643L, 1005279L, "0", 1088111696L, "A", 1000354L
17 | );
18 |
19 | PumpVersionResponse parsedRes = (PumpVersionResponse) MessageTester.test(
20 | "0003550330ac9d0100ac9d01000000000000000000e3c86505df560f0030000000000000005044db404100000000000000a2430f008722",
21 | 3,
22 | 3,
23 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
24 | expected
25 | );
26 |
27 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
28 | }
29 | }
--------------------------------------------------------------------------------
/lib/src/test/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/PumpSettingsResponseTest.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.MessageTester.assertHexEquals;
4 | import static org.junit.Assert.assertEquals;
5 |
6 | import com.jwoglom.pumpx2.pump.messages.MessageTester;
7 | import com.jwoglom.pumpx2.pump.bluetooth.CharacteristicUUID;
8 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.PumpSettingsResponse;
9 |
10 | import org.apache.commons.codec.DecoderException;
11 | import org.junit.Test;
12 |
13 | public class PumpSettingsResponseTest {
14 | @Test
15 | public void testPumpSettingsResponse() throws DecoderException {
16 | PumpSettingsResponse expected = new PumpSettingsResponse(
17 | // int lowInsulinThreshold, int cannulaPrimeSize, int autoShutdownEnabled, int autoShutdownDuration, int featureLock, int oledTimeout, int status
18 | 35, 30, 1, 18, 0, 120, 93
19 | );
20 |
21 | PumpSettingsResponse parsedRes = (PumpSettingsResponse) MessageTester.test(
22 | "0003530309231e01120000785d00703f",
23 | 3,
24 | 1,
25 | CharacteristicUUID.CURRENT_STATUS_CHARACTERISTICS,
26 | expected
27 | );
28 |
29 | assertHexEquals(expected.getCargo(), parsedRes.getCargo());
30 | }
31 | }
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/builders/CurrentBatteryBuilder.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.builders;
2 |
3 | import static com.jwoglom.pumpx2.pump.messages.response.currentStatus.ApiVersionResponse.ApiVersion.V2_API;
4 |
5 | import android.content.Context;
6 |
7 | import com.jwoglom.pumpx2.pump.PumpState;
8 | import com.jwoglom.pumpx2.pump.messages.Message;
9 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBatteryV1Request;
10 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBatteryV2Request;
11 | import com.jwoglom.pumpx2.pump.messages.response.currentStatus.ApiVersionResponse.ApiVersion;
12 |
13 | /**
14 | * On a
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CGMHardwareInfoResponse.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.helpers.Bytes;
5 | import com.jwoglom.pumpx2.pump.messages.Message;
6 | import com.jwoglom.pumpx2.pump.messages.MessageType;
7 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
8 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.ApiVersionRequest;
9 |
10 | /**
11 | * Returns the CGM transmitter ID.
12 | */
13 | @MessageProps(
14 | opCode=97,
15 | size=17,
16 | type=MessageType.RESPONSE,
17 | request=ApiVersionRequest.class
18 | )
19 | public class CGMHardwareInfoResponse extends Message {
20 | private String hardwareInfoString;
21 | private int lastByte;
22 |
23 | public CGMHardwareInfoResponse() {}
24 |
25 | public CGMHardwareInfoResponse(String hardwareInfoString, int lastByte) {
26 | this.cargo = buildCargo(hardwareInfoString, lastByte);
27 | this.hardwareInfoString = hardwareInfoString;
28 | this.lastByte = lastByte;
29 | }
30 |
31 | private static byte[] buildCargo(String hardwareInfoString, int lastByte) {
32 | return Bytes.combine(
33 | Bytes.writeString(hardwareInfoString, 16),
34 | new byte[]{(byte) lastByte});
35 | }
36 |
37 | public void parse(byte[] raw) {
38 | Preconditions.checkArgument(raw.length == props().size());
39 | hardwareInfoString = Bytes.readString(raw, 0, 16);
40 | lastByte = raw[16];
41 | cargo = raw;
42 | }
43 |
44 | public String getHardwareInfoString() {
45 | return hardwareInfoString;
46 | }
47 |
48 | public int getLastByte() {
49 | return lastByte;
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/jwoglom/pumpx2/pump/messages/response/currentStatus/CurrentBatteryV1Response.java:
--------------------------------------------------------------------------------
1 | package com.jwoglom.pumpx2.pump.messages.response.currentStatus;
2 |
3 | import com.google.common.base.Preconditions;
4 | import com.jwoglom.pumpx2.pump.messages.helpers.Bytes;
5 | import com.jwoglom.pumpx2.pump.messages.MessageType;
6 | import com.jwoglom.pumpx2.pump.messages.annotations.MessageProps;
7 | import com.jwoglom.pumpx2.pump.messages.request.currentStatus.CurrentBatteryV1Request;
8 |
9 | @MessageProps(
10 | opCode=53,
11 | size=2,
12 | type=MessageType.RESPONSE,
13 | request=CurrentBatteryV1Request.class
14 | )
15 | public class CurrentBatteryV1Response extends CurrentBatteryAbstractResponse {
16 |
17 | private int currentBatteryAbc;
18 | private int currentBatteryIbc;
19 |
20 | public CurrentBatteryV1Response() {}
21 |
22 | public CurrentBatteryV1Response(int currentBatteryAbc, int currentBatteryIbc) {
23 | this.cargo = buildCargo(currentBatteryAbc, currentBatteryIbc);
24 | this.currentBatteryAbc = currentBatteryAbc;
25 | this.currentBatteryIbc = currentBatteryIbc;
26 |
27 | }
28 |
29 | public void parse(byte[] raw) {
30 | Preconditions.checkArgument(raw.length == props().size());
31 | this.cargo = raw;
32 | this.currentBatteryAbc = raw[0];
33 | this.currentBatteryIbc = raw[1];
34 |
35 | }
36 |
37 |
38 | public static byte[] buildCargo(int currentBatteryAbc, int currentBatteryIbc) {
39 | return Bytes.combine(
40 | new byte[]{ (byte) currentBatteryAbc },
41 | new byte[]{ (byte) currentBatteryIbc });
42 | }
43 |
44 | public int getCurrentBatteryAbc() {
45 | return currentBatteryAbc;
46 | }
47 | public int getCurrentBatteryIbc() {
48 | return currentBatteryIbc;
49 | }
50 |
51 | }
--------------------------------------------------------------------------------