/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * EventGeneratorsConfigPanel.java * * Created on Dec 23, 2010, 6:27:03 PM */ package com.wordpress.salaboy.sensor.ui; import com.intel.bluetooth.BlueCoveConfigProperties; import com.intel.bluetooth.BlueCoveImpl; import com.wordpress.salaboy.model.CityEntities; import com.wordpress.salaboy.messaging.MessageConsumerWorker; import com.wordpress.salaboy.messaging.MessageConsumerWorkerHandler; import com.wordpress.salaboy.model.Ambulance; import com.wordpress.salaboy.model.messages.patient.HeartBeatMessage; import com.wordpress.salaboy.sensor.SensorMessageProducer; import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JComboBox; import motej.Mote; import motej.StatusInformationReport; import motej.event.AccelerometerEvent; import motej.event.AccelerometerListener; import motej.event.CoreButtonEvent; import motej.event.CoreButtonListener; import motej.event.MoteDisconnectedEvent; import motej.event.MoteDisconnectedListener; import motej.event.StatusInformationListener; import motej.request.ReportModeRequest; import com.wordpress.salaboy.sensor.wii.SimpleMoteFinder; /** * @author salaboy * @author esteban */ public class WiiConfigPanel extends javax.swing.JPanel { private SensorMessageProducer messageProducer; private MessageConsumerWorker heartBeatReceivedWorker; private boolean offlineMode; /** Creates new form EventGeneratorsConfigPanel */ public WiiConfigPanel(SensorMessageProducer messageProducer, boolean offlineMode) { this.messageProducer = messageProducer; this.setOfflineMode(offlineMode); initComponents(); JComboBox combo = new JComboBox(); Collection<List<Ambulance>> ambulances = CityEntities.ambulances.values(); for (List<Ambulance> listOfAmbulances : ambulances) { for (Ambulance ambulance : listOfAmbulances) { String item = "Ambulance - " + ambulance.getId(); combo.addItem(item); } } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); btnWiiMoteLookup = new javax.swing.JButton(); btnStopWiiMoteLookup = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); wiiMoteIdjTextField = new javax.swing.JTextField(); btnListDevices = new javax.swing.JButton(); jButton1 = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); outputjTextArea = new javax.swing.JTextArea(); setName("Wii Mote"); // NOI18N jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Wii Mote Bindings", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); btnWiiMoteLookup.setText("Start WiiMote Binding"); btnWiiMoteLookup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnWiiMoteLookupActionPerformed(evt); } }); btnStopWiiMoteLookup.setText("Stop WiiMote"); btnStopWiiMoteLookup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnStopWiiMoteLookupActionPerformed(evt); } }); jLabel1.setText("Wii Mote Bluetooth Id: "); wiiMoteIdjTextField.setText("8C56C54923CA"); btnListDevices.setText("List Devices"); btnListDevices.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnListDevicesActionPerformed(evt); } }); jButton1.setText("Clear"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(btnListDevices, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(wiiMoteIdjTextField)) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() .addComponent(btnWiiMoteLookup) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(btnStopWiiMoteLookup, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1))) .addContainerGap(74, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(btnListDevices) .addGap(11, 11, 11) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(wiiMoteIdjTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnWiiMoteLookup) .addComponent(btnStopWiiMoteLookup) .addComponent(jButton1)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); outputjTextArea.setColumns(20); outputjTextArea.setRows(5); jScrollPane2.setViewportView(outputjTextArea); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 421, Short.MAX_VALUE) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); }// </editor-fold>//GEN-END:initComponents private void btnWiiMoteLookupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnWiiMoteLookupActionPerformed // TODO add your handling code here: initWiiMote(); }//GEN-LAST:event_btnWiiMoteLookupActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed // TODO add your handling code here: outputjTextArea.setText(""); }//GEN-LAST:event_jButton1ActionPerformed private void btnStopWiiMoteLookupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStopWiiMoteLookupActionPerformed // TODO add your handling code here: if (mote != null) { mote.disconnect(); } if (simpleMoteFinder != null) { simpleMoteFinder.stopFind(); } BlueCoveImpl.shutdown(); BlueCoveImpl.shutdownThreadBluetoothStack(); outputjTextArea.insert(System.currentTimeMillis() + " - Wii mote Disconnected By the user", 0); }//GEN-LAST:event_btnStopWiiMoteLookupActionPerformed private void btnListDevicesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnListDevicesActionPerformed // TODO add your handling code here: listDevices(); }//GEN-LAST:event_btnListDevicesActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnListDevices; private javax.swing.JButton btnStopWiiMoteLookup; private javax.swing.JButton btnWiiMoteLookup; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea outputjTextArea; private javax.swing.JTextField wiiMoteIdjTextField; // End of variables declaration//GEN-END:variables private Mote mote = null; private SimpleMoteFinder simpleMoteFinder; private void listDevices() { } private void initWiiMote() { System.setProperty(BlueCoveConfigProperties.PROPERTY_JSR_82_PSM_MINIMUM_OFF, "true"); simpleMoteFinder = new SimpleMoteFinder(); mote = simpleMoteFinder.findMote(wiiMoteIdjTextField.getText()); if (mote == null) { outputjTextArea.insert(System.currentTimeMillis() + " - Wii mote not found! \n", 0); } else { outputjTextArea.insert(System.currentTimeMillis() + " - Wii mote found! \n", 0); } AccelerometerListener<Mote> listener = new AccelerometerListener<Mote>() { @Override public void accelerometerChanged(AccelerometerEvent<Mote> evt) { if (offlineMode){ return; } if (evt.getY() > 225) { try { messageProducer.informMessage(evt.getY() - 235); } catch (Exception ex) { Logger.getLogger(WiiConfigPanel.class.getName()).log(Level.SEVERE, null, ex); } } } }; MoteDisconnectedListener<Mote> disconnectedListener = new MoteDisconnectedListener<Mote>() { @Override public void moteDisconnected(MoteDisconnectedEvent<Mote> mde) { outputjTextArea.insert(System.currentTimeMillis() + " - Wii MOTE DISCONECTED!!!!\n", 0); } }; CoreButtonListener buttonListener = new CoreButtonListener() { public void buttonPressed(CoreButtonEvent cbe) { if (cbe.isButtonAPressed()) { outputjTextArea.insert(System.currentTimeMillis() + " - Button A Pressed!\n", 0); } if (cbe.isButtonBPressed()) { outputjTextArea.insert(System.currentTimeMillis() + " - Button B Pressed!\n", 0); } } }; StatusInformationListener statusListener = new StatusInformationListener() { public void statusInformationReceived(StatusInformationReport sir) { } }; //mote.addStatusInformationListener(statusListener); mote.setReportMode(ReportModeRequest.DATA_REPORT_0x31); mote.addMoteDisconnectedListener(disconnectedListener); mote.addAccelerometerListener(listener); mote.addCoreButtonListener(buttonListener); } private void initWorkers() { if (this.offlineMode){ return; } //Heart Beat Received heartBeatReceivedWorker = new MessageConsumerWorker("heartBeatWiiMote", new MessageConsumerWorkerHandler<HeartBeatMessage>() { @Override public void handleMessage(HeartBeatMessage message) { outputjTextArea.insert(System.currentTimeMillis() + " - sended " + message.getHeartBeatValue() + " heartbeat\n", 0); } }); heartBeatReceivedWorker.start(); } private void stopWorkers() { if(heartBeatReceivedWorker != null ){ heartBeatReceivedWorker.stopWorker(); heartBeatReceivedWorker = null; } } public void setOfflineMode(boolean offlineMode) { this.offlineMode = offlineMode; if (this.offlineMode){ this.stopWorkers(); } else{ this.stopWorkers(); this.initWorkers(); } } }