Rev.AとRev.Bの変更点

Vuzix M100には、Rev.AとRev.Bの2つのリビジョンがあります。

Rev.AとRev.Bは、ハードウェアレベルで変更があります。 そのため、一部挙動が異なる点にご注意ください。

カメラ

Rev.Bではカメラモジュールが変更されています。 そのためRev.AとRev.Bでカメラが対応しているプレビューサイズと撮影サイズが異なります。

したがって、カメラに設定する解像度等をハードコーディングしていた場合、動作に支障をきたす場合があります。 必ず、Camera#getParameters()から取得したパラメーターを使って設定してください。

@SuppressWarnings("deprecation")
private void showCameraInfo() {
    Log.d(TAG, "supportedPreviewSizes");
    List<Camera.Size> supportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
    for (Camera.Size size : supportedPreviewSizes) {
        Log.d(TAG, String.format(Locale.US, "|%d|%d|", size.width, size.height));
    }
 
    Log.d(TAG, "supportedPictureSizes");
    List<Camera.Size> supportedPictureSizes = mCamera.getParameters().getSupportedPictureSizes();
    for (Camera.Size size : supportedPictureSizes) {
        Log.d(TAG, String.format(Locale.US, "|%d|%d|", size.width, size.height));
    }
 
    Log.d(TAG, "supportedVideoSizes");
    List<Camera.Size> supportedVideoSizes = mCamera.getParameters().getSupportedVideoSizes();
    if (supportedVideoSizes == null) {
        Log.d(TAG, "supportedVideoSizes is null");
    } else {
        for (Camera.Size size : supportedVideoSizes) {
            Log.d(TAG, size.width + ":" + size.height);
        }
    }
}

Rev.Aの対応プレビューサイズ

Width Height
1920 1080
1280 720
960 720
800 480
720 576
720 480
768 576
640 480
640 480
432 240
320 240
352 288
240 160
176 144
160 120
128 96
1088 1920
720 1280
480 800
576 720
576 768
480 720
480 640
288 352
240 320
160 240
144 176
120 160
96 128

Rev.Bの対応プレビューサイズ

Width Height
1920 1080
1280 720
960 720
800 480
720 576
720 480
768 576
864 480
640 480
432 240
320 240
352 288
480 800
576 720
576 768
480 720
480 640

Rev.Aの対応撮影サイズ

Width Height
2592 1944
2592 1728
2592 1458
2304 1296
2240 1344
2160 1440
2112 1728
2048 1536
2016 1512
2000 1600
1920 1080
1600 1200
1280 1024
1152 864
1280 960
1280 720
1024 768
864 480
640 480
432 240
320 240

Rev.Bの対応撮影サイズ

Width Height
1944 1456
1920 1080
1600 1200
1280 1024
1152 864
1280 960
1280 720
1024 768
864 480
640 480
432 240
320 240

センサー

Rev.Bではセンサーモジュールが変更されています。 そのためRev.AとRev.Bでセンサーの精度や、センサー情報を受け取る間隔が異なります。

注意: Rev.Bでのセンサー設定方法

Rev.Bにおいて、SensorManager#getDefaultSensorで取得したSensorオブジェクトにSensorEventListenerを設定した場合、正しくセンサー情報を受け取れない現象が確認されています。

// 正常に動作しない可能性があるパターン
Sensor defaultSensor = sensorManager.getDefaultSensor(sensorType);
sensorManager.registerListener(sensorEventListener,
                               defaultSensor,
                               SensorManager.SENSOR_DELAY_UI)

その場合、getSensorList(sensorType)でセンサー一覧を取得して、SensorEventListenerを設定してください。

// 動作確認済み
List<Sensor> sensorList = sensorManager.getSensorList(sensorType);
for (Sensor sensor : sensorList) {
   sensorManager.registerListener(sensorEventListener,
                                  sensor,
                                  SensorManager.SENSOR_DELAY_UI);
}

Rev.Aに搭載しているセンサー

