Коммит e776fe74 создал по автору Зарубин Виталий Викторович's avatar Зарубин Виталий Викторович
Просмотр файлов

feat: add ak-battery-info

владелец a2240b3f
...@@ -5,6 +5,7 @@ to interact with the Aurora OS via [Aurora Cinterop](https://os-git.omprussia.ru ...@@ -5,6 +5,7 @@ to interact with the Aurora OS via [Aurora Cinterop](https://os-git.omprussia.ru
### Libs ### Libs
- [Battery Info](ak-battery-info/README.md).
- [Camera Info](ak-camera-info/README.md). - [Camera Info](ak-camera-info/README.md).
- [Connectivity Info](ak-connectivity-info/README.md). - [Connectivity Info](ak-connectivity-info/README.md).
- [Device Info](ak-device-info/README.md). - [Device Info](ak-device-info/README.md).
......
# Battery Info
The library to access various information about the battery of the device.
### Features:
- Battery charge level.
- Battery charger status.
- Listen charger status.
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.vanniktech.mavenPublish)
}
group = "ru.auroraos.kmp"
version = "0.0.1"
kotlin {
listOf(
linuxX64("x86_64"),
linuxArm64("aarch64"),
).forEach { target ->
target.compilations.getByName("main") {
cinterops.create("libac") {
defFile("src/nativeInterop/cinterop/libac.def")
extraOpts("-libraryPath", "$projectDir/../libs/ac_battery_info/${target.name}")
extraOpts("-compiler-options", "-I$projectDir/../libs/ac_battery_info/include/full")
}
}
}
}
publishing {
repositories {
mavenLocal()
}
}
package ru.auroraos.kmp.batteryInfo
import kotlinx.cinterop.CValue
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.StableRef
import kotlinx.cinterop.asStableRef
import kotlinx.cinterop.readBytes
import kotlinx.cinterop.staticCFunction
import kotlinx.cinterop.toKString
import kotlinx.cinterop.useContents
import libac.Vec_uint8
@OptIn(ExperimentalForeignApi::class)
object BatteryInfo {
var callbacks: MutableMap<ULong, StableRef<(ULong, Boolean) -> Unit>> = mutableMapOf()
/**
* Battery charge level.
*/
fun getLevel(): Int {
return libac.ac_battery_info_level()
}
/**
* Battery charger status.
*/
fun isCharger(): Boolean {
return libac.ac_battery_info_charger_state().toKString().lowercase() == "on"
}
/**
* Listen charger state.
*/
fun listenCharger(callback: (ULong, Boolean) -> Unit): ULong {
val stableRef = StableRef.create(callback)
val id = libac.ac_battery_info_listen_charger(staticCFunction { id, value, data ->
data?.asStableRef<(ULong, Boolean) -> Unit>()?.get()?.invoke(id, value.toKString().lowercase() == "on")
}, stableRef.asCPointer())
if (id != 0UL) {
callbacks.put(id, stableRef)
}
return id
}
/**
* Unlisten change state by id.
*/
fun unlisten(id: ULong) {
libac.ac_battery_info_unlisten(id)
if (callbacks.containsKey(id)) {
callbacks[id]!!.dispose()
callbacks.remove(id)
}
}
/**
* Unlisten change state all.
*/
fun unlistenAll() {
libac.ac_battery_info_unlisten_all()
callbacks.values.onEach { it.dispose() }
callbacks.clear()
}
}
@OptIn(ExperimentalForeignApi::class)
internal fun CValue<Vec_uint8>?.toKString(): String {
if (this == null) {
return ""
}
val len = this.useContents { len }
val bytes = this.useContents { ptr }?.readBytes(len.toInt())!!
return bytes.toKString()
}
headers = ac_battery_info.h
staticLibraries = libac_battery_info.a
...@@ -67,14 +67,14 @@ object DeviceInfo { ...@@ -67,14 +67,14 @@ object DeviceInfo {
/** /**
* Main camera resolution. * Main camera resolution.
*/ */
fun getMainCameraResolution(): Float { fun getMainCameraResolution(): Double {
return libac.ac_device_info_get_main_camera_resolution() return libac.ac_device_info_get_main_camera_resolution()
} }
/** /**
* Frontal camera resolution. * Frontal camera resolution.
*/ */
fun getFrontalCameraResolution(): Float { fun getFrontalCameraResolution(): Double {
return libac.ac_device_info_get_frontal_camera_resolution() return libac.ac_device_info_get_frontal_camera_resolution()
} }
......
...@@ -57,8 +57,8 @@ object Vibration { ...@@ -57,8 +57,8 @@ object Vibration {
/** /**
* Stop a playing. * Stop a playing.
*/ */
fun stop(id: ULong): Boolean { fun stop(id: ULong) {
return libac.ac_vibration_stop(id) libac.ac_vibration_stop(id)
} }
/** /**
......
Этот отличия не может быть отображен по хранится в LFS. Вместо этого вы можете использовать просмотреть бинарные данные
Этот отличия не может быть отображен по хранится в LFS. Вместо этого вы можете использовать просмотреть бинарные данные
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Этот отличия не может быть отображен по хранится в LFS. Вместо этого вы можете использовать просмотреть бинарные данные
Этот отличия не может быть отображен по хранится в LFS. Вместо этого вы можете использовать просмотреть бинарные данные
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать