@Override
  public void onSensorChanged(final SensorEvent se) {
    // se.timestamp returns a time in nanoseconds. Why divide it by 1000? The timestamps ought to be
    // in nanoseconds, not microseconds...
    long timestamp = (long) se.timestamp / 1000;
    this.accuracy = se.accuracy;

    if (se.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
      if (debug) Log.e(tag, "Sensor not accelerometer: " + se.sensor.getType());
      return;
    }

    // save the last vector
    prev_vector.set(curr_vector);
    if (prev_vector.getTimeStamp() <= 0) prev_vector.setTimeStamp(timestamp);
    prev_ori = curr_ori;

    /**
     * All values are in SI units (m/s^2) values[0]: Acceleration minus Gx on the x-axis values[1]:
     * Acceleration minus Gy on the y-axis values[2]: Acceleration minus Gz on the z-axis
     */
    curr_vector.set(se.values[0], se.values[1], se.values[2]);
    curr_vector.setTimeStamp(timestamp);

    // Orientation between position at timestamp x and timestamp (x-1)
    // Note: The first iteration, prev_vector will be 0;
    curr_ori = curr_vector.orientation(prev_vector);

    vectorList.add(curr_vector.copy());

    // db.addDataItem(this.deID, curr_vector.getTimeStamp(), se.accuracy, curr_vector.getX(),
    // curr_vector.getY(), curr_vector.getZ(), curr_vector.getRSS());

  }