Skip to content

Commit 7811b58

Browse files
committed
ndk-sys: Generate with types from thermal.h header
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.
1 parent 02d8eb2 commit 7811b58

File tree

7 files changed

+456
-1
lines changed

7 files changed

+456
-1
lines changed

ndk-sys/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Unreleased
22

3+
- Regenerate with bindgen definitions from `thermal.h`. (#481)
4+
35
# 0.6.0 (2024-04-26)
46

57
- Generate against upstream NDK build `11769913`. (#471)

ndk-sys/generate_bindings.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ while read ARCH && read TARGET ; do
4747
--newtype-enum 'ANativeWindow_ChangeFrameRateStrategy' \
4848
--newtype-enum 'ANativeWindow_FrameRateCompatibility' \
4949
--newtype-enum 'ANativeWindow_LegacyFormat' \
50+
--newtype-enum 'AThermalStatus' \
5051
--newtype-enum 'AndroidBitmapCompressFormat' \
5152
--newtype-enum 'AndroidBitmapFormat' \
5253
--newtype-enum 'AppendMode' \

ndk-sys/src/ffi_aarch64.rs

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16576,6 +16576,119 @@ extern "C" {
1657616576
extern "C" {
1657716577
pub fn ASystemFontIterator_next(iterator: *mut ASystemFontIterator) -> *mut AFont;
1657816578
}
16579+
impl AThermalStatus {
16580+
pub const ATHERMAL_STATUS_ERROR: AThermalStatus = AThermalStatus(-1);
16581+
}
16582+
impl AThermalStatus {
16583+
pub const ATHERMAL_STATUS_NONE: AThermalStatus = AThermalStatus(0);
16584+
}
16585+
impl AThermalStatus {
16586+
pub const ATHERMAL_STATUS_LIGHT: AThermalStatus = AThermalStatus(1);
16587+
}
16588+
impl AThermalStatus {
16589+
pub const ATHERMAL_STATUS_MODERATE: AThermalStatus = AThermalStatus(2);
16590+
}
16591+
impl AThermalStatus {
16592+
pub const ATHERMAL_STATUS_SEVERE: AThermalStatus = AThermalStatus(3);
16593+
}
16594+
impl AThermalStatus {
16595+
pub const ATHERMAL_STATUS_CRITICAL: AThermalStatus = AThermalStatus(4);
16596+
}
16597+
impl AThermalStatus {
16598+
pub const ATHERMAL_STATUS_EMERGENCY: AThermalStatus = AThermalStatus(5);
16599+
}
16600+
impl AThermalStatus {
16601+
pub const ATHERMAL_STATUS_SHUTDOWN: AThermalStatus = AThermalStatus(6);
16602+
}
16603+
#[repr(transparent)]
16604+
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
16605+
pub struct AThermalStatus(pub ::std::os::raw::c_int);
16606+
#[repr(C)]
16607+
#[derive(Debug, Copy, Clone)]
16608+
pub struct AThermalManager {
16609+
_unused: [u8; 0],
16610+
}
16611+
pub type AThermal_StatusCallback = ::std::option::Option<
16612+
unsafe extern "C" fn(data: *mut ::std::os::raw::c_void, status: AThermalStatus),
16613+
>;
16614+
extern "C" {
16615+
pub fn AThermal_acquireManager() -> *mut AThermalManager;
16616+
}
16617+
extern "C" {
16618+
pub fn AThermal_releaseManager(manager: *mut AThermalManager);
16619+
}
16620+
extern "C" {
16621+
pub fn AThermal_getCurrentThermalStatus(manager: *mut AThermalManager) -> AThermalStatus;
16622+
}
16623+
extern "C" {
16624+
pub fn AThermal_registerThermalStatusListener(
16625+
manager: *mut AThermalManager,
16626+
callback: AThermal_StatusCallback,
16627+
data: *mut ::std::os::raw::c_void,
16628+
) -> ::std::os::raw::c_int;
16629+
}
16630+
extern "C" {
16631+
pub fn AThermal_unregisterThermalStatusListener(
16632+
manager: *mut AThermalManager,
16633+
callback: AThermal_StatusCallback,
16634+
data: *mut ::std::os::raw::c_void,
16635+
) -> ::std::os::raw::c_int;
16636+
}
16637+
extern "C" {
16638+
pub fn AThermal_getThermalHeadroom(
16639+
manager: *mut AThermalManager,
16640+
forecastSeconds: ::std::os::raw::c_int,
16641+
) -> f32;
16642+
}
16643+
#[repr(C)]
16644+
#[derive(Debug, Copy, Clone)]
16645+
pub struct AThermalHeadroomThreshold {
16646+
pub headroom: f32,
16647+
pub thermalStatus: AThermalStatus,
16648+
}
16649+
#[test]
16650+
fn bindgen_test_layout_AThermalHeadroomThreshold() {
16651+
const UNINIT: ::std::mem::MaybeUninit<AThermalHeadroomThreshold> =
16652+
::std::mem::MaybeUninit::uninit();
16653+
let ptr = UNINIT.as_ptr();
16654+
assert_eq!(
16655+
::std::mem::size_of::<AThermalHeadroomThreshold>(),
16656+
8usize,
16657+
concat!("Size of: ", stringify!(AThermalHeadroomThreshold))
16658+
);
16659+
assert_eq!(
16660+
::std::mem::align_of::<AThermalHeadroomThreshold>(),
16661+
4usize,
16662+
concat!("Alignment of ", stringify!(AThermalHeadroomThreshold))
16663+
);
16664+
assert_eq!(
16665+
unsafe { ::std::ptr::addr_of!((*ptr).headroom) as usize - ptr as usize },
16666+
0usize,
16667+
concat!(
16668+
"Offset of field: ",
16669+
stringify!(AThermalHeadroomThreshold),
16670+
"::",
16671+
stringify!(headroom)
16672+
)
16673+
);
16674+
assert_eq!(
16675+
unsafe { ::std::ptr::addr_of!((*ptr).thermalStatus) as usize - ptr as usize },
16676+
4usize,
16677+
concat!(
16678+
"Offset of field: ",
16679+
stringify!(AThermalHeadroomThreshold),
16680+
"::",
16681+
stringify!(thermalStatus)
16682+
)
16683+
);
16684+
}
16685+
extern "C" {
16686+
pub fn AThermal_getThermalHeadroomThresholds(
16687+
manager: *mut AThermalManager,
16688+
outThresholds: *mut *const AThermalHeadroomThreshold,
16689+
size: *mut usize,
16690+
) -> ::std::os::raw::c_int;
16691+
}
1657916692
extern "C" {
1658016693
pub fn ATrace_isEnabled() -> bool;
1658116694
}

ndk-sys/src/ffi_arm.rs

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16811,6 +16811,119 @@ extern "C" {
1681116811
extern "C" {
1681216812
pub fn ASystemFontIterator_next(iterator: *mut ASystemFontIterator) -> *mut AFont;
1681316813
}
16814+
impl AThermalStatus {
16815+
pub const ATHERMAL_STATUS_ERROR: AThermalStatus = AThermalStatus(-1);
16816+
}
16817+
impl AThermalStatus {
16818+
pub const ATHERMAL_STATUS_NONE: AThermalStatus = AThermalStatus(0);
16819+
}
16820+
impl AThermalStatus {
16821+
pub const ATHERMAL_STATUS_LIGHT: AThermalStatus = AThermalStatus(1);
16822+
}
16823+
impl AThermalStatus {
16824+
pub const ATHERMAL_STATUS_MODERATE: AThermalStatus = AThermalStatus(2);
16825+
}
16826+
impl AThermalStatus {
16827+
pub const ATHERMAL_STATUS_SEVERE: AThermalStatus = AThermalStatus(3);
16828+
}
16829+
impl AThermalStatus {
16830+
pub const ATHERMAL_STATUS_CRITICAL: AThermalStatus = AThermalStatus(4);
16831+
}
16832+
impl AThermalStatus {
16833+
pub const ATHERMAL_STATUS_EMERGENCY: AThermalStatus = AThermalStatus(5);
16834+
}
16835+
impl AThermalStatus {
16836+
pub const ATHERMAL_STATUS_SHUTDOWN: AThermalStatus = AThermalStatus(6);
16837+
}
16838+
#[repr(transparent)]
16839+
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
16840+
pub struct AThermalStatus(pub ::std::os::raw::c_int);
16841+
#[repr(C)]
16842+
#[derive(Debug, Copy, Clone)]
16843+
pub struct AThermalManager {
16844+
_unused: [u8; 0],
16845+
}
16846+
pub type AThermal_StatusCallback = ::std::option::Option<
16847+
unsafe extern "C" fn(data: *mut ::std::os::raw::c_void, status: AThermalStatus),
16848+
>;
16849+
extern "C" {
16850+
pub fn AThermal_acquireManager() -> *mut AThermalManager;
16851+
}
16852+
extern "C" {
16853+
pub fn AThermal_releaseManager(manager: *mut AThermalManager);
16854+
}
16855+
extern "C" {
16856+
pub fn AThermal_getCurrentThermalStatus(manager: *mut AThermalManager) -> AThermalStatus;
16857+
}
16858+
extern "C" {
16859+
pub fn AThermal_registerThermalStatusListener(
16860+
manager: *mut AThermalManager,
16861+
callback: AThermal_StatusCallback,
16862+
data: *mut ::std::os::raw::c_void,
16863+
) -> ::std::os::raw::c_int;
16864+
}
16865+
extern "C" {
16866+
pub fn AThermal_unregisterThermalStatusListener(
16867+
manager: *mut AThermalManager,
16868+
callback: AThermal_StatusCallback,
16869+
data: *mut ::std::os::raw::c_void,
16870+
) -> ::std::os::raw::c_int;
16871+
}
16872+
extern "C" {
16873+
pub fn AThermal_getThermalHeadroom(
16874+
manager: *mut AThermalManager,
16875+
forecastSeconds: ::std::os::raw::c_int,
16876+
) -> f32;
16877+
}
16878+
#[repr(C)]
16879+
#[derive(Debug, Copy, Clone)]
16880+
pub struct AThermalHeadroomThreshold {
16881+
pub headroom: f32,
16882+
pub thermalStatus: AThermalStatus,
16883+
}
16884+
#[test]
16885+
fn bindgen_test_layout_AThermalHeadroomThreshold() {
16886+
const UNINIT: ::std::mem::MaybeUninit<AThermalHeadroomThreshold> =
16887+
::std::mem::MaybeUninit::uninit();
16888+
let ptr = UNINIT.as_ptr();
16889+
assert_eq!(
16890+
::std::mem::size_of::<AThermalHeadroomThreshold>(),
16891+
8usize,
16892+
concat!("Size of: ", stringify!(AThermalHeadroomThreshold))
16893+
);
16894+
assert_eq!(
16895+
::std::mem::align_of::<AThermalHeadroomThreshold>(),
16896+
4usize,
16897+
concat!("Alignment of ", stringify!(AThermalHeadroomThreshold))
16898+
);
16899+
assert_eq!(
16900+
unsafe { ::std::ptr::addr_of!((*ptr).headroom) as usize - ptr as usize },
16901+
0usize,
16902+
concat!(
16903+
"Offset of field: ",
16904+
stringify!(AThermalHeadroomThreshold),
16905+
"::",
16906+
stringify!(headroom)
16907+
)
16908+
);
16909+
assert_eq!(
16910+
unsafe { ::std::ptr::addr_of!((*ptr).thermalStatus) as usize - ptr as usize },
16911+
4usize,
16912+
concat!(
16913+
"Offset of field: ",
16914+
stringify!(AThermalHeadroomThreshold),
16915+
"::",
16916+
stringify!(thermalStatus)
16917+
)
16918+
);
16919+
}
16920+
extern "C" {
16921+
pub fn AThermal_getThermalHeadroomThresholds(
16922+
manager: *mut AThermalManager,
16923+
outThresholds: *mut *const AThermalHeadroomThreshold,
16924+
size: *mut usize,
16925+
) -> ::std::os::raw::c_int;
16926+
}
1681416927
extern "C" {
1681516928
pub fn ATrace_isEnabled() -> bool;
1681616929
}

ndk-sys/src/ffi_i686.rs

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18579,6 +18579,119 @@ extern "C" {
1857918579
extern "C" {
1858018580
pub fn ASystemFontIterator_next(iterator: *mut ASystemFontIterator) -> *mut AFont;
1858118581
}
18582+
impl AThermalStatus {
18583+
pub const ATHERMAL_STATUS_ERROR: AThermalStatus = AThermalStatus(-1);
18584+
}
18585+
impl AThermalStatus {
18586+
pub const ATHERMAL_STATUS_NONE: AThermalStatus = AThermalStatus(0);
18587+
}
18588+
impl AThermalStatus {
18589+
pub const ATHERMAL_STATUS_LIGHT: AThermalStatus = AThermalStatus(1);
18590+
}
18591+
impl AThermalStatus {
18592+
pub const ATHERMAL_STATUS_MODERATE: AThermalStatus = AThermalStatus(2);
18593+
}
18594+
impl AThermalStatus {
18595+
pub const ATHERMAL_STATUS_SEVERE: AThermalStatus = AThermalStatus(3);
18596+
}
18597+
impl AThermalStatus {
18598+
pub const ATHERMAL_STATUS_CRITICAL: AThermalStatus = AThermalStatus(4);
18599+
}
18600+
impl AThermalStatus {
18601+
pub const ATHERMAL_STATUS_EMERGENCY: AThermalStatus = AThermalStatus(5);
18602+
}
18603+
impl AThermalStatus {
18604+
pub const ATHERMAL_STATUS_SHUTDOWN: AThermalStatus = AThermalStatus(6);
18605+
}
18606+
#[repr(transparent)]
18607+
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
18608+
pub struct AThermalStatus(pub ::std::os::raw::c_int);
18609+
#[repr(C)]
18610+
#[derive(Debug, Copy, Clone)]
18611+
pub struct AThermalManager {
18612+
_unused: [u8; 0],
18613+
}
18614+
pub type AThermal_StatusCallback = ::std::option::Option<
18615+
unsafe extern "C" fn(data: *mut ::std::os::raw::c_void, status: AThermalStatus),
18616+
>;
18617+
extern "C" {
18618+
pub fn AThermal_acquireManager() -> *mut AThermalManager;
18619+
}
18620+
extern "C" {
18621+
pub fn AThermal_releaseManager(manager: *mut AThermalManager);
18622+
}
18623+
extern "C" {
18624+
pub fn AThermal_getCurrentThermalStatus(manager: *mut AThermalManager) -> AThermalStatus;
18625+
}
18626+
extern "C" {
18627+
pub fn AThermal_registerThermalStatusListener(
18628+
manager: *mut AThermalManager,
18629+
callback: AThermal_StatusCallback,
18630+
data: *mut ::std::os::raw::c_void,
18631+
) -> ::std::os::raw::c_int;
18632+
}
18633+
extern "C" {
18634+
pub fn AThermal_unregisterThermalStatusListener(
18635+
manager: *mut AThermalManager,
18636+
callback: AThermal_StatusCallback,
18637+
data: *mut ::std::os::raw::c_void,
18638+
) -> ::std::os::raw::c_int;
18639+
}
18640+
extern "C" {
18641+
pub fn AThermal_getThermalHeadroom(
18642+
manager: *mut AThermalManager,
18643+
forecastSeconds: ::std::os::raw::c_int,
18644+
) -> f32;
18645+
}
18646+
#[repr(C)]
18647+
#[derive(Debug, Copy, Clone)]
18648+
pub struct AThermalHeadroomThreshold {
18649+
pub headroom: f32,
18650+
pub thermalStatus: AThermalStatus,
18651+
}
18652+
#[test]
18653+
fn bindgen_test_layout_AThermalHeadroomThreshold() {
18654+
const UNINIT: ::std::mem::MaybeUninit<AThermalHeadroomThreshold> =
18655+
::std::mem::MaybeUninit::uninit();
18656+
let ptr = UNINIT.as_ptr();
18657+
assert_eq!(
18658+
::std::mem::size_of::<AThermalHeadroomThreshold>(),
18659+
8usize,
18660+
concat!("Size of: ", stringify!(AThermalHeadroomThreshold))
18661+
);
18662+
assert_eq!(
18663+
::std::mem::align_of::<AThermalHeadroomThreshold>(),
18664+
4usize,
18665+
concat!("Alignment of ", stringify!(AThermalHeadroomThreshold))
18666+
);
18667+
assert_eq!(
18668+
unsafe { ::std::ptr::addr_of!((*ptr).headroom) as usize - ptr as usize },
18669+
0usize,
18670+
concat!(
18671+
"Offset of field: ",
18672+
stringify!(AThermalHeadroomThreshold),
18673+
"::",
18674+
stringify!(headroom)
18675+
)
18676+
);
18677+
assert_eq!(
18678+
unsafe { ::std::ptr::addr_of!((*ptr).thermalStatus) as usize - ptr as usize },
18679+
4usize,
18680+
concat!(
18681+
"Offset of field: ",
18682+
stringify!(AThermalHeadroomThreshold),
18683+
"::",
18684+
stringify!(thermalStatus)
18685+
)
18686+
);
18687+
}
18688+
extern "C" {
18689+
pub fn AThermal_getThermalHeadroomThresholds(
18690+
manager: *mut AThermalManager,
18691+
outThresholds: *mut *const AThermalHeadroomThreshold,
18692+
size: *mut usize,
18693+
) -> ::std::os::raw::c_int;
18694+
}
1858218695
extern "C" {
1858318696
pub fn ATrace_isEnabled() -> bool;
1858418697
}

0 commit comments

Comments
 (0)