diff options
Diffstat (limited to 'amber/camera/libhdrplusclient/include/EaselManagerClient.h')
-rw-r--r-- | amber/camera/libhdrplusclient/include/EaselManagerClient.h | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/amber/camera/libhdrplusclient/include/EaselManagerClient.h b/amber/camera/libhdrplusclient/include/EaselManagerClient.h new file mode 100644 index 0000000..682cb67 --- /dev/null +++ b/amber/camera/libhdrplusclient/include/EaselManagerClient.h @@ -0,0 +1,155 @@ +/* + * Copyright 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef EASEL_MANAGER_CLIENT_H +#define EASEL_MANAGER_CLIENT_H + +#include <future> + +#include <utils/Errors.h> +#include <utils/Mutex.h> + +#define FW_VER_SIZE 24 + +namespace android { + +class EaselManagerClientListener; +class HdrPlusClient; +class HdrPlusClientListener; + +class EaselManagerClient { +public: + static std::unique_ptr<EaselManagerClient> create(); + + EaselManagerClient() {}; + virtual ~EaselManagerClient() {}; + + /* + * Return if Easel is present on the device. + * + * If Easel is not present, all other calls to HdrPlusClient are invalid. + */ + virtual bool isEaselPresentOnDevice() const = 0; + + /* + * Open Easel manager client. + * + * This will power on Easel and initialize Easel manager client. + */ + virtual status_t open() = 0; + + /* + * Suspend Easel. + * + * Put Easel on suspend mode. + */ + virtual status_t suspend() = 0; + + /* + * Resume Easel. + * + * Resume Easel from suspend mode. + * + * listener will be invoked for Easel status. + */ + virtual status_t resume(EaselManagerClientListener *listener) = 0; + + /* + * Retrieve Easel firmware version. + * + * Firmware version string is added to image exif + */ + virtual status_t getFwVersion(char *fwVersion) = 0; + + /* + * Start MIPI with an output pixel lock rate for a camera. + * + * Can be called when Easel is powered on or resumed, for Easel to start sending sensor data + * to AP. + * + * cameraId is the camera ID to start MIPI for. + * outputPixelClkHz is the output pixel rate. + * enableCapture is whether to enable MIPI capture on Easel. + */ + virtual status_t startMipi(uint32_t cameraId, uint32_t outputPixelClkHz, + bool enableCapture) = 0; + + /* + * Stop MIPI for a camera. + * + * cameraId is the camera is ID to stop MIPI for. + */ + virtual status_t stopMipi(uint32_t cameraId) = 0; + + /* + * Open an HDR+ client asynchronously. + * + * Open an HDR+ client asynchronouly. When an HDR+ client is opened, + * HdrPlusClientListener::onOpened() will be invoked with the created HDR+ client. If opening + * an HDR+ client failed, HdrPlusClientListener::onOpenFailed() will be invoked with the error. + * If this method returns an error, HdrPlusClientListener::onOpenFailed() will not be invoked. + * + * listener is an HDR+ client listener. + * + * Returns: + * OK: if initiating opening an HDR+ client asynchronously was successful. + * HdrPlusClientListener::onOpened() or HdrPlusClientListener::onOpenFailed() + * will be invoked when opening an HDR+ client completed. + * ALREADY_EXISTS: if there is already a pending HDR+ client being opened. + */ + virtual status_t openHdrPlusClientAsync(HdrPlusClientListener *listener) = 0; + + /* + * Open an HDR+ client synchronously and block until it completes. + * + * listener is an HDR+ client listener. + * client is an output parameter for created HDR+ client. + * + * Returns: + * OK: on success. + * -EEXIST: if an HDR+ client is already opened. + * -ENODEV: if opening an HDR+ failed due to a serious error. + */ + virtual status_t openHdrPlusClient(HdrPlusClientListener *listener, + std::unique_ptr<HdrPlusClient> *client) = 0; + + /* + * Close an HDR+ client. + * + * client is the HDR+ client to be closed. + */ + virtual void closeHdrPlusClient(std::unique_ptr<HdrPlusClient> client) = 0; + +private: + // Disallow copy and assign. + EaselManagerClient(const EaselManagerClient&) = delete; + void operator=(const EaselManagerClient&) = delete; +}; + + +/* + * EaselManagerClientListener defines callbacks that will be invoked by EaselManagerClient. + */ +class EaselManagerClientListener { +public: + virtual ~EaselManagerClientListener() {}; + + // Invoked when Easel encountered a fatal error. Client should shut down Easel. + virtual void onEaselFatalError(std::string errMsg) = 0; +}; + +} // namespace android + +#endif // EASEL_MANAGER_CLIENT_H |