Name Vendor Version minDelay resolution maximumRange power
MPL Accelerometer Invensense 1 1000 0.039227 19.613300 0.000000
MPL Magnetic Field Invensense 1 10000 0.285000 9830.000000 10.000000
MPL Gyroscope Invensense 1 1000 0.001065 34.906559 5.500000
MPL Raw Gyroscope Invensense 1 1000 0.001065 34.906559 5.500000
MPL Orientation Invensense 1 5000 0.000010 360.000000 15.500000
MPL Gravity Invensense 1 5000 0.000010 9.810000 15.500000
MPL Linear Acceleration Invensense 1 5000 0.039227 19.613300 15.500000
MPL Rotation Vector Invensense 1 5000 0.000010 1.000000 15.500000
Light Sensor Avago Technologies 1 100000 1.000000 30000.000000 0.500000
Proximity Sensor Avago Technologies 1 100000 1.000000 10.000000 0.500000
Gesture Sensor Avago Technologies 1 100000 1.000000 10.000000 0.500000
Rotation Vector Sensor Google Inc. 1 1000 0.000000 1.000000 15.500000
Gravity Sensor Google Inc. 1 1000 0.039227 19.613300 15.500000
Linear Acceleration Sensor Google Inc. 1 1000 0.039227 19.613300 15.500000
Orientation Sensor Google Inc. 1 1000 0.003906 360.000000 15.500000
Corrected Gyroscope Sensor Google Inc. 1 1000 0.001065 34.906559 15.500000

Rev.Bに搭載しているセンサー

Name Vendor Version minDelay resolution maximumRange power
LSM9DS0 3-axis Accelerometer Sensor STMicroelectronics 1 10000 0.000000 156.906403 0.033000
LSM9DS0 3-axis Magnetometer Sensor STMicroelectronics 1 10000 0.000000 1200.000000 0.077000
LSM9DS0 3-axis Gyroscope sensor STMicroelectronics 1 5000 0.000000 34.906586 6.100000
iNemoEngine Orientation sensor STMicroelectronics 1 10000 0.000000 360.000000 6.210000
iNemoEngine Gravity sensor STMicroelectronics 1 10000 0.000000 9.806650 6.210000
iNemoEngine Linear Acceleration sensor STMicroelectronics 1 10000 0.000000 147.099747 6.210000
iNemoEngine Rotation_Vector sensor STMicroelectronics 1 10000 0.000000 34.906586 6.210000
Light Sensor Avago Technologies 1 100000 1.000000 30000.000000 0.500000
Proximity Sensor Avago Technologies 1 100000 1.000000 10.000000 0.500000
Gesture Sensor Avago Technologies 1 100000 1.000000 10.000000 0.500000
Rotation Vector Sensor Google Inc. 1 10000 0.000000 1.000000 6.210000
Gravity Sensor Google Inc. 1 10000 0.000000 19.613300 6.210000
Linear Acceleration Sensor Google Inc. 1 10000 0.000000 19.613300 6.210000
Orientation Sensor Google Inc. 1 10000 0.003906 360.000000 6.210000
Corrected Gyroscope Sensor Google Inc. 1 5000 0.000000 34.906586 6.210000

Rev.AとRev.Bをプログラムから判別する方法

Rev.AとRev.Bは、Buildその他で判別する方法を提供していません。

次のCompatUtilsクラスは、センサーのベンダー情報からM100のリビジョンを判定するサンプルコードです。

package jp.vuzix.util;
 
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
 
public class CompatUtils {
    private static final String TAG = CompatUtils.class.getSimpleName();
 
    private static final String REV_A_ACCLEL_SENSOR_VENDOR = "Invensense";
    private static final String REV_B_ACCLEL_SENSOR_VENDOR = "STMicroelectronics";
 
    @SuppressWarnings("WeakerAccess")
    public enum Revision {
        Unknown,
        A,
        B,
    }
 
    public static Revision getRevision(Context context) {
        SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
        Sensor accelSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
 
        if (REV_A_ACCLEL_SENSOR_VENDOR.equals(accelSensor.getVendor())) {
            return Revision.A;
        } else if (REV_B_ACCLEL_SENSOR_VENDOR.equals(accelSensor.getVendor())) {
            return Revision.B;
        }
 
        return Revision.Unknown;
    }
}