Core dumps were disabled at that moment.
My application mainly collects sensor data every one minute.
Code: Select all
package sensors.phidget;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CopyOnWriteArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sensors.Sensor;
import com.phidgets.InterfaceKitPhidget;
import com.phidgets.PhidgetException;
import com.phidgets.event.SensorChangeEvent;
import com.phidgets.event.SensorChangeListener;
import config.SensorSrvConfig;
public class SensorController extends TimerTask implements SensorChangeListener {
static Logger logger = LoggerFactory.getLogger(SensorController.class);
private InterfaceKitPhidget sensorBoard = null;
private static SensorController instance = null;
private List<SensorListener> listeners = null;
static Timer timer;
private SensorController() {
logger.info("Starting sensors' board ...");
try {
sensorBoard = new InterfaceKitPhidget();
sensorBoard.open(SensorSrvConfig.board_ID);
sensorBoard.waitForAttachment();
for (int i = 0; i < SensorSrvConfig.sensors.size(); i++) {
sensorBoard.setSensorChangeTrigger(i,
SensorSrvConfig.board_sensitivity);
logger.info("Expecting sensor at socket {} ", i);
}
logger.info("Starting sensors' board was started");
listeners = new CopyOnWriteArrayList<SensorListener>();
} catch (PhidgetException e) {
logger.error(e.getMessage());
}
}
public static synchronized void start() {
if (instance == null) {
instance = new SensorController();
if (SensorSrvConfig.pull_enabled) {
logger.debug("Scheduling sensors' values' pulling timer");
timer = new Timer("SENSOR_TIMER");
timer.schedule(instance, 0, SensorSrvConfig.pull_interval);
} else {
instance.sensorBoard.addSensorChangeListener(instance);
}
} else {
logger.warn("Already started!");
}
}
public static synchronized void shutdown() {
if (instance != null) {
if (timer != null) {
logger.debug("Canceling timer & timer task");
instance.cancel();
timer.cancel();
}
if (!SensorSrvConfig.pull_enabled) {
instance.sensorBoard.removeSensorChangeListener(instance);
}
instance.listeners.removeAll(instance.listeners);
instance.shutdownInstance();
}
}
public static synchronized void registerListener(SensorListener listener) {
if (instance != null) {
instance.listeners.add(listener);
}
}
public static synchronized void deregisterListener(SensorListener listener) {
if (instance != null) {
instance.listeners.remove(listener);
}
}
private void shutdownInstance() {
logger.info("Shutting down sensors' board");
try {
sensorBoard.close();
logger.info("Sensors' board was shutdown");
} catch (PhidgetException e) {
logger.error(e.getMessage());
}
}
public void sensorChanged(SensorChangeEvent event) {
List<SensorEvent> events = new ArrayList<SensorEvent>();
Sensor sensor = SensorSrvConfig.sensors.get(event.getIndex());
SensorEvent n_event = new SensorEvent(sensor, event.getValue());
events.add(n_event);
for (SensorListener listener : listeners) {
listener.sensorChanged(events);
}
}
@Override
public void run() {
logger.debug("{}", Thread.currentThread().getName());
List<SensorEvent> events = new ArrayList<SensorEvent>();
for (Sensor sensor : SensorSrvConfig.sensors.values()) {
try {
SensorEvent n_event = new SensorEvent(sensor,
sensorBoard.getSensorValue(sensor.getSocket()));
events.add(n_event);
} catch (PhidgetException e) {
logger.error(e.getMessage());
}
}
for (SensorListener listener : listeners) {
listener.sensorChanged(events);
}
}
}
So basically I call
Code: Select all
sensorBoard.getSensorValue(sensor.getSocket()));
every one minute and I store the value somewhere.