Guest User

metawear

a guest
Mar 27th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.53 KB | None | 0 0
  1. package com.mbientlab.metawear.callaghaninnovationapp;
  2.  
  3. import android.app.Activity;
  4. import android.app.AlertDialog;
  5. import android.bluetooth.BluetoothDevice;
  6. import android.content.ComponentName;
  7. import android.content.Context;
  8. import android.content.DialogInterface;
  9. import android.content.Intent;
  10. import android.content.ServiceConnection;
  11. import android.os.Environment;
  12. import android.os.IBinder;
  13. import android.support.v4.app.Fragment;
  14. import android.os.Bundle;
  15. import android.view.LayoutInflater;
  16. import android.view.View;
  17. import android.view.ViewGroup;
  18. import android.support.design.widget.Snackbar;
  19. import android.util.Log;
  20. import android.widget.Button;
  21. import android.widget.ProgressBar;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24.  
  25. import com.mbientlab.metawear.MetaWearBleService;
  26. import com.mbientlab.metawear.MetaWearBoard;
  27. import com.mbientlab.metawear.module.Accelerometer;
  28. import com.mbientlab.metawear.module.Bmi160Gyro;
  29. import com.mbientlab.metawear.module.Gyro;
  30. import com.mbientlab.metawear.module.Bmm150Magnetometer;
  31. import com.mbientlab.metawear.module.Bmm150Magnetometer.PowerPreset;
  32. import com.mbientlab.metawear.UnsupportedModuleException;
  33. import com.mbientlab.metawear.AsyncOperation;
  34. import com.mbientlab.metawear.*;
  35. import com.mbientlab.metawear.data.CartesianFloat;
  36. import com.mbientlab.metawear.module.Led;
  37. import com.mbientlab.metawear.module.Haptic;
  38. import com.mbientlab.metawear.module.SensorFusion;
  39.  
  40. public class DeviceSetupActivityFragment extends Fragment implements ServiceConnection {
  41.  
  42.     public interface FragmentSettings {
  43.         BluetoothDevice getBtDevice();
  44.     }
  45.  
  46.     private MetaWearBoard mwBoard= null;
  47.     private FragmentSettings settings;
  48.     private Accelerometer accModule = null;
  49.     private Bmi160Gyro gyroModule = null;
  50.     private Bmm150Magnetometer magModule = null;
  51.     private Led ledModule = null;
  52.     private Haptic hapticModule = null;
  53.  
  54.     private ManageData managedata = new ManageData();
  55.  
  56.     public DeviceSetupActivityFragment() {
  57.     }
  58.  
  59.     @Override
  60.     public void onCreate(Bundle savedInstanceState) {
  61.         super.onCreate(savedInstanceState);
  62.  
  63.         Activity owner= getActivity();
  64.         if (!(owner instanceof FragmentSettings)) {
  65.             throw new ClassCastException("Owning activity must implement the FragmentSettings interface");
  66.         }
  67.  
  68.         settings= (FragmentSettings) owner;
  69.         owner.getApplicationContext().bindService(new Intent(owner, MetaWearBleService.class), this, Context.BIND_AUTO_CREATE);
  70.     }
  71.  
  72.     @Override
  73.     public void onDestroy() {
  74.         super.onDestroy();
  75.  
  76.         ///< Unbind the service when the activity is destroyed
  77.         getActivity().getApplicationContext().unbindService(this);
  78.     }
  79.  
  80.     @Override
  81.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  82.         setRetainInstance(true);
  83.         return inflater.inflate(R.layout.fragment_device_setup, container, false);
  84.     }
  85.  
  86.     @Override
  87.     public void onServiceConnected(ComponentName name, IBinder service) {
  88.         mwBoard= ((MetaWearBleService.LocalBinder) service).getMetaWearBoard(settings.getBtDevice());
  89.         ready();
  90.     }
  91.  
  92.     @Override
  93.     public void onServiceDisconnected(ComponentName name) {
  94.  
  95.     }
  96.  
  97.     /**
  98.      * Called when the app has reconnected to the board
  99.      */
  100.     public void reconnected() { }
  101.  
  102.     /**
  103.      * Called when the mwBoard field is ready to be used
  104.      */
  105.  
  106.     public void ready() {
  107.         try {
  108.             accModule = mwBoard.getModule(Accelerometer.class);
  109.             // Set the output data rate to 25Hz or closet valid value
  110. //            accModule.setOutputDataRate(25.f);
  111.  
  112.             gyroModule = mwBoard.getModule(Bmi160Gyro.class);
  113.             // Set the output data rate to 25Hz or closet valid value
  114. //            gyroModule.setOutputDataRate(25.f);
  115.  
  116.             magModule = mwBoard.getModule(Bmm150Magnetometer.class);
  117.             magModule.setPowerPreset(PowerPreset.HIGH_ACCURACY);
  118.             magModule.enableBFieldSampling();
  119.  
  120.             ledModule = mwBoard.getModule(Led.class);
  121.             hapticModule = mwBoard.getModule(Haptic.class);
  122.  
  123.         } catch (UnsupportedModuleException e) {
  124.             Snackbar.make(getActivity().findViewById(R.id.device_setup_fragment), e.getMessage(),
  125.                     Snackbar.LENGTH_SHORT).show();
  126.         }
  127.     }
  128.  
  129.     @Override
  130.     public void onViewCreated(final View view, Bundle savedInstanceState) {
  131.         super.onViewCreated(view, savedInstanceState);
  132.         final TextView saveAlert = (TextView) view.findViewById(R.id.saveAlert);
  133.         final Button stopButton = (Button) view.findViewById(R.id.all_stop);
  134.         final Button userAlert = (Button) view.findViewById(R.id.alert);
  135.         final ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
  136.  
  137.         stopButton.setEnabled(false);
  138.         progressBar.setVisibility(View.INVISIBLE);
  139.         saveAlert.setVisibility(View.INVISIBLE);
  140.  
  141.         managedata.DisplayGraph(view);
  142.  
  143.         view.findViewById(R.id.all_start).setOnClickListener(new View.OnClickListener() {
  144.             @Override
  145.             public void onClick(View v) {
  146.                 v.setEnabled(false);
  147.                 stopButton.setEnabled(true);
  148.                 progressBar.setVisibility(View.VISIBLE);
  149.                 saveAlert.setVisibility(View.VISIBLE);
  150.  
  151.                 accModule.routeData().fromHighFreqAxes().stream("acc_stream").commit()
  152.                         .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
  153.                             @Override
  154.                             public void success(RouteManager result) {
  155.                             result.subscribe("acc_stream", new RouteManager.MessageHandler() {
  156.                                 @Override
  157.                                 public void process(Message msg) {
  158.                                     final CartesianFloat accData = msg.getData(CartesianFloat.class);
  159.                                     Log.i("Accelerometer data:", accData.toString());
  160.                                     managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
  161.                                         Environment.DIRECTORY_DOWNLOADS), "AccelerometerData_", accData.toString());
  162.                                     managedata.addDataToGraph(accData.toString());
  163.                                 }
  164.                             });
  165.                         accModule.setOutputDataRate(200.f);
  166.                         accModule.enableAxisSampling();
  167.                         accModule.start();
  168.                     }
  169.                 });
  170.  
  171.                 gyroModule.routeData().fromHighFreqAxes().stream("gyro_stream").commit()
  172.                         .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
  173.                             @Override
  174.                             public void success(RouteManager result) {
  175.                                 result.subscribe("gyro_stream", new RouteManager.MessageHandler() {
  176.                                     @Override
  177.                                     public void process(Message msg) {
  178.                                         final CartesianFloat spinData = msg.getData(CartesianFloat.class);
  179.                                         Log.i("Gyroscope data:", spinData.toString());
  180.                                         managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
  181.                                                 Environment.DIRECTORY_DOWNLOADS), "GyroscopeData_", spinData.toString());
  182.                                        // managedata.addDataToGraph(spinData.toString());
  183.                                     }
  184.                                 });
  185.                                 gyroModule.setOutputDataRate(200.f);
  186.                                 gyroModule.start();
  187.                             }
  188.                         });
  189.  
  190.                 magModule.routeData().fromHighFreqBField().stream("mag_stream").commit()
  191.                         .onComplete(new AsyncOperation.CompletionHandler<RouteManager>() {
  192.                             public void success(RouteManager result) {
  193.                                 result.subscribe("mag_stream", new RouteManager.MessageHandler() {
  194.                                     public void process(Message msg) {
  195.                                         final CartesianFloat bField = msg.getData(CartesianFloat.class);
  196.                                         Log.i("Magnetometer data:", bField.toString());
  197.                                         managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
  198.                                                 Environment.DIRECTORY_DOWNLOADS), "MagnetometerData_", bField.toString());
  199.                                        // managedata.addDataToGraph(bField.toString());
  200.                                     }
  201.                                 });
  202.                                 magModule.start();
  203.                             }
  204.                         });
  205.                 Toast.makeText(getActivity(), "Writing data files in the Downloads folder",
  206.                         Toast.LENGTH_LONG).show();
  207.             }
  208.         });
  209.  
  210.         view.findViewById(R.id.all_stop).setOnClickListener(new View.OnClickListener() {
  211.             @Override
  212.             public void onClick(View v) {
  213.                 new AlertDialog.Builder(getContext())
  214.                         .setIcon(android.R.drawable.ic_dialog_alert)
  215.                         .setTitle("Stop Recording Data")
  216.                         .setMessage("Are you sure you want to stop recording data now?")
  217.                         .setPositiveButton("Yes", new DialogInterface.OnClickListener()
  218.                         {
  219.                             @Override
  220.                             public void onClick(DialogInterface dialog, int which) {
  221.                                 stopButton.setEnabled(false);
  222.                                 userAlert.setEnabled(false);
  223.                                 saveAlert.setText("Files saved in Downloads.");
  224.                                 progressBar.setVisibility(View.INVISIBLE);
  225.                                 accModule.stop();
  226.                                 accModule.disableAxisSampling();
  227.                                 gyroModule.stop();
  228.                                 magModule.stop();
  229.                                 mwBoard.removeRoutes();
  230.                                 Toast.makeText(getActivity(), "Data recording stopped. View files in Downloads folder.",
  231.                                         Toast.LENGTH_LONG).show();
  232.                             }
  233.                         })
  234.                         .setNegativeButton("No", null)
  235.                         .show();
  236.             }
  237.         });
  238.  
  239.         view.findViewById(R.id.alert).setOnClickListener(new View.OnClickListener() {
  240.             @Override
  241.             public void onClick(View v) {
  242.                 managedata.WriteToFile(Environment.getExternalStoragePublicDirectory(
  243.                         Environment.DIRECTORY_DOWNLOADS), "AlertButtonTimestamps_", "");
  244.                 new AlertDialog.Builder(getContext())
  245.                         .setIcon(android.R.drawable.ic_dialog_alert)
  246.                         .setTitle("Alert User")
  247.                         .setMessage("Are you sure you want to alert the user now?")
  248.                         .setPositiveButton("Yes", new DialogInterface.OnClickListener()
  249.                         {
  250.                             @Override
  251.                             public void onClick(DialogInterface dialog, int which) {
  252.                                 // start led
  253.                                 ledModule.configureColorChannel(Led.ColorChannel.GREEN)
  254.                                         .setRiseTime((short) 0).setPulseDuration((short) 1000)
  255.                                         .setRepeatCount((byte) 6).setHighTime((short) 500)
  256.                                         .setHighIntensity((byte) 31).setLowIntensity((byte) 0)
  257.                                         .commit();
  258.                                 ledModule.play(true);
  259.                                 // start haptic
  260.                                 hapticModule.startMotor(Float.valueOf("100.0"), Short.valueOf("1000"));
  261.                                 Toast.makeText(getActivity(), "User Alerted!",
  262.                                         Toast.LENGTH_LONG).show();
  263.                             }
  264.                         })
  265.                         .setNegativeButton("No", null)
  266.                         .show();
  267.             }
  268.         });
  269.     }
  270. }
Add Comment
Please, Sign In to add comment