Version that doesn't live long

This commit is contained in:
Ruben van de Ven 2018-10-22 20:46:03 +02:00
parent 732763a328
commit 9af67a8d65
4 changed files with 107 additions and 27 deletions

View File

@ -28,4 +28,7 @@ dependencies {
implementation files("libs/antpluginlib_3-6-0.jar") implementation files("libs/antpluginlib_3-6-0.jar")
implementation files("libs/fit_16.00.jar") implementation files("libs/fit_16.00.jar")
implementation 'com.koushikdutta.async:androidasync:2.+'
} }

View File

@ -3,6 +3,8 @@
package="com.rubenvandeven.heartbeatstreamer"> package="com.rubenvandeven.heartbeatstreamer">
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" /> <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application <application
android:allowBackup="true" android:allowBackup="true"

View File

@ -16,6 +16,8 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.TextView; import android.widget.TextView;
@ -37,15 +39,20 @@ import com.dsi.ant.plugins.antplus.pccbase.AntPluginPcc.IPluginAccessResultRecei
import com.dsi.ant.plugins.antplus.pccbase.AntPlusLegacyCommonPcc.ICumulativeOperatingTimeReceiver; import com.dsi.ant.plugins.antplus.pccbase.AntPlusLegacyCommonPcc.ICumulativeOperatingTimeReceiver;
import com.dsi.ant.plugins.antplus.pccbase.AntPlusLegacyCommonPcc.IManufacturerAndSerialReceiver; import com.dsi.ant.plugins.antplus.pccbase.AntPlusLegacyCommonPcc.IManufacturerAndSerialReceiver;
import com.dsi.ant.plugins.antplus.pccbase.AntPlusLegacyCommonPcc.IVersionAndModelReceiver; import com.dsi.ant.plugins.antplus.pccbase.AntPlusLegacyCommonPcc.IVersionAndModelReceiver;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.future.Future;
import com.koushikdutta.async.http.AsyncHttpClient;
import com.koushikdutta.async.http.WebSocket;
import com.rubenvandeven.heartbeatstreamer.R; import com.rubenvandeven.heartbeatstreamer.R;
import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.EnumSet; import java.util.EnumSet;
/** /**
* Base class to connects to Heart Rate Plugin and display all the event data. * Base class to connects to Heart Rate Plugin and display all the event data.
*/ */
public abstract class Activity_HeartRateDisplayBase extends Activity public abstract class Activity_HeartRateDisplayBase extends AppCompatActivity
{ {
protected abstract void requestAccessToPcc(); protected abstract void requestAccessToPcc();
@ -78,6 +85,9 @@ public abstract class Activity_HeartRateDisplayBase extends Activity
TextView tv_dataStatus; TextView tv_dataStatus;
TextView tv_rrFlag; TextView tv_rrFlag;
TextView tv_ws;
String lastMsg = "";
@Override @Override
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
@ -85,6 +95,9 @@ public abstract class Activity_HeartRateDisplayBase extends Activity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
handleReset(); handleReset();
Log.i("HeartRate", "Created WS");
} }
/** /**
@ -131,6 +144,7 @@ public abstract class Activity_HeartRateDisplayBase extends Activity
tv_dataStatus = (TextView)findViewById(R.id.textView_DataStatus); tv_dataStatus = (TextView)findViewById(R.id.textView_DataStatus);
tv_rrFlag = (TextView)findViewById(R.id.textView_rRFlag); tv_rrFlag = (TextView)findViewById(R.id.textView_rRFlag);
tv_ws = (TextView)findViewById(R.id.textView_ws);
//Reset the text display //Reset the text display
tv_status.setText(status); tv_status.setText(status);
@ -165,40 +179,78 @@ public abstract class Activity_HeartRateDisplayBase extends Activity
*/ */
public void subscribeToHrEvents() public void subscribeToHrEvents()
{ {
hrPcc.subscribeHeartRateDataEvent(new IHeartRateDataReceiver()
{ Future<WebSocket> fws = AsyncHttpClient.getDefaultInstance().websocket("ws://heartbeat.rubenvandeven.com:8888/ws", "my-protocol", new AsyncHttpClient.WebSocketConnectCallback() {
@Override @Override
public void onNewHeartRateData(final long estTimestamp, EnumSet<EventFlag> eventFlags, public void onCompleted(Exception ex, final WebSocket webSocket) {
final int computedHeartRate, final long heartBeatCount, if (ex != null) {
final BigDecimal heartBeatEventTime, final DataState dataState) ex.printStackTrace();
{ // TODO: retry
// Mark heart rate with asterisk if zero detected return;
final String textHeartRate = String.valueOf(computedHeartRate) }
+ ((DataState.ZERO_DETECTED.equals(dataState)) ? "*" : "");
// Mark heart beat count and heart beat event time with asterisk if initial value webSocket.send("Connect!");
final String textHeartBeatCount = String.valueOf(heartBeatCount) webSocket.setClosedCallback(new CompletedCallback() {
+ ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
final String textHeartBeatEventTime = String.valueOf(heartBeatEventTime)
+ ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
runOnUiThread(new Runnable()
{
@Override @Override
public void run() public void onCompleted(Exception ex) {
{ //unsubscribe before triggering resubscription
tv_estTimestamp.setText(String.valueOf(estTimestamp)); hrPcc.subscribeHeartRateDataEvent(null);
subscribeToHrEvents();
tv_computedHeartRate.setText(textHeartRate);
tv_heartBeatCounter.setText(textHeartBeatCount);
tv_heartBeatEventTime.setText(textHeartBeatEventTime);
tv_dataStatus.setText(dataState.toString());
} }
}); });
hrPcc.subscribeHeartRateDataEvent(new IHeartRateDataReceiver()
{
@Override
public void onNewHeartRateData(final long estTimestamp, EnumSet<EventFlag> eventFlags,
final int computedHeartRate, final long heartBeatCount,
final BigDecimal heartBeatEventTime, final DataState dataState)
{
// Mark heart rate with asterisk if zero detected
final String textHeartRate = String.valueOf(computedHeartRate)
+ ((DataState.ZERO_DETECTED.equals(dataState)) ? "*" : "");
// Mark heart beat count and heart beat event time with asterisk if initial value
final String textHeartBeatCount = String.valueOf(heartBeatCount)
+ ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
final String textHeartBeatEventTime = String.valueOf(heartBeatEventTime)
+ ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
final String msg = String.format("{\"rate\":\"%s\", \"count\":\"%s\", \"time\":\"%s\"}", textHeartRate, textHeartBeatCount, textHeartBeatEventTime);
if(msg == lastMsg) {
Log.i("HeartRate", "Skip duplicate");
return;
}
lastMsg = msg;
webSocket.send(msg);
Log.i("HeartRate", "Sent: " + msg);
runOnUiThread(new Runnable()
{
@Override
public void run()
{
tv_estTimestamp.setText(String.valueOf(estTimestamp));
tv_computedHeartRate.setText(textHeartRate);
tv_heartBeatCounter.setText(textHeartBeatCount);
tv_heartBeatEventTime.setText(textHeartBeatEventTime);
tv_dataStatus.setText(dataState.toString());
tv_ws.setText(lastMsg);
}
});
}
});
} }
}); });
hrPcc.subscribePage4AddtDataEvent(new IPage4AddtDataReceiver() hrPcc.subscribePage4AddtDataEvent(new IPage4AddtDataReceiver()
{ {
@Override @Override

View File

@ -394,6 +394,29 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/viewGroup_ws"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#EBEBEB"
android:paddingBottom="3dp"
android:paddingTop="3dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Last msg:" />
<TextView
android:id="@+id/textView_ws"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="---" />
</RelativeLayout>
</LinearLayout> </LinearLayout>