1875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik/* 2875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * Copyright (C) 2016 The Android Open Source Project 3875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * 4875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * Licensed under the Apache License, Version 2.0 (the "License"); 5875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * you may not use this file except in compliance with the License. 6875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * You may obtain a copy of the License at 7875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * 8875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * http://www.apache.org/licenses/LICENSE-2.0 9875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * 10875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * Unless required by applicable law or agreed to in writing, software 11875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * distributed under the License is distributed on an "AS IS" BASIS, 12875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * See the License for the specific language governing permissions and 14875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * limitations under the License. 15875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik */ 16875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 17875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikpackage android.car.hardware.camera; 18875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 19875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.annotation.SystemApi; 20875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.car.Car; 21875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.car.CarManagerBase; 22235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport android.car.CarNotConnectedException; 23875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.content.Context; 24875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.os.IBinder; 25875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.os.RemoteException; 26875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikimport android.util.Log; 27875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 28875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik/** 29875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * API for controlling camera system in cars 30280b5721254e5ac974404e02e7589f17f560d1f9Vitalii Tomkiv * @hide 31875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik */ 32875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik@SystemApi 33875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paikpublic class CarCameraManager implements CarManagerBase { 34875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public final static boolean DBG = true; 35875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public final static String TAG = CarCameraManager.class.getSimpleName(); 36875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 37875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik // Camera capabilities flags 38875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public static final int ANDROID_OVERLAY_SUPPORT_FLAG = 0x1; 39875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public static final int CAMERA_CROP_SUPPORT_FLAG = 0x2; 40875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public static final int CAMERA_POSITIONING_SUPPORT_FLAG = 0x4; 41875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 42875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik // Camera types 43875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public static final int CAR_CAMERA_TYPE_NONE = 0; 44875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public static final int CAR_CAMERA_TYPE_RVC = 1; 45875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 46875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik private int[] mCameraList; 47875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik private final ICarCamera mService; 48875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 49875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik /** 50875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * Get an instance of the CarCameraManager. 51875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * 52875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * Should not be obtained directly by clients, use {@link Car.getCarManager()} instead. 53875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * @hide 54875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik */ 55235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv public CarCameraManager(IBinder service, Context context) throws CarNotConnectedException{ 56875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik mService = ICarCamera.Stub.asInterface(service); 57875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik try { 58875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik mCameraList = mService.getCameraList(); 59875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } catch (RemoteException e) { 60875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik Log.e(TAG, "Exception in getCameraList", e); 61875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik mCameraList = null; 62235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv throw new CarNotConnectedException(e); 63875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 64875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 65875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 66875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik /** 67875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * 68875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * @return Array of CAR_CAMERA_TYPE_* telling which cameras are present 69875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik */ 70875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public int[] getCameraList() { 71875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik return mCameraList; 72875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 73875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 74875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik /** 75875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * 76875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * @param cameraType Camera type to query capabilites 77875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik * @return Bitmask of camera capabilities available for this device 78235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv * @throws CarNotConnectedException 79875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik */ 80235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv public int getCameraCapabilities(int cameraType) throws CarNotConnectedException { 81875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik int capabilities; 82875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik try { 83875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik capabilities = mService.getCapabilities(cameraType); 84875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } catch (RemoteException e) { 85875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik Log.e(TAG, "Exception in getCameraCapabilities", e); 86235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkiv throw new CarNotConnectedException(e); 87875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 88875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik return capabilities; 89875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 90875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 91875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public CarCamera openCamera(int cameraType) { 92875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik CarCamera camera = null; 93875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 94875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik // Find cameraType in the list of available cameras 95875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik for (int i : mCameraList) { 96875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik if(i == cameraType) { 97875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik camera = new CarCamera(mService, cameraType); 98875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik break; 99875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 100875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 101875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik return camera; 102875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 103875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 104875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public void closeCamera(CarCamera camera) { 105875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik // TODO: What should we do? 106875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 107875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik 108875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik /** @hide */ 109875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik @Override 110875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik public void onCarDisconnected() { 111875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik } 112875616c52be0a5a4d3aa348e9dcfd90e54789912Steve Paik} 113