Skip to content

Commit

Permalink
ndk-sys: Generate with types from thermal.h header
Browse files Browse the repository at this point in the history
Upstream recently (yesterday as of writing this patch) fixed the
`thermal.h` header in https://android-review.googlesource.com/c/
platform/frameworks/native/+/3205910 to finally contain valid C code,
allowing us to finally generate C bindings for this API and start
writing safe bindings inside the `ndk` crate.
  • Loading branch information
MarijnS95 committed Aug 3, 2024
1 parent 02d8eb2 commit 7811b58
Show file tree
Hide file tree
Showing 7 changed files with 456 additions and 1 deletion.
2 changes: 2 additions & 0 deletions ndk-sys/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Unreleased

- Regenerate with bindgen definitions from `thermal.h`. (#481)

# 0.6.0 (2024-04-26)

- Generate against upstream NDK build `11769913`. (#471)
Expand Down
1 change: 1 addition & 0 deletions ndk-sys/generate_bindings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ while read ARCH && read TARGET ; do
--newtype-enum 'ANativeWindow_ChangeFrameRateStrategy' \
--newtype-enum 'ANativeWindow_FrameRateCompatibility' \
--newtype-enum 'ANativeWindow_LegacyFormat' \
--newtype-enum 'AThermalStatus' \
--newtype-enum 'AndroidBitmapCompressFormat' \
--newtype-enum 'AndroidBitmapFormat' \
--newtype-enum 'AppendMode' \
Expand Down
113 changes: 113 additions & 0 deletions ndk-sys/src/ffi_aarch64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16576,6 +16576,119 @@ extern "C" {
extern "C" {
pub fn ASystemFontIterator_next(iterator: *mut ASystemFontIterator) -> *mut AFont;
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_ERROR: AThermalStatus = AThermalStatus(-1);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_NONE: AThermalStatus = AThermalStatus(0);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_LIGHT: AThermalStatus = AThermalStatus(1);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_MODERATE: AThermalStatus = AThermalStatus(2);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_SEVERE: AThermalStatus = AThermalStatus(3);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_CRITICAL: AThermalStatus = AThermalStatus(4);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_EMERGENCY: AThermalStatus = AThermalStatus(5);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_SHUTDOWN: AThermalStatus = AThermalStatus(6);
}
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct AThermalStatus(pub ::std::os::raw::c_int);
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AThermalManager {
_unused: [u8; 0],
}
pub type AThermal_StatusCallback = ::std::option::Option<
unsafe extern "C" fn(data: *mut ::std::os::raw::c_void, status: AThermalStatus),
>;
extern "C" {
pub fn AThermal_acquireManager() -> *mut AThermalManager;
}
extern "C" {
pub fn AThermal_releaseManager(manager: *mut AThermalManager);
}
extern "C" {
pub fn AThermal_getCurrentThermalStatus(manager: *mut AThermalManager) -> AThermalStatus;
}
extern "C" {
pub fn AThermal_registerThermalStatusListener(
manager: *mut AThermalManager,
callback: AThermal_StatusCallback,
data: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn AThermal_unregisterThermalStatusListener(
manager: *mut AThermalManager,
callback: AThermal_StatusCallback,
data: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn AThermal_getThermalHeadroom(
manager: *mut AThermalManager,
forecastSeconds: ::std::os::raw::c_int,
) -> f32;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AThermalHeadroomThreshold {
pub headroom: f32,
pub thermalStatus: AThermalStatus,
}
#[test]
fn bindgen_test_layout_AThermalHeadroomThreshold() {
const UNINIT: ::std::mem::MaybeUninit<AThermalHeadroomThreshold> =
::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<AThermalHeadroomThreshold>(),
8usize,
concat!("Size of: ", stringify!(AThermalHeadroomThreshold))
);
assert_eq!(
::std::mem::align_of::<AThermalHeadroomThreshold>(),
4usize,
concat!("Alignment of ", stringify!(AThermalHeadroomThreshold))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).headroom) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(AThermalHeadroomThreshold),
"::",
stringify!(headroom)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).thermalStatus) as usize - ptr as usize },
4usize,
concat!(
"Offset of field: ",
stringify!(AThermalHeadroomThreshold),
"::",
stringify!(thermalStatus)
)
);
}
extern "C" {
pub fn AThermal_getThermalHeadroomThresholds(
manager: *mut AThermalManager,
outThresholds: *mut *const AThermalHeadroomThreshold,
size: *mut usize,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn ATrace_isEnabled() -> bool;
}
Expand Down
113 changes: 113 additions & 0 deletions ndk-sys/src/ffi_arm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16811,6 +16811,119 @@ extern "C" {
extern "C" {
pub fn ASystemFontIterator_next(iterator: *mut ASystemFontIterator) -> *mut AFont;
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_ERROR: AThermalStatus = AThermalStatus(-1);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_NONE: AThermalStatus = AThermalStatus(0);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_LIGHT: AThermalStatus = AThermalStatus(1);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_MODERATE: AThermalStatus = AThermalStatus(2);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_SEVERE: AThermalStatus = AThermalStatus(3);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_CRITICAL: AThermalStatus = AThermalStatus(4);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_EMERGENCY: AThermalStatus = AThermalStatus(5);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_SHUTDOWN: AThermalStatus = AThermalStatus(6);
}
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct AThermalStatus(pub ::std::os::raw::c_int);
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AThermalManager {
_unused: [u8; 0],
}
pub type AThermal_StatusCallback = ::std::option::Option<
unsafe extern "C" fn(data: *mut ::std::os::raw::c_void, status: AThermalStatus),
>;
extern "C" {
pub fn AThermal_acquireManager() -> *mut AThermalManager;
}
extern "C" {
pub fn AThermal_releaseManager(manager: *mut AThermalManager);
}
extern "C" {
pub fn AThermal_getCurrentThermalStatus(manager: *mut AThermalManager) -> AThermalStatus;
}
extern "C" {
pub fn AThermal_registerThermalStatusListener(
manager: *mut AThermalManager,
callback: AThermal_StatusCallback,
data: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn AThermal_unregisterThermalStatusListener(
manager: *mut AThermalManager,
callback: AThermal_StatusCallback,
data: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn AThermal_getThermalHeadroom(
manager: *mut AThermalManager,
forecastSeconds: ::std::os::raw::c_int,
) -> f32;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AThermalHeadroomThreshold {
pub headroom: f32,
pub thermalStatus: AThermalStatus,
}
#[test]
fn bindgen_test_layout_AThermalHeadroomThreshold() {
const UNINIT: ::std::mem::MaybeUninit<AThermalHeadroomThreshold> =
::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<AThermalHeadroomThreshold>(),
8usize,
concat!("Size of: ", stringify!(AThermalHeadroomThreshold))
);
assert_eq!(
::std::mem::align_of::<AThermalHeadroomThreshold>(),
4usize,
concat!("Alignment of ", stringify!(AThermalHeadroomThreshold))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).headroom) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(AThermalHeadroomThreshold),
"::",
stringify!(headroom)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).thermalStatus) as usize - ptr as usize },
4usize,
concat!(
"Offset of field: ",
stringify!(AThermalHeadroomThreshold),
"::",
stringify!(thermalStatus)
)
);
}
extern "C" {
pub fn AThermal_getThermalHeadroomThresholds(
manager: *mut AThermalManager,
outThresholds: *mut *const AThermalHeadroomThreshold,
size: *mut usize,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn ATrace_isEnabled() -> bool;
}
Expand Down
113 changes: 113 additions & 0 deletions ndk-sys/src/ffi_i686.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18579,6 +18579,119 @@ extern "C" {
extern "C" {
pub fn ASystemFontIterator_next(iterator: *mut ASystemFontIterator) -> *mut AFont;
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_ERROR: AThermalStatus = AThermalStatus(-1);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_NONE: AThermalStatus = AThermalStatus(0);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_LIGHT: AThermalStatus = AThermalStatus(1);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_MODERATE: AThermalStatus = AThermalStatus(2);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_SEVERE: AThermalStatus = AThermalStatus(3);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_CRITICAL: AThermalStatus = AThermalStatus(4);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_EMERGENCY: AThermalStatus = AThermalStatus(5);
}
impl AThermalStatus {
pub const ATHERMAL_STATUS_SHUTDOWN: AThermalStatus = AThermalStatus(6);
}
#[repr(transparent)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct AThermalStatus(pub ::std::os::raw::c_int);
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AThermalManager {
_unused: [u8; 0],
}
pub type AThermal_StatusCallback = ::std::option::Option<
unsafe extern "C" fn(data: *mut ::std::os::raw::c_void, status: AThermalStatus),
>;
extern "C" {
pub fn AThermal_acquireManager() -> *mut AThermalManager;
}
extern "C" {
pub fn AThermal_releaseManager(manager: *mut AThermalManager);
}
extern "C" {
pub fn AThermal_getCurrentThermalStatus(manager: *mut AThermalManager) -> AThermalStatus;
}
extern "C" {
pub fn AThermal_registerThermalStatusListener(
manager: *mut AThermalManager,
callback: AThermal_StatusCallback,
data: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn AThermal_unregisterThermalStatusListener(
manager: *mut AThermalManager,
callback: AThermal_StatusCallback,
data: *mut ::std::os::raw::c_void,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn AThermal_getThermalHeadroom(
manager: *mut AThermalManager,
forecastSeconds: ::std::os::raw::c_int,
) -> f32;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AThermalHeadroomThreshold {
pub headroom: f32,
pub thermalStatus: AThermalStatus,
}
#[test]
fn bindgen_test_layout_AThermalHeadroomThreshold() {
const UNINIT: ::std::mem::MaybeUninit<AThermalHeadroomThreshold> =
::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<AThermalHeadroomThreshold>(),
8usize,
concat!("Size of: ", stringify!(AThermalHeadroomThreshold))
);
assert_eq!(
::std::mem::align_of::<AThermalHeadroomThreshold>(),
4usize,
concat!("Alignment of ", stringify!(AThermalHeadroomThreshold))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).headroom) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(AThermalHeadroomThreshold),
"::",
stringify!(headroom)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).thermalStatus) as usize - ptr as usize },
4usize,
concat!(
"Offset of field: ",
stringify!(AThermalHeadroomThreshold),
"::",
stringify!(thermalStatus)
)
);
}
extern "C" {
pub fn AThermal_getThermalHeadroomThresholds(
manager: *mut AThermalManager,
outThresholds: *mut *const AThermalHeadroomThreshold,
size: *mut usize,
) -> ::std::os::raw::c_int;
}
extern "C" {
pub fn ATrace_isEnabled() -> bool;
}
Expand Down
Loading

0 comments on commit 7811b58

Please sign in to comment.