67 lines
1.7 KiB
67 lines
1.7 KiB
/*
|
|
* Copyright (C) 2018 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.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
#define MAKE_TAG_CONSTANT(A, B, C, D) (((A) << 24) | ((B) << 16) | ((C) << 8) | (D))
|
|
|
|
#define HARDWARE_MODULE_TAG MAKE_TAG_CONSTANT('H', 'W', 'M', 'T')
|
|
#define HARDWARE_DEVICE_TAG MAKE_TAG_CONSTANT('H', 'W', 'D', 'T')
|
|
|
|
#define HARDWARE_MAKE_API_VERSION(maj, min) ((((maj)&0xff) << 8) | ((min)&0xff))
|
|
|
|
#define HARDWARE_HAL_API_VERSION HARDWARE_MAKE_API_VERSION(1, 0)
|
|
|
|
struct hw_module_methods_t;
|
|
|
|
struct hw_module_t {
|
|
uint32_t tag;
|
|
uint16_t module_api_version;
|
|
uint16_t hal_api_version;
|
|
const char* id;
|
|
const char* name;
|
|
const char* author;
|
|
hw_module_methods_t* methods;
|
|
void* dso;
|
|
#ifdef __LP64__
|
|
uint64_t reserved[32 - 7];
|
|
#else
|
|
uint32_t reserved[32 - 7];
|
|
#endif
|
|
};
|
|
|
|
struct hw_device_t {
|
|
uint32_t tag;
|
|
uint32_t version;
|
|
struct hw_module_t* module;
|
|
#ifdef __LP64__
|
|
uint64_t reserved[12];
|
|
#else
|
|
uint32_t reserved[12];
|
|
#endif
|
|
int (*close)(hw_device_t* device);
|
|
};
|
|
|
|
struct hw_module_methods_t {
|
|
int (*open)(const hw_module_t*, const char*, hw_device_t**);
|
|
};
|
|
|
|
extern "C" {
|
|
int hw_get_module(const char* id, const hw_module_t** module);
|
|
};
|