Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2012 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | #include <cstddef> |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 18 | #include <hardware/hardware.h> |
| 19 | #include <hardware/sensors.h> |
| 20 | #include <hardware/fb.h> |
| 21 | #include <hardware/hwcomposer.h> |
| 22 | #include <hardware/gralloc.h> |
| 23 | #include <hardware/consumerir.h> |
| 24 | #include <hardware/camera_common.h> |
| 25 | #include <hardware/camera3.h> |
| 26 | |
| 27 | //Ideally this would print type.member instead we need to rely on the line number from the output |
| 28 | template <size_t actual, size_t expected> void check_member(void) { |
| 29 | static_assert(actual == expected, ""); |
| 30 | } |
| 31 | |
| 32 | #ifdef __LP64__ |
| 33 | #define CHECK_MEMBER_AT(type, member, off32, off64) \ |
| 34 | check_member<offsetof(type, member), off64>() |
| 35 | #else |
| 36 | #define CHECK_MEMBER_AT(type, member, off32, off64) \ |
| 37 | check_member<offsetof(type, member), off32>() |
| 38 | #endif |
| 39 | |
| 40 | void CheckOffsets(void) { |
| 41 | //Types defined in hardware.h |
| 42 | CHECK_MEMBER_AT(hw_module_t, tag, 0, 0); |
| 43 | CHECK_MEMBER_AT(hw_module_t, module_api_version, 4, 4); |
| 44 | CHECK_MEMBER_AT(hw_module_t, hal_api_version, 6, 6); |
| 45 | CHECK_MEMBER_AT(hw_module_t, id, 8, 8); |
| 46 | CHECK_MEMBER_AT(hw_module_t, name, 12, 16); |
| 47 | CHECK_MEMBER_AT(hw_module_t, author, 16, 24); |
| 48 | CHECK_MEMBER_AT(hw_module_t, methods, 20, 32); |
| 49 | CHECK_MEMBER_AT(hw_module_t, dso, 24, 40); |
| 50 | CHECK_MEMBER_AT(hw_module_t, reserved, 28, 48); |
| 51 | |
| 52 | CHECK_MEMBER_AT(hw_device_t, tag, 0, 0); |
| 53 | CHECK_MEMBER_AT(hw_device_t, version, 4, 4); |
| 54 | CHECK_MEMBER_AT(hw_device_t, module, 8, 8); |
| 55 | CHECK_MEMBER_AT(hw_device_t, reserved, 12, 16); |
| 56 | CHECK_MEMBER_AT(hw_device_t, close, 60, 112); |
| 57 | |
| 58 | //Types defined in sensors.h |
| 59 | CHECK_MEMBER_AT(sensors_vec_t, v, 0, 0); |
| 60 | CHECK_MEMBER_AT(sensors_vec_t, x, 0, 0); |
| 61 | CHECK_MEMBER_AT(sensors_vec_t, y, 4, 4); |
| 62 | CHECK_MEMBER_AT(sensors_vec_t, z, 8, 8); |
| 63 | CHECK_MEMBER_AT(sensors_vec_t, azimuth, 0, 0); |
| 64 | CHECK_MEMBER_AT(sensors_vec_t, pitch, 4, 4); |
| 65 | CHECK_MEMBER_AT(sensors_vec_t, roll, 8, 8); |
| 66 | CHECK_MEMBER_AT(sensors_vec_t, status, 12, 12); |
| 67 | CHECK_MEMBER_AT(sensors_vec_t, reserved, 13, 13); |
| 68 | |
| 69 | CHECK_MEMBER_AT(sensors_event_t, version, 0, 0); |
| 70 | CHECK_MEMBER_AT(sensors_event_t, sensor, 4, 4); |
| 71 | CHECK_MEMBER_AT(sensors_event_t, type, 8, 8); |
| 72 | CHECK_MEMBER_AT(sensors_event_t, reserved0, 12, 12); |
| 73 | CHECK_MEMBER_AT(sensors_event_t, timestamp, 16, 16); |
| 74 | CHECK_MEMBER_AT(sensors_event_t, data, 24, 24); |
| 75 | CHECK_MEMBER_AT(sensors_event_t, acceleration, 24, 24); |
| 76 | CHECK_MEMBER_AT(sensors_event_t, magnetic, 24, 24); |
| 77 | CHECK_MEMBER_AT(sensors_event_t, orientation, 24, 24); |
| 78 | CHECK_MEMBER_AT(sensors_event_t, gyro, 24, 24); |
| 79 | CHECK_MEMBER_AT(sensors_event_t, temperature, 24, 24); |
| 80 | CHECK_MEMBER_AT(sensors_event_t, distance, 24, 24); |
| 81 | CHECK_MEMBER_AT(sensors_event_t, light, 24, 24); |
| 82 | CHECK_MEMBER_AT(sensors_event_t, pressure, 24, 24); |
| 83 | CHECK_MEMBER_AT(sensors_event_t, relative_humidity, 24, 24); |
| 84 | CHECK_MEMBER_AT(sensors_event_t, uncalibrated_gyro, 24, 24); |
| 85 | CHECK_MEMBER_AT(sensors_event_t, uncalibrated_magnetic, 24, 24); |
| 86 | CHECK_MEMBER_AT(sensors_event_t, meta_data, 24, 24); |
| 87 | CHECK_MEMBER_AT(sensors_event_t, u64, 24, 24); |
| 88 | CHECK_MEMBER_AT(sensors_event_t, u64.data, 24, 24); |
| 89 | CHECK_MEMBER_AT(sensors_event_t, u64.step_counter, 24, 24); |
Aravind Akella | 6242f32 | 2014-02-28 18:46:19 -0800 | [diff] [blame] | 90 | CHECK_MEMBER_AT(sensors_event_t, flags, 88, 88); |
| 91 | CHECK_MEMBER_AT(sensors_event_t, reserved1, 92, 92); |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 92 | |
| 93 | CHECK_MEMBER_AT(struct sensor_t, name, 0, 0); |
| 94 | CHECK_MEMBER_AT(struct sensor_t, vendor, 4, 8); |
| 95 | CHECK_MEMBER_AT(struct sensor_t, version, 8, 16); |
| 96 | CHECK_MEMBER_AT(struct sensor_t, handle, 12, 20); |
| 97 | CHECK_MEMBER_AT(struct sensor_t, type, 16, 24); |
| 98 | CHECK_MEMBER_AT(struct sensor_t, maxRange, 20, 28); |
| 99 | CHECK_MEMBER_AT(struct sensor_t, resolution, 24, 32); |
| 100 | CHECK_MEMBER_AT(struct sensor_t, power, 28, 36); |
| 101 | CHECK_MEMBER_AT(struct sensor_t, minDelay, 32, 40); |
| 102 | CHECK_MEMBER_AT(struct sensor_t, fifoReservedEventCount, 36, 44); |
| 103 | CHECK_MEMBER_AT(struct sensor_t, fifoMaxEventCount, 40, 48); |
Aravind Akella | 6242f32 | 2014-02-28 18:46:19 -0800 | [diff] [blame] | 104 | CHECK_MEMBER_AT(struct sensor_t, stringType, 44, 56); |
| 105 | CHECK_MEMBER_AT(struct sensor_t, requiredPermission, 48, 64); |
| 106 | CHECK_MEMBER_AT(struct sensor_t, maxDelay, 52, 72); |
| 107 | CHECK_MEMBER_AT(struct sensor_t, flags, 56, 80); |
| 108 | CHECK_MEMBER_AT(struct sensor_t, reserved, 60, 88); |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 109 | |
| 110 | CHECK_MEMBER_AT(sensors_poll_device_1_t, v0, 0, 0); |
| 111 | CHECK_MEMBER_AT(sensors_poll_device_1_t, common, 0, 0); |
| 112 | CHECK_MEMBER_AT(sensors_poll_device_1_t, activate, 64, 120); |
| 113 | CHECK_MEMBER_AT(sensors_poll_device_1_t, setDelay, 68, 128); |
| 114 | CHECK_MEMBER_AT(sensors_poll_device_1_t, poll, 72, 136); |
| 115 | CHECK_MEMBER_AT(sensors_poll_device_1_t, batch, 76, 144); |
| 116 | CHECK_MEMBER_AT(sensors_poll_device_1_t, flush, 80, 152); |
Ashutosh Joshi | 5f0ebe6 | 2015-04-14 16:06:02 -0700 | [diff] [blame] | 117 | CHECK_MEMBER_AT(sensors_poll_device_1_t, inject_sensor_data, 84, 160); |
Peng Xu | 08a4dd9 | 2016-11-03 11:56:27 -0700 | [diff] [blame] | 118 | CHECK_MEMBER_AT(sensors_poll_device_1_t, register_direct_channel, 88, 168); |
| 119 | CHECK_MEMBER_AT(sensors_poll_device_1_t, config_direct_report, 92, 176); |
| 120 | CHECK_MEMBER_AT(sensors_poll_device_1_t, reserved_procs, 96, 184); |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 121 | |
| 122 | //Types defined in fb.h |
| 123 | CHECK_MEMBER_AT(framebuffer_device_t, common, 0, 0); |
| 124 | CHECK_MEMBER_AT(framebuffer_device_t, flags, 64, 120); |
| 125 | CHECK_MEMBER_AT(framebuffer_device_t, width, 68, 124); |
| 126 | CHECK_MEMBER_AT(framebuffer_device_t, height, 72, 128); |
| 127 | CHECK_MEMBER_AT(framebuffer_device_t, stride, 76, 132); |
| 128 | CHECK_MEMBER_AT(framebuffer_device_t, format, 80, 136); |
| 129 | CHECK_MEMBER_AT(framebuffer_device_t, xdpi, 84, 140); |
| 130 | CHECK_MEMBER_AT(framebuffer_device_t, ydpi, 88, 144); |
| 131 | CHECK_MEMBER_AT(framebuffer_device_t, fps, 92, 148); |
| 132 | CHECK_MEMBER_AT(framebuffer_device_t, minSwapInterval, 96, 152); |
| 133 | CHECK_MEMBER_AT(framebuffer_device_t, maxSwapInterval, 100, 156); |
| 134 | CHECK_MEMBER_AT(framebuffer_device_t, numFramebuffers, 104, 160); |
| 135 | CHECK_MEMBER_AT(framebuffer_device_t, reserved, 108, 164); |
| 136 | CHECK_MEMBER_AT(framebuffer_device_t, setSwapInterval, 136, 192); |
| 137 | CHECK_MEMBER_AT(framebuffer_device_t, setUpdateRect, 140, 200); |
| 138 | CHECK_MEMBER_AT(framebuffer_device_t, post, 144, 208); |
| 139 | CHECK_MEMBER_AT(framebuffer_device_t, compositionComplete, 148, 216); |
| 140 | CHECK_MEMBER_AT(framebuffer_device_t, dump, 152, 224); |
| 141 | CHECK_MEMBER_AT(framebuffer_device_t, enableScreen, 156, 232); |
| 142 | CHECK_MEMBER_AT(framebuffer_device_t, reserved_proc, 160, 240); |
| 143 | |
| 144 | //Types defined in hwcomposer.h |
| 145 | CHECK_MEMBER_AT(hwc_layer_1_t, compositionType, 0, 0); |
| 146 | CHECK_MEMBER_AT(hwc_layer_1_t, hints, 4, 4); |
| 147 | CHECK_MEMBER_AT(hwc_layer_1_t, flags, 8, 8); |
| 148 | CHECK_MEMBER_AT(hwc_layer_1_t, backgroundColor, 12, 16); |
| 149 | CHECK_MEMBER_AT(hwc_layer_1_t, handle, 12, 16); |
| 150 | CHECK_MEMBER_AT(hwc_layer_1_t, transform, 16, 24); |
| 151 | CHECK_MEMBER_AT(hwc_layer_1_t, blending, 20, 28); |
| 152 | CHECK_MEMBER_AT(hwc_layer_1_t, sourceCropi, 24, 32); |
| 153 | CHECK_MEMBER_AT(hwc_layer_1_t, sourceCrop, 24, 32); |
| 154 | CHECK_MEMBER_AT(hwc_layer_1_t, sourceCropf, 24, 32); |
| 155 | CHECK_MEMBER_AT(hwc_layer_1_t, displayFrame, 40, 48); |
| 156 | CHECK_MEMBER_AT(hwc_layer_1_t, visibleRegionScreen, 56, 64); |
| 157 | CHECK_MEMBER_AT(hwc_layer_1_t, acquireFenceFd, 64, 80); |
| 158 | CHECK_MEMBER_AT(hwc_layer_1_t, releaseFenceFd, 68, 84); |
| 159 | CHECK_MEMBER_AT(hwc_layer_1_t, planeAlpha, 72, 88); |
| 160 | CHECK_MEMBER_AT(hwc_layer_1_t, _pad, 73, 89); |
| 161 | |
| 162 | CHECK_MEMBER_AT(hwc_composer_device_1_t, common, 0, 0); |
| 163 | CHECK_MEMBER_AT(hwc_composer_device_1_t, prepare, 64, 120); |
| 164 | CHECK_MEMBER_AT(hwc_composer_device_1_t, set, 68, 128); |
| 165 | CHECK_MEMBER_AT(hwc_composer_device_1_t, eventControl, 72, 136); |
| 166 | CHECK_MEMBER_AT(hwc_composer_device_1_t, blank, 76, 144); |
| 167 | CHECK_MEMBER_AT(hwc_composer_device_1_t, query, 80, 152); |
| 168 | CHECK_MEMBER_AT(hwc_composer_device_1_t, registerProcs, 84, 160); |
| 169 | CHECK_MEMBER_AT(hwc_composer_device_1_t, dump, 88, 168); |
| 170 | CHECK_MEMBER_AT(hwc_composer_device_1_t, getDisplayConfigs, 92, 176); |
| 171 | CHECK_MEMBER_AT(hwc_composer_device_1_t, getDisplayAttributes, 96, 184); |
Dan Stoza | e83d10c | 2014-05-06 15:56:59 -0700 | [diff] [blame] | 172 | CHECK_MEMBER_AT(hwc_composer_device_1_t, getActiveConfig, 100, 192); |
| 173 | CHECK_MEMBER_AT(hwc_composer_device_1_t, setActiveConfig, 104, 200); |
Greg Hackmann | 6d37e6a | 2014-07-24 13:27:07 -0700 | [diff] [blame] | 174 | CHECK_MEMBER_AT(hwc_composer_device_1_t, setCursorPositionAsync, 108, 208); |
| 175 | CHECK_MEMBER_AT(hwc_composer_device_1_t, reserved_proc, 112, 216); |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 176 | |
| 177 | //Types defined in gralloc.h |
| 178 | CHECK_MEMBER_AT(gralloc_module_t, common, 0, 0); |
| 179 | CHECK_MEMBER_AT(gralloc_module_t, registerBuffer, 128, 248); |
| 180 | CHECK_MEMBER_AT(gralloc_module_t, unregisterBuffer, 132, 256); |
| 181 | CHECK_MEMBER_AT(gralloc_module_t, lock, 136, 264); |
| 182 | CHECK_MEMBER_AT(gralloc_module_t, unlock, 140, 272); |
| 183 | CHECK_MEMBER_AT(gralloc_module_t, perform, 144, 280); |
| 184 | CHECK_MEMBER_AT(gralloc_module_t, lock_ycbcr, 148, 288); |
Greg Hackmann | 1b81911 | 2014-05-12 13:48:30 -0700 | [diff] [blame] | 185 | CHECK_MEMBER_AT(gralloc_module_t, lockAsync, 152, 296); |
| 186 | CHECK_MEMBER_AT(gralloc_module_t, unlockAsync, 156, 304); |
| 187 | CHECK_MEMBER_AT(gralloc_module_t, lockAsync_ycbcr, 160, 312); |
| 188 | CHECK_MEMBER_AT(gralloc_module_t, reserved_proc, 164, 320); |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 189 | |
| 190 | CHECK_MEMBER_AT(alloc_device_t, common, 0, 0); |
| 191 | CHECK_MEMBER_AT(alloc_device_t, alloc, 64, 120); |
| 192 | CHECK_MEMBER_AT(alloc_device_t, free, 68, 128); |
| 193 | CHECK_MEMBER_AT(alloc_device_t, dump, 72, 136); |
| 194 | CHECK_MEMBER_AT(alloc_device_t, reserved_proc, 76, 144); |
| 195 | |
| 196 | //Types defined in consumerir.h |
| 197 | CHECK_MEMBER_AT(consumerir_device_t, common, 0, 0); |
| 198 | CHECK_MEMBER_AT(consumerir_device_t, transmit, 64, 120); |
| 199 | CHECK_MEMBER_AT(consumerir_device_t, get_num_carrier_freqs, 68, 128); |
| 200 | CHECK_MEMBER_AT(consumerir_device_t, get_carrier_freqs, 72, 136); |
| 201 | CHECK_MEMBER_AT(consumerir_device_t, reserved, 76, 144); |
| 202 | |
| 203 | //Types defined in camera_common.h |
| 204 | CHECK_MEMBER_AT(vendor_tag_ops_t, get_tag_count, 0, 0); |
| 205 | CHECK_MEMBER_AT(vendor_tag_ops_t, get_all_tags, 4, 8); |
| 206 | CHECK_MEMBER_AT(vendor_tag_ops_t, get_section_name, 8, 16); |
| 207 | CHECK_MEMBER_AT(vendor_tag_ops_t, get_tag_name, 12, 24); |
| 208 | CHECK_MEMBER_AT(vendor_tag_ops_t, get_tag_type, 16, 32); |
| 209 | CHECK_MEMBER_AT(vendor_tag_ops_t, reserved, 20, 40); |
| 210 | |
| 211 | CHECK_MEMBER_AT(camera_module_t, common, 0, 0); |
| 212 | CHECK_MEMBER_AT(camera_module_t, get_number_of_cameras, 128, 248); |
| 213 | CHECK_MEMBER_AT(camera_module_t, get_camera_info, 132, 256); |
| 214 | CHECK_MEMBER_AT(camera_module_t, set_callbacks, 136, 264); |
| 215 | CHECK_MEMBER_AT(camera_module_t, get_vendor_tag_ops, 140, 272); |
Greg Hackmann | 16c19a2 | 2014-06-13 13:52:48 -0700 | [diff] [blame] | 216 | CHECK_MEMBER_AT(camera_module_t, open_legacy, 144, 280); |
Chien-Yu Chen | 3015917 | 2015-01-08 11:06:38 -0800 | [diff] [blame] | 217 | CHECK_MEMBER_AT(camera_module_t, set_torch_mode, 148, 288); |
Eino-Ville Talvala | aee4782 | 2015-04-07 13:47:46 -0700 | [diff] [blame] | 218 | CHECK_MEMBER_AT(camera_module_t, init, 152, 296); |
| 219 | CHECK_MEMBER_AT(camera_module_t, reserved, 156, 304); |
Rom Lemarchand | 1b22d07 | 2013-11-22 14:59:54 -0800 | [diff] [blame] | 220 | |
| 221 | //Types defined in camera3.h |
| 222 | CHECK_MEMBER_AT(camera3_device_ops_t, initialize, 0, 0); |
| 223 | CHECK_MEMBER_AT(camera3_device_ops_t, configure_streams, 4, 8); |
| 224 | CHECK_MEMBER_AT(camera3_device_ops_t, register_stream_buffers, 8, 16); |
| 225 | CHECK_MEMBER_AT(camera3_device_ops_t, construct_default_request_settings, 12, 24); |
| 226 | CHECK_MEMBER_AT(camera3_device_ops_t, process_capture_request, 16, 32); |
| 227 | CHECK_MEMBER_AT(camera3_device_ops_t, get_metadata_vendor_tag_ops, 20, 40); |
| 228 | CHECK_MEMBER_AT(camera3_device_ops_t, dump, 24, 48); |
| 229 | CHECK_MEMBER_AT(camera3_device_ops_t, flush, 28, 56); |
| 230 | CHECK_MEMBER_AT(camera3_device_ops_t, reserved, 32, 64); |
| 231 | } |
| 232 | |