package dlr.stressrecognition.sensor; import org.personalsmartspace.cm.reasoning.activity.impl.ARS_Administrator; import org.personalsmartspace.cm.reasoning.activity.impl.DataReader; import org.personalsmartspace.cm.reasoning.activity.impl.IMUBelt_ARS; import org.personalsmartspace.cm.reasoning.activity.interfaces.ActivityConsumer; import org.personalsmartspace.cm.reasoning.activity.sensors.SensorIMU_Belt; import android.os.Bundle; import android.os.Handler; import android.os.Message; import dlr.stressrecognition.classifier.StressElicitationActivity; import dlr.stressrecognition.logger.Logger; /** * The MotionSensor class handles the connection with the ARS. * * @author Michael Gross * */ public class MotionSensor implements ActivityConsumer { private Handler mHandler; private Logger logger; private DataReader d; private IMUBelt_ARS beltARSIMU; private String classifier = "Not set"; final String serialPort = "/dev/ttyUSB0"; public MotionSensor(Handler mHandler) { this.mHandler = mHandler; this.logger = new Logger("Activity"); SensorIMU_Belt iMU = new SensorIMU_Belt(); beltARSIMU = new IMUBelt_ARS(iMU); beltARSIMU.setConsumer(this); ARS_Administrator adminARS = new ARS_Administrator(this); adminARS.registerIARSSensorLocation(beltARSIMU); d = new DataReader(adminARS, serialPort); d.registerISensor(iMU); String[] activities = { "Sitting", "Standing", "Walking", "Running", "Jumping", "Falling", "Lying", "UpDown", "Time" }; logger.writeHeader(activities); Message msg = mHandler.obtainMessage(StressElicitationActivity.MESSAGE_CALIB_FIN); mHandler.sendMessage(msg); } public void start() { beltARSIMU.setComputeInitialConditions(true); } public void stop() { beltARSIMU.stopSystem(); d.stopXSens(); Message msg = mHandler .obtainMessage(StressElicitationActivity.MESSAGE_STOP); mHandler.sendMessage(msg); } public void restart() { beltARSIMU.restartSystem(); } public void pause() { beltARSIMU.stopSystem(); } public void calibrate() { beltARSIMU.timeToGetRotationMatrixFromSensorToBody(); } @Override public void update(long time, String classifier, double[] nB, double[] dNB, double[] bN, double[] dBN, String snB, String sdNB, String sbN, String sdBN) { String activity = ""; System.out.println(classifier); double[] output = null; if(classifier.equals("sNB")) { String[] data = new String[nB.length + 1]; for(int i=0; i < nB.length; i++) { data[i] = String.valueOf(nB[i]); } data[nB.length] = String.valueOf(time); logger.write(data); activity = snB; output = nB; } else if(classifier.equals("dNB")) { String[] data = new String[dNB.length + 1]; for(int i=0; i < dNB.length; i++) { data[i] = String.valueOf(dNB[i]); } data[dNB.length] = String.valueOf(time); logger.write(data); activity = sdNB; output = dNB; } else if(classifier.equals("sBN")) { String[] data = new String[bN.length + 1]; for(int i=0; i < bN.length; i++) { data[i] = String.valueOf(bN[i]); } data[bN.length] = String.valueOf(time); logger.write(data); activity = sbN; output = bN; } else if(classifier.equals("dBN")) { String[] data = new String[dBN.length + 1]; for(int i=0; i < dBN.length; i++) { data[i] = String.valueOf(dBN[i]); } data[dBN.length] = String.valueOf(time); logger.write(data); activity = sdBN; output = dBN; } setClassifier(classifier); Message msg = mHandler.obtainMessage(StressElicitationActivity.MESSAGE_UPDATE); Bundle data = new Bundle(); data.putString("activity", activity); data.putString("sNB", snB); data.putString("sdNB", sdNB); data.putString("sbN", sbN); data.putString("sdBN", sdBN); /* * dBN 0: "Sitting" 1: "Standing" 2: "Walking" 3: "Running" 4: "Jumping" * 5: "Falling" 6: "Lying" 7: "UpDown" */ data.putDoubleArray("dBN", output); msg.setData(data); mHandler.sendMessage(msg); } public void setClassifier(String classifier) { this.classifier = classifier; } public String getClassifier() { return classifier; } }