/** Connect from the RBNB * */ private void disconnect() { if ((cacheSize != 0 || archiveSize != 0) && source != null) { source.Detach(); // close and keep cache and archive } else if (source != null) { // they are both zero; close and scrap source.CloseRBNBConnection(); } else { } source = null; connected = false; }
/** @param args the command line arguments */ @SuppressWarnings("static-access") public static void main(String[] args) { String hostname = "localhost:3333"; String portName = "/dev/tty.KeySerial1"; String srcName = "ADXL-RBNB Accelerometer"; String[] chanNames = {"X", "Y"}; int[] chanIdx = {0, 1}; double[] vals = {0, 0}; String unitsMetadata = "units=G,scale=1,offset=0"; Source source; ChannelMap cmap; int cacheSize = 10240; // ! @todo parse from command line int archiveSize = cacheSize * 10; // ! @todo parse from command line int idx; int chanCount = 2; ADXL chip; // Setup interrupt handler DoHook(); System.out.println("Opening serial port"); chip = new ADXL(); if (chip.initialize(portName) == 0) { portConnected = true; System.out.println("Serial port initialized OK"); } else { System.out.println("Error opening serial port"); return; } // RBNB connection setup try { System.out.println("Opening connection to RBNB on " + hostname); // Create both a source and a sink, connect both: source = new Source(cacheSize, "append", archiveSize); source.OpenRBNBConnection(hostname, srcName); DTconnected = true; System.out.println("OK."); // Setup channel map - names of channels, units cmap = new ChannelMap(); for (idx = 0; idx < chanCount; idx++) { chanIdx[idx] = cmap.Add(chanNames[idx]); // Hardwired units (G) for all three sources cmap.PutUserInfo(chanIdx[idx], unitsMetadata); // Not sure if we still need the MIME type or not cmap.PutMime(chanIdx[idx], "application/octet-stream"); } source.Register(cmap); source.Flush(cmap); } // We don't distinguish between errors in setup phase, just bail out catch (SAPIException se) { System.out.println("Error on Turbine - not connected"); DTconnected = false; return; } // ******************************************************************** // Main data loop: read, scale, write. try { System.out.println("Turbine connected, running. Press control-c to end"); // Loop - runs until control-c or error. do { for (idx = 0; idx < chanCount; idx++) chanIdx[idx] = cmap.Add(chanNames[idx]); // Read the data from the accelerometer vals = chip.chipRead(); // Timestamp all channels with client-side time cmap.PutTimeAuto("timeofday"); for (idx = 0; idx < chanCount; idx++) { double valBuf[] = {vals[idx]}; cmap.PutDataAsFloat64(cmap.GetIndex(chanNames[idx]), valBuf); } source.Flush(cmap); cmap.Clear(); Thread.sleep(20); } while (!ctrlC); } catch (SAPIException mse) { System.out.println("Error saving data!"); mse.printStackTrace(); } catch (InterruptedException ie) { System.out.println("Interrupted, exiting."); } // Shutdown and exit if (portConnected) { chip.closePort(chip.serialPort); } if (DTconnected) { System.out.println("Closing RBNB connection"); // Tell RBNB to keep the data once we close source.Detach(); source.CloseRBNBConnection(); } System.out.println("Done, exiting."); return; }