more progress logging on RS

This commit is contained in:
Milos Kozak 2017-09-23 12:28:11 +02:00
parent 4ed2896f76
commit 8cd8c6b5d9
2 changed files with 46 additions and 8 deletions

View file

@ -12,6 +12,8 @@ import android.bluetooth.BluetoothProfile;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Binder; import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.SystemClock; import android.os.SystemClock;
@ -47,6 +49,7 @@ import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes;
import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus;
import info.nightscout.androidaps.plugins.PumpDanaRS.DanaRSPlugin; import info.nightscout.androidaps.plugins.PumpDanaRS.DanaRSPlugin;
import info.nightscout.androidaps.plugins.PumpDanaRS.activities.PairingHelperActivity; import info.nightscout.androidaps.plugins.PumpDanaRS.activities.PairingHelperActivity;
import info.nightscout.androidaps.plugins.PumpDanaRS.activities.PairingProgressDialog;
import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRSMessageHashTable; import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRSMessageHashTable;
import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRS_Packet; import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRS_Packet;
import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRS_Packet_Basal_Get_Basal_Rate; import info.nightscout.androidaps.plugins.PumpDanaRS.comm.DanaRS_Packet_Basal_Get_Basal_Rate;
@ -120,12 +123,25 @@ public class DanaRSService extends Service {
private Object mConfirmConnect = null; private Object mConfirmConnect = null;
private static final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor(); private final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
private static ScheduledFuture<?> scheduledDisconnection = null; private ScheduledFuture<?> scheduledDisconnection = null;
private DanaRS_Packet processsedMessage = null; private DanaRS_Packet processsedMessage = null;
private ArrayList<byte[]> mSendQueue = new ArrayList<>(); private ArrayList<byte[]> mSendQueue = new ArrayList<>();
// Variables pro connection progress (elapsed time)
private Handler sHandler;
private HandlerThread sHandlerThread;
private long connectionStartTime = 0;
private final Runnable updateProgress = new Runnable() {
@Override
public void run() {
long secondsElapsed = (System.currentTimeMillis() - connectionStartTime) / 1000;
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.CONNECTING, (int) secondsElapsed));
sHandler.postDelayed(updateProgress, 1000);
}
};
private long lastHistoryFetched = 0; private long lastHistoryFetched = 0;
public DanaRSService() { public DanaRSService() {
@ -139,6 +155,12 @@ public class DanaRSService extends Service {
PowerManager powerManager = (PowerManager) MainApp.instance().getApplicationContext().getSystemService(Context.POWER_SERVICE); PowerManager powerManager = (PowerManager) MainApp.instance().getApplicationContext().getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, DanaRSService.class.getSimpleName()); mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, DanaRSService.class.getSimpleName());
if (sHandlerThread == null) {
sHandlerThread = new HandlerThread(PairingProgressDialog.class.getSimpleName());
sHandlerThread.start();
sHandler = new Handler(sHandlerThread.getLooper());
}
} }
private boolean getPumpStatus() { private boolean getPumpStatus() {
@ -146,12 +168,16 @@ public class DanaRSService extends Service {
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingpumpstatus))); MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingpumpstatus)));
sendMessage(new DanaRS_Packet_General_Initial_Screen_Information()); sendMessage(new DanaRS_Packet_General_Initial_Screen_Information());
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingextendedbolusstatus)));
sendMessage(new DanaRS_Packet_Bolus_Get_Extended_Bolus_State()); sendMessage(new DanaRS_Packet_Bolus_Get_Extended_Bolus_State());
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingbolusstatus)));
sendMessage(new DanaRS_Packet_Bolus_Get_Step_Bolus_Information()); // last bolus sendMessage(new DanaRS_Packet_Bolus_Get_Step_Bolus_Information()); // last bolus
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingtempbasalstatus)));
sendMessage(new DanaRS_Packet_Basal_Get_Temporary_Basal_State()); sendMessage(new DanaRS_Packet_Basal_Get_Temporary_Basal_State());
Date now = new Date(); Date now = new Date();
if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !MainApp.getSpecificPlugin(DanaRSPlugin.class).isInitialized()) { if (danaRPump.lastSettingsRead.getTime() + 60 * 60 * 1000L < now.getTime() || !MainApp.getSpecificPlugin(DanaRSPlugin.class).isInitialized()) {
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingpumpsettings)));
sendMessage(new DanaRS_Packet_General_Get_Shipping_Information()); // serial no sendMessage(new DanaRS_Packet_General_Get_Shipping_Information()); // serial no
sendMessage(new DanaRS_Packet_General_Get_Pump_Check()); // firmware sendMessage(new DanaRS_Packet_General_Get_Pump_Check()); // firmware
sendMessage(new DanaRS_Packet_Basal_Get_Profile_Number()); sendMessage(new DanaRS_Packet_Basal_Get_Profile_Number());
@ -160,6 +186,7 @@ public class DanaRSService extends Service {
sendMessage(new DanaRS_Packet_Basal_Get_Basal_Rate()); // basal profile, basalStep, maxBasal sendMessage(new DanaRS_Packet_Basal_Get_Basal_Rate()); // basal profile, basalStep, maxBasal
sendMessage(new DanaRS_Packet_Bolus_Get_Calculation_Information()); // target sendMessage(new DanaRS_Packet_Bolus_Get_Calculation_Information()); // target
sendMessage(new DanaRS_Packet_Bolus_Get_CIR_CF_Array()); sendMessage(new DanaRS_Packet_Bolus_Get_CIR_CF_Array());
MainApp.bus().post(new EventPumpStatusChanged(MainApp.sResources.getString(R.string.gettingpumptime)));
sendMessage(new DanaRS_Packet_Option_Get_Pump_Time()); sendMessage(new DanaRS_Packet_Option_Get_Pump_Time());
long timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L; long timeDiff = (danaRPump.pumpTime.getTime() - System.currentTimeMillis()) / 1000L;
log.debug("Pump time difference: " + timeDiff + " seconds"); log.debug("Pump time difference: " + timeDiff + " seconds");
@ -440,35 +467,37 @@ public class DanaRSService extends Service {
return false; return false;
} }
mWakeLock.acquire(); connectionStartTime = System.currentTimeMillis();
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.CONNECTING)); MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.CONNECTING));
isConnecting = true; isConnecting = true;
// Following should be removed later because we close Gatt on disconnect and this should never happen
if ((mBluetoothDeviceAddress != null) && (address.equals(mBluetoothDeviceAddress)) && (mBluetoothGatt != null)) { if ((mBluetoothDeviceAddress != null) && (address.equals(mBluetoothDeviceAddress)) && (mBluetoothGatt != null)) {
log.debug("Trying to use an existing mBluetoothGatt for connection."); log.debug("Trying to use an existing mBluetoothGatt for connection.");
sHandler.post(updateProgress);
if (mBluetoothGatt.connect()) { if (mBluetoothGatt.connect()) {
setCharacteristicNotification(getUARTReadBTGattChar(), true); setCharacteristicNotification(getUARTReadBTGattChar(), true);
mWakeLock.release();
return true; return true;
} }
mWakeLock.release(); sHandler.removeCallbacks(updateProgress);
return false; return false;
} }
// end
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
if (device == null) { if (device == null) {
log.debug("Device not found. Unable to connect."); log.debug("Device not found. Unable to connect.");
mWakeLock.release();
return false; return false;
} }
sHandler.post(updateProgress);
mBluetoothGatt = device.connectGatt(getApplicationContext(), false, mGattCallback); mBluetoothGatt = device.connectGatt(getApplicationContext(), false, mGattCallback);
setCharacteristicNotification(getUARTReadBTGattChar(), true); setCharacteristicNotification(getUARTReadBTGattChar(), true);
log.debug("Trying to create a new connection."); log.debug("Trying to create a new connection.");
mBluetoothDevice = device; mBluetoothDevice = device;
mBluetoothDeviceAddress = address; mBluetoothDeviceAddress = address;
mBluetoothDeviceName = device.getName(); mBluetoothDeviceName = device.getName();
mWakeLock.release();
return true; return true;
} }
@ -512,7 +541,9 @@ public class DanaRSService extends Service {
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) { } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
close(); close();
isConnected = false; isConnected = false;
sHandler.removeCallbacks(updateProgress); // just to be sure
MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED)); MainApp.bus().post(new EventPumpStatusChanged(EventPumpStatusChanged.DISCONNECTED));
log.debug("Device was disconnected " + gatt.getDevice().getName());//Device was disconnected
} }
} }
@ -524,6 +555,8 @@ public class DanaRSService extends Service {
if (status == BluetoothGatt.GATT_SUCCESS) { if (status == BluetoothGatt.GATT_SUCCESS) {
findCharacteristic(); findCharacteristic();
} }
// stop sending connection progress
sHandler.removeCallbacks(updateProgress);
// 1st message sent to pump after connect // 1st message sent to pump after connect
byte[] bytes = BleCommandUtil.getInstance().getEncryptedPacket(BleCommandUtil.DANAR_PACKET__OPCODE_ENCRYPTION__PUMP_CHECK, null, getConnectDeviceName()); byte[] bytes = BleCommandUtil.getInstance().getEncryptedPacket(BleCommandUtil.DANAR_PACKET__OPCODE_ENCRYPTION__PUMP_CHECK, null, getConnectDeviceName());
@ -925,7 +958,7 @@ public class DanaRSService extends Service {
} }
} }
SystemClock.sleep(200); //SystemClock.sleep(200);
if (!message.isReceived()) { if (!message.isReceived()) {
log.warn("Reply not received " + message.getFriendlyName()); log.warn("Reply not received " + message.getFriendlyName());
} }

View file

@ -727,5 +727,10 @@
<string name="key_wizard_include_bolus_iob">wizard_include_bolus_iob</string> <string name="key_wizard_include_bolus_iob">wizard_include_bolus_iob</string>
<string name="key_wizard_include_basal_iob">wizard_include_basal_iob</string> <string name="key_wizard_include_basal_iob">wizard_include_basal_iob</string>
<string name="danar_history_prime">Prime</string> <string name="danar_history_prime">Prime</string>
<string name="gettingextendedbolusstatus">Getting extended bolus status</string>
<string name="gettingbolusstatus">Getting bolus status</string>
<string name="gettingtempbasalstatus">Getting temporary basal status</string>
<string name="gettingpumpsettings">Gettings pump settings</string>
<string name="gettingpumptime">Getting pump time</string>
</resources> </resources>