blob: 05d57e49dc6e3f7d4418558fb060d222a1aeaa99 [file] [log] [blame]
/*
* Copyright (C) 2016 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 ANDROID_VEHICLE_RVC_INTERFACE_H
#define ANDROID_VEHICLE_RVC_INTERFACE_H
#include <stdint.h>
#include <sys/cdefs.h>
#include <sys/types.h>
#include <errno.h>
#include <hardware/hardware.h>
#include <cutils/native_handle.h>
__BEGIN_DECLS
/*****************************************************************************/
#define VEHICLE_RVC_HEADER_VERSION 1
#define VEHICLE_RVC_MODULE_API_VERSION_1_0 HARDWARE_MODULE_API_VERSION(1, 0)
#define VEHICLE_RVC_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION_2(1, 0, VEHICLE_RVC_HEADER_VERSION)
/**
* Vehicle Rearview Camera to provide interfaces for controlling
* the RVC.
*/
/**
* The id of this module
*/
#define VEHICLE_RVC_HARDWARE_MODULE_ID "vehicle_rvc"
/**
* Name of the vehicle device to open
*/
#define VEHICLE_RVC_HARDWARE_DEVICE "vehicle_rvc_hw_device"
/**
* Describes the current state of RVC module
*/
typedef struct {
uint32_t overlay_on;
uint32_t rvc_on;
} vehicle_rvc_state_t;
/**
* Describes a rectangle for cropping and positioning objects
* uint32_t left Position of left border of rectangle
* uint32_t top Position of top border of rectangle
* uint32_t width Width of rectangle
* uint32_t height Height of rectangle
*/
typedef struct {
uint32_t left;
uint32_t top;
uint32_t width;
uint32_t height;
} vehicle_rvc_rect_t;
/**
* Bitmask of features supported by RVC module
*/
enum vehicle_rvc_config_flag {
ANDROID_OVERLAY_SUPPORT_FLAG = 0x1,
CAMERA_CROP_SUPPORT_FLAG = 0x2,
CAMERA_POSITIONING_SUPPORT_FLAG = 0x4
};
typedef struct {
uint32_t capabilites_flags;
uint32_t camera_width;
uint32_t camera_height;
uint32_t display_width;
uint32_t display_height;
} vehicle_rvc_cap_t;
/************************************************************************************/
/**
* Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
* and the fields of this data structure must begin with hw_module_t
* followed by module specific information.
*/
typedef struct {
struct hw_module_t common;
} vehicle_rvc_module_t;
typedef struct vehicle_rvc_device_t {
struct hw_device_t common;
/**
* Returns the capabilities of this RVC.
* @param device
* @return
*/
int (*get_capabilities)(struct vehicle_rvc_device_t *device, vehicle_rvc_cap_t *cap);
/**
* Gets the current RVC crop settings.
* @param device
* @return
*/
int (*get_rvc_crop)(struct vehicle_rvc_device_t *device, vehicle_rvc_rect_t *rect);
/**
* Sets the RVC crop.
* @param device
* @param rect Area of RVC camera input to crop
* @return
*/
int (*set_rvc_crop)(struct vehicle_rvc_device_t *device, const vehicle_rvc_rect_t *rect);
/**
* Gets position of the RVC on the dispaly.
* @param device
* @param rect Area of display the RVC will appear when on
* @return
*/
int (*get_rvc_position)(struct vehicle_rvc_device_t *device, vehicle_rvc_rect_t *rect);
/**
* Sets position of the RVC on the display.
* @param device
* @param rect
* @return
*/
int (*set_rvc_position)(struct vehicle_rvc_device_t *device, const vehicle_rvc_rect_t *rect);
/**
* Gets the current camera state.
* @param device
* @return
*/
int (*get_camera_state)(struct vehicle_rvc_device_t *device, vehicle_rvc_state_t *state);
/**
* Sets the camera state. Calling this function will generate a
* callback notifying the user that the camera state has
* changed.
* @param device
* @return
*/
int (*set_camera_state)(struct vehicle_rvc_device_t *device, const vehicle_rvc_state_t *state);
} vehicle_rvc_device_t;
__END_DECLS
#endif // ANDROID_VEHICLE_RVC_INTERFACE_H