Skip to content
Snippets Groups Projects
Commit 1e1419e4 authored by Volker Richert's avatar Volker Richert
Browse files

align restart of polling with last known event. It'll try to align with the...

align restart of polling with last known event. It'll try to align with the last poll up to 2h (hardcoded). After that we assume that there is may be a sensor initialisation and restart polling immediately
parent cb9fe03b
No related branches found
No related tags found
No related merge requests found
...@@ -109,18 +109,31 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc ...@@ -109,18 +109,31 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
private StatusMessageReceiver statusMessageReceiver = new StatusMessageReceiver(); private StatusMessageReceiver statusMessageReceiver = new StatusMessageReceiver();
private MedtronicCnlAlarmReceiver medtronicCnlAlarmReceiver = new MedtronicCnlAlarmReceiver(); private MedtronicCnlAlarmReceiver medtronicCnlAlarmReceiver = new MedtronicCnlAlarmReceiver();
/**
* calculate the next poll timestamp based on last svg event
*
* @param pumpStatusData
* @return timestamp
*/
public static long getNextPoll(PumpStatusEvent pumpStatusData) { public static long getNextPoll(PumpStatusEvent pumpStatusData) {
long nextPoll = pumpStatusData.getEventDate().getTime() + pumpStatusData.getPumpTimeOffset() long nextPoll = pumpStatusData.getEventDate().getTime() + pumpStatusData.getPumpTimeOffset(),
+ MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS; now = System.currentTimeMillis();
if (pumpStatusData.getBatteryPercentage() > 25) { // align to next poll slot
// poll every 5 min if (nextPoll + 2 * 60 * 60 * 1000 < now) { // last event more than 2h old -> could be a calibration
nextPoll += MainActivity.pollInterval; nextPoll = System.currentTimeMillis() + 1000;
} else { } else {
// if pump battery seems to be empty reduce polling to save battery (every 15 min) // align to poll interval
//TODO add message & document it nextPoll += (((now - nextPoll) / MainActivity.pollInterval)) * MainActivity.pollInterval
nextPoll += MainActivity.lowBatteryPollInterval; + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS;
if (pumpStatusData.getBatteryPercentage() > 25) {
// poll every 5 min
nextPoll += MainActivity.pollInterval;
} else {
// if pump battery seems to be empty reduce polling to save battery (every 15 min)
//TODO add message & document it
nextPoll += MainActivity.lowBatteryPollInterval;
}
} }
return nextPoll; return nextPoll;
...@@ -411,7 +424,18 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc ...@@ -411,7 +424,18 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
} }
private void startCgmService() { private void startCgmService() {
startCgmService(System.currentTimeMillis() + 1000); startCgmServiceDelayed(0);
}
private void startCgmServiceDelayed(long delay) {
RealmResults<PumpStatusEvent> results = mRealm.where(PumpStatusEvent.class)
.findAllSorted("eventDate", Sort.DESCENDING);
if (results.size() > 0) {
startCgmService(getNextPoll(results.first()) + delay);
} else {
startCgmService(System.currentTimeMillis() + (delay==0?1000:delay));
}
} }
private void startCgmService(long initialPoll) { private void startCgmService(long initialPoll) {
...@@ -912,7 +936,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc ...@@ -912,7 +936,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
if (hasUsbPermission()) { if (hasUsbPermission()) {
// Give the USB a little time to warm up first // Give the USB a little time to warm up first
startCgmService(System.currentTimeMillis() + MedtronicCnlIntentService.USB_WARMUP_TIME_MS); startCgmServiceDelayed(MedtronicCnlIntentService.USB_WARMUP_TIME_MS);
} else { } else {
Log.d(TAG, "No permission for USB. Waiting."); Log.d(TAG, "No permission for USB. Waiting.");
waitForUsbPermission(); waitForUsbPermission();
......
...@@ -21,15 +21,14 @@ import java.util.Date; ...@@ -21,15 +21,14 @@ import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import info.nightscout.android.BuildConfig;
import info.nightscout.android.R; import info.nightscout.android.R;
import info.nightscout.android.USB.UsbHidDriver; import info.nightscout.android.USB.UsbHidDriver;
import info.nightscout.android.medtronic.MainActivity; import info.nightscout.android.medtronic.MainActivity;
import info.nightscout.android.medtronic.MedtronicCnlReader; import info.nightscout.android.medtronic.MedtronicCnlReader;
import info.nightscout.android.medtronic.exception.ChecksumException; import info.nightscout.android.medtronic.exception.ChecksumException;
import info.nightscout.android.medtronic.exception.EncryptionException; import info.nightscout.android.medtronic.exception.EncryptionException;
import info.nightscout.android.medtronic.message.MessageUtils;
import info.nightscout.android.medtronic.exception.UnexpectedMessageException; import info.nightscout.android.medtronic.exception.UnexpectedMessageException;
import info.nightscout.android.medtronic.message.MessageUtils;
import info.nightscout.android.model.medtronicNg.ContourNextLinkInfo; import info.nightscout.android.model.medtronicNg.ContourNextLinkInfo;
import info.nightscout.android.model.medtronicNg.PumpInfo; import info.nightscout.android.model.medtronicNg.PumpInfo;
import info.nightscout.android.model.medtronicNg.PumpStatusEvent; import info.nightscout.android.model.medtronicNg.PumpStatusEvent;
...@@ -38,8 +37,6 @@ import info.nightscout.android.xdrip_plus.XDripPlusUploadReceiver; ...@@ -38,8 +37,6 @@ import info.nightscout.android.xdrip_plus.XDripPlusUploadReceiver;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmResults; import io.realm.RealmResults;
import static info.nightscout.android.medtronic.MainActivity.setActivePumpMac;
public class MedtronicCnlIntentService extends IntentService { public class MedtronicCnlIntentService extends IntentService {
public final static int USB_VID = 0x1a79; public final static int USB_VID = 0x1a79;
public final static int USB_PID = 0x6210; public final static int USB_PID = 0x6210;
...@@ -155,12 +152,7 @@ public class MedtronicCnlIntentService extends IntentService { ...@@ -155,12 +152,7 @@ public class MedtronicCnlIntentService extends IntentService {
.findFirst(); .findFirst();
if (info == null) { if (info == null) {
// TODO - use realm.createObject()?
info = realm.createObject(ContourNextLinkInfo.class, cnlReader.getStickSerial()); info = realm.createObject(ContourNextLinkInfo.class, cnlReader.getStickSerial());
//info = new ContourNextLinkInfo();
///info.setSerialNumber(cnlReader.getStickSerial());
//info = realm.copyToRealm(info);
} }
cnlReader.getPumpSession().setStickSerial(info.getSerialNumber()); cnlReader.getPumpSession().setStickSerial(info.getSerialNumber());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment