|  | /* | 
|  | * 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); | 
|  | }; |