@Override public void addSensor(int deviceID, int sensor, int sampleInterval) throws RemoteException { synchronized (mDeviceMap) { synchronized (mSeedNodeMap) { Device device = mDeviceMap.get(deviceID); device.addSensor(sensor, sampleInterval); SeedNode existingSeed = mSeedNodeMap.get(sensor); if (existingSeed != null) { existingSeed.attachDevice(device); existingSeed.startSensor(); } else { SeedNode seed = new SeedNode(SensorType.getSensorName(sensor), sensor, device); mSeedNodeMap.put(sensor, seed); mNodeNameMap.put("|" + SensorType.getSensorName(sensor), seed); } DebugHelper.log(TAG, "Added sensor type: " + sensor); /*for (Map.Entry<Integer, SeedNode> entry: mSeedNodeMap.entrySet()) { sensor = entry.getKey(); SeedNode node = entry.getValue(); DebugHelper.log(TAG, node.getClass().getName() + ": " + sensor + " device: " + node.getAttachedDevice()); }*/ } } }
@Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_PUSH_DATA: Bundle bundle = (Bundle) msg.obj; int sensor = bundle.getInt(BUNDLE_SENSOR); SeedNode seed = mSeedNodeMap.get(sensor); if (seed == null) { // throw new UnsupportedOperationException("No SeedNode for SensorType: " + sensor); DebugHelper.log(TAG, "No SeedNode for SensorType: " + sensor); return; } int deviceID = bundle.getInt(BUNDLE_DEVICE_ID); if (seed.getAttachedDevice() != mDeviceMap.get(deviceID)) { DebugHelper.log( TAG, "Unmatched seed node and attached device(sensor: " + sensor + ", attempted device ID: " + deviceID); return; } String type = bundle.getString(BUNDLE_TYPE); int length = bundle.getInt(BUNDLE_LENGTH); String name = SensorType.getSensorName(sensor); long timestamp = bundle.getLong(BUNDLE_TIMESTAMP); // show notification showNotification(sensor, name); if (type.equals("double[]")) { seed.input(name, type, bundle.getDoubleArray(BUNDLE_DATA), length, timestamp); } else if (type.equals("double")) { seed.input(name, type, bundle.getDouble(BUNDLE_DATA), length, timestamp); } else if (type.equals("int[]")) { seed.input(name, type, bundle.getIntArray(BUNDLE_DATA), length, timestamp); } else if (type.equals("int")) { seed.input(name, type, bundle.getInt(BUNDLE_DATA), length, timestamp); } else if (type.equals("String")) { seed.input(name, type, bundle.getString(BUNDLE_DATA), length, timestamp); } else { throw new IllegalArgumentException("Unknown data_type: " + type); } break; default: super.handleMessage(msg); break; } }
@Override public void removeDevice(int deviceID) throws RemoteException { synchronized (mDeviceMap) { synchronized (mSeedNodeMap) { Device removedDevice = mDeviceMap.remove(deviceID); if (removedDevice != null) { Sensor[] sensors = removedDevice.getSensorList(); for (Sensor sensor : sensors) { SeedNode seed = mSeedNodeMap.get(sensor.getSensorID()); if (seed.isConnected()) { seed.detachDevice(); } else { mSeedNodeMap.remove(sensor.getSensorID()); mNodeNameMap.remove("|" + SensorType.getSensorName(sensor.getSensorID())); } } DebugHelper.log(TAG, "Removed device ID: " + deviceID); mNotification.showNotificationNow("Removed device ID " + deviceID); } } } // print seed map DebugHelper.log(TAG, "Printing mSeedNodeMap.."); for (Map.Entry<Integer, SeedNode> entry : mSeedNodeMap.entrySet()) { int sensor = entry.getKey(); SeedNode node1 = entry.getValue(); DebugHelper.log( TAG, node1.getClass().getName() + ": " + sensor + " device: " + node1.getAttachedDevice()); } DebugHelper.log(TAG, "Done."); // print node name map DebugHelper.log(TAG, "Printing mNodeNameMap.."); for (Map.Entry<String, DataFlowNode> entry : mNodeNameMap.entrySet()) { String nodeName = entry.getKey(); DataFlowNode node2 = entry.getValue(); DebugHelper.log(TAG, nodeName + ": " + node2.getClass().getName()); } DebugHelper.log(TAG, "Done."); }