Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.mbientlab.metawear.callaghaninnovationapp;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.bluetooth.BluetoothDevice;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Environment;
- import android.os.IBinder;
- import android.support.v4.app.Fragment;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.support.design.widget.Snackbar;
- import android.util.Log;
- import android.widget.Button;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.mbientlab.metawear.MetaWearBleService;
- import com.mbientlab.metawear.MetaWearBoard;
- import com.mbientlab.metawear.module.Accelerometer;
- import com.mbientlab.metawear.module.Bmi160Gyro;
- import com.mbientlab.metawear.module.Gyro;
- import com.mbientlab.metawear.module.Bmm150Magnetometer;
- import com.mbientlab.metawear.module.Bmm150Magnetometer.PowerPreset;
- import com.mbientlab.metawear.UnsupportedModuleException;
- import com.mbientlab.metawear.AsyncOperation;
- import com.mbientlab.metawear.*;
- import com.mbientlab.metawear.data.CartesianFloat;
- import com.mbientlab.metawear.module.Led;
- import com.mbientlab.metawear.module.Haptic;
- import com.mbientlab.metawear.module.SensorFusion;
- public class DeviceSetupActivityFragment extends Fragment implements ServiceConnection {
- public interface FragmentSettings {
- BluetoothDevice getBtDevice();
- }
- private MetaWearBoard mwBoard= null;
- private FragmentSettings settings;
- private Accelerometer accModule = null;
- private Bmi160Gyro gyroModule = null;
- private Bmm150Magnetometer magModule = null;
- private Led ledModule = null;
- private Haptic hapticModule = null;
- private ManageData managedata = new ManageData();
- public DeviceSetupActivityFragment() {
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Activity owner= getActivity();
- if (!(owner instanceof FragmentSettings)) {
- throw new ClassCastException("Owning activity must implement the FragmentSettings interface");
- }
- settings= (FragmentSettings) owner;
- owner.getApplicationContext().bindService(new Intent(owner, MetaWearBleService.class), this, Context.BIND_AUTO_CREATE);
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- ///< Unbind the service when the activity is destroyed
- getActivity().getApplicationContext().unbindService(this);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- setRetainInstance(true);
- return inflater.inflate(R.layout.fragment_device_setup, container, false);
- }
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mwBoard= ((MetaWearBleService.LocalBinder) service).getMetaWearBoard(settings.getBtDevice());
- ready();
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {
- }
- /**
- * Called when the app has reconnected to the board
- */
- public void reconnected() { }
- /**
- * Called when the mwBoard field is ready to be used
- */
- public void ready() {
- try {
- accModule = mwBoard.getModule(Accelerometer.class);
- // Set the output data rate to 25Hz or closet valid value
- // accModule.setOutputDataRate(25.f);
- gyroModule = mwBoard.getModule(Bmi160Gyro.class);
- // Set the output data rate to 25Hz or closet valid value
- // gyroModule.setOutputDataRate(25.f);
- magModule = mwBoard.getModule(Bmm150Magnetometer.class);
- magModule.setPowerPreset(PowerPreset.HIGH_ACCURACY);
- magModule.enableBFieldSampling();
- ledModule = mwBoard.getModule(Led.class);
- hapticModule = mwBoard.getModule(Haptic.class);
- } catch (UnsupportedModuleException e) {
- Snackbar.make(getActivity().findViewById(R.id.device_setup_fragment), e.getMessage(),
- Snackbar.LENGTH_SHORT).show();
- }
- }
- @Override
- public void onViewCreated(final View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- final TextView saveAlert = (TextView) view.findViewById(R.id.saveAlert);
- final Button stopButton = (Button) view.findViewById(R.id.all_stop);
- final Button userAlert = (Button) view.findViewById(R.id.alert);
- final ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
- stopButton.setEnabled(false);
- progressBar.setVisibility(View.INVISIBLE);
- saveAlert.setVisibility(View.INVISIBLE);
- managedata.DisplayGraph(view);
- view.findViewById(R.id.all_start).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- v.setEnabled(false);
- stopButton.setEnabled(true);
- progressBar.setVisibility(View.VISIBLE);
- saveAlert.setVisibility(View.VISIBLE);
- accModule.routeData().fromHighFreqAxes().stream("acc_stream").commit()
- .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
- @Override
- public void success(RouteManager result) {
- result.subscribe("acc_stream", new RouteManager.MessageHandler() {
- @Override
- public void process(Message msg) {
- final CartesianFloat accData = msg.getData(CartesianFloat.class);
- Log.i("Accelerometer data:", accData.toString());
- managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS), "AccelerometerData_", accData.toString());
- managedata.addDataToGraph(accData.toString());
- }
- });
- accModule.setOutputDataRate(200.f);
- accModule.enableAxisSampling();
- accModule.start();
- }
- });
- gyroModule.routeData().fromHighFreqAxes().stream("gyro_stream").commit()
- .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
- @Override
- public void success(RouteManager result) {
- result.subscribe("gyro_stream", new RouteManager.MessageHandler() {
- @Override
- public void process(Message msg) {
- final CartesianFloat spinData = msg.getData(CartesianFloat.class);
- Log.i("Gyroscope data:", spinData.toString());
- managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS), "GyroscopeData_", spinData.toString());
- // managedata.addDataToGraph(spinData.toString());
- }
- });
- gyroModule.setOutputDataRate(200.f);
- gyroModule.start();
- }
- });
- magModule.routeData().fromHighFreqBField().stream("mag_stream").commit()
- .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
- public void success(RouteManager result) {
- result.subscribe("mag_stream", new RouteManager.MessageHandler() {
- public void process(Message msg) {
- final CartesianFloat bField = msg.getData(CartesianFloat.class);
- Log.i("Magnetometer data:", bField.toString());
- managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS), "MagnetometerData_", bField.toString());
- // managedata.addDataToGraph(bField.toString());
- }
- });
- magModule.start();
- }
- });
- Toast.makeText(getActivity(), "Writing data files in the Downloads folder",
- Toast.LENGTH_LONG).show();
- }
- });
- view.findViewById(R.id.all_stop).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new AlertDialog.Builder(getContext())
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setTitle("Stop Recording Data")
- .setMessage("Are you sure you want to stop recording data now?")
- .setPositiveButton("Yes", new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- stopButton.setEnabled(false);
- userAlert.setEnabled(false);
- saveAlert.setText("Files saved in Downloads.");
- progressBar.setVisibility(View.INVISIBLE);
- accModule.stop();
- accModule.disableAxisSampling();
- gyroModule.stop();
- magModule.stop();
- mwBoard.removeRoutes();
- Toast.makeText(getActivity(), "Data recording stopped. View files in Downloads folder.",
- Toast.LENGTH_LONG).show();
- }
- })
- .setNegativeButton("No", null)
- .show();
- }
- });
- view.findViewById(R.id.alert).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS), "AlertButtonTimestamps_", "");
- new AlertDialog.Builder(getContext())
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setTitle("Alert User")
- .setMessage("Are you sure you want to alert the user now?")
- .setPositiveButton("Yes", new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // start led
- ledModule.configureColorChannel(Led.ColorChannel.GREEN)
- .setRiseTime((short) 0).setPulseDuration((short) 1000)
- .setRepeatCount((byte) 6).setHighTime((short) 500)
- .setHighIntensity((byte) 31).setLowIntensity((byte) 0)
- .commit();
- ledModule.play(true);
- // start haptic
- hapticModule.startMotor(Float.valueOf("100.0"), Short.valueOf("1000"));
- Toast.makeText(getActivity(), "User Alerted!",
- Toast.LENGTH_LONG).show();
- }
- })
- .setNegativeButton("No", null)
- .show();
- }
- });
- }
- }
Add Comment
Please, Sign In to add comment