@Override
 public void untimestampedDataReceived(long curr_system_timestamp, Object kind) {
   if (!timestamped && (kind.getClass() == AHRS.DeviceDataType.class)) {
     double process_value;
     switch (untimestamped_src) {
       case RAW_GYRO_X:
         process_value = navx_device.getRawGyroX();
         break;
       case RAW_GYRO_Y:
         process_value = navx_device.getRawGyroY();
         break;
       case RAW_GYRO_Z:
         process_value = navx_device.getRawGyroZ();
         break;
       case RAW_ACCEL_X:
         process_value = navx_device.getRawAccelX();
         break;
       case RAW_ACCEL_Y:
         process_value = navx_device.getRawAccelY();
         break;
       case RAW_MAG_X:
         process_value = navx_device.getRawMagX();
         break;
       case RAW_MAG_Y:
         process_value = navx_device.getRawMagY();
         break;
       case RAW_MAG_Z:
         process_value = navx_device.getRawMagZ();
         break;
       default:
         process_value = 0.0;
         break;
     }
     int num_missed_samples = 0; /* TODO */
     last_system_timestamp = curr_system_timestamp;
     double output = this.stepController(process_value, num_missed_samples);
     synchronized (sync_event) {
       sync_event.notify();
     }
   }
 }