/* * Copyright (C) 2014 TU Darmstadt, Hessen, Germany. * Department of Computer Science Databases and Distributed Systems * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * */ package de.tudarmstadt.dvs.myhealthassistant.myhealthhub.commontools; import java.util.Random; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.AbstractChannel; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.Event; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.sensorreadings.cardiovascular.ECGEvent; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.sensorreadings.cardiovascular.HeartRateEvent; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.sensorreadings.physical.WeightEvent; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.sensorreadings.physical.WeightEventInKg; import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.sensorreadings.physical.activity.ActivityEventSSWRC; /** * @author Chris * */ public class TrafficGenerator { public String TAG = "TrafficGenerator"; private boolean D = true; private static int HR = 0; private static int ACTIVITY = 1; private static int WEIGHT = 2; private static int ECG = 3; private static int SECOND = 1000; private static Handler eventGeneratorHandler = new Handler(); private boolean isRunning; private int round; private int totalRound; private int[][] messagesPerSecond; private Context ctx; private int eventNumber; protected String myHealthHubReceiver = AbstractChannel.RECEIVER; int[] values; public TrafficGenerator(int instance, int[][] msgsPerSecond, Context ctx) { TAG += "_"+instance; this.isRunning = false; this.messagesPerSecond = msgsPerSecond; this.ctx = ctx; // prepare ECG reading int size = 208; values = new int[size]; for(int i=0; i<size; i++) { values[i] = 2000; } // create a peak values[48] = 2200; values[49] = 2800; values[50] = 3200; values[51] = 2800; values[52] = 2200; } public void startRound(int i, int j) { if(D)Log.d(TAG, "Start round "+i+" of "+j+" rounds."); eventNumber = 0; round = i; totalRound = j; isRunning = true; if(messagesPerSecond[round][HR]!=0) generateEventsHR.run(); if(messagesPerSecond[round][ACTIVITY]!=0) generateEventsActivity.run(); if(messagesPerSecond[round][WEIGHT]!=0) generateEventsWeight.run(); if(messagesPerSecond[round][ECG]!=0) generateEventsECG.run(); } public void stop() { isRunning = false; } private Runnable generateEventsHR = new Runnable() { public void run() { if (isRunning) { eventGeneratorHandler.postDelayed(generateEventsHR, SECOND / messagesPerSecond[round][HR]); /* generate event */ HeartRateEvent evt = new HeartRateEvent(TAG+"_HR_"+round+"_"+eventNumber, getGMTTime(), "EventGenerator", "EventGenerator", totalRound+"", 65); //getRandomNumber(55, 180)); injectEventToLocalBroadcastReceiver(evt); } } }; private Runnable generateEventsActivity = new Runnable() { public void run() { if (isRunning) { eventGeneratorHandler.postDelayed(generateEventsActivity, SECOND / messagesPerSecond[round][ACTIVITY]); /* generate event */ // BloodPressureEvent evt = new BloodPressureEvent(TAG+"_BP_"+round+"_"+eventNumber, // getGMTTime(), "EventGenerator", "EventGenerator", // totalRound+"", getRandomNumber(120, 140), getRandomNumber(60, // 80), getRandomNumber(55, 120), "HGmm"); String activity; switch (getRandomNumber(0, 4)) { case 0: activity = ActivityEventSSWRC.SITTING_NAME;break; case 1: activity = ActivityEventSSWRC.STANDING_NAME;break; case 2: activity = ActivityEventSSWRC.WALKING_NAME;break; case 3: activity = ActivityEventSSWRC.CYCLING_NAME;break; case 4: activity = ActivityEventSSWRC.RUNNING_NAME;break; default:activity = ActivityEventSSWRC.SITTING_NAME;break; } ActivityEventSSWRC evt = new ActivityEventSSWRC(TAG+"_HR_"+round+"_"+eventNumber, getGMTTime(), "EventGenerator", "EventGenerator", totalRound+""); evt.setActivity(1, activity, 0, 0); injectEventToLocalBroadcastReceiver(evt); } } }; private Runnable generateEventsWeight = new Runnable() { public void run() { if (isRunning) { eventGeneratorHandler.postDelayed(generateEventsWeight, SECOND / messagesPerSecond[round][WEIGHT]); /* generate event */ WeightEvent evt = new WeightEventInKg(TAG+"_Weight_"+round+"_"+eventNumber, getGMTTime(), "EventGenerator", "EventGenerator", totalRound+"", getRandomNumber(60, 120)*10); injectEventToLocalBroadcastReceiver(evt); } } }; private Runnable generateEventsECG = new Runnable() { public void run() { if (isRunning) { eventGeneratorHandler.postDelayed(generateEventsECG, SECOND / messagesPerSecond[round][ECG]); ECGEvent evt = new ECGEvent(TAG+"_HR_"+round+"_"+eventNumber, getGMTTime(), "EventGenerator", "EventGenerator", totalRound+"", values.clone(), 200); injectEventToLocalBroadcastReceiver(evt); } } }; public int getRandomNumber(int min, int max) { Random randomGenerator = new Random(); return randomGenerator.nextInt(max-min)+min; } private void injectEventToLocalBroadcastReceiver(Event evt) { Intent i = new Intent(); i.putExtra(Event.PARCELABLE_EXTRA_EVENT_TYPE, evt.getEventType()); i.putExtra(Event.PARCELABLE_EXTRA_EVENT, evt); i.setAction(myHealthHubReceiver); LocalBroadcastManager.getInstance(ctx).sendBroadcast(i); } /*private void injectEvent(Event evt) { if(D)Log.d(TAG, "injectEvent of type: "+evt.getEventType()); Intent i = new Intent(); i.putExtra(Event.PARCELABLE_EXTRA_EVENT_TYPE, evt.getEventType()); i.putExtra(Event.PARCELABLE_EXTRA_EVENT, evt); i.setAction(myHealthHubReceiver); ctx.sendBroadcast(i); }*/ private String getGMTTime() { return (String) android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", new java.util.Date()); } }