81 Commits
vic ... vic-new

Author SHA1 Message Date
Joey Huab
f14291fe28 Revert "sm8350-common: Remove elf files in copy files check"
This reverts commit a61c4fe556.
2025-01-07 22:12:54 +09:00
Joey Huab
d99ed06f1c sm8350-common: switch to clang r522817 2025-01-07 22:12:54 +09:00
bf49841db2 sm8350-common: Initialize for Evolution X 10.x 2025-01-07 22:12:54 +09:00
pengfeix
57c89fb97b sm8350-common: overlay: Enable IMS feature flags for supported carriers
- Enable VoLTE/VoWIFI for all indian cariers
- Enable VoLTE for Viettel Vietnam
- Enable VoLTE for Mobifone Vietnam
- Add full Support Carrier Smartfren VoLTE
- Enable VoLTE support for Indosat and XL Axiata
- Enable VoLTE support for Telkomsel (Indonesia)
- Enable VoLTE support for Three
- Enable VoLTE support for Bakcell (Azerbaijan)

Signed-off-by: Frost <159105703+Karan-Frost@users.noreply.github.com>
2025-01-07 22:12:54 +09:00
Pratyay Borborah
8b0c557531 sm8350-common: Add SystemUI restart in restart advanced menu 2025-01-07 22:12:54 +09:00
Sebastiano Barezzi
8611e11ade sm8350-common: Partially revert "Move to QTI health AIDL service"
https://github.com/LineageOS/android_system_core/blob/lineage-21.0/init/init.cpp#L1099

This partially reverts commit 4aca996701.

Change-Id: I284f80f364e9057a8373a015f0acaee3ef9e395d
2025-01-07 22:12:54 +09:00
ralph950412
4c6a9ef287 sm8350-common: sepolicy: Make vendor_camera_sensor_prop public
Change-Id: Id714049ef81ef69337cebbdb4860b7eed0d958f6
2025-01-07 22:12:54 +09:00
althafvly
1291633b15 sm8350-common: Update CarrierConfig from munch V816.0.2.0.ULMMIXM
Change-Id: I4df6ab6ac380b3eeed1ab6ed64f64bc0e0d0ed3f
2025-01-07 22:12:54 +09:00
Adithya R
41546a5de6 sm8350-common: parts: Get rid of proguard flags
This is obsolete.

Change-Id: I1b692d3e1a96c49ac6efd54907ea23c4b4494f7e
2025-01-07 22:12:54 +09:00
ghostrider-reborn
a4b4eedeee sm8350-common: overlay: Define OEM fast charge sysfs node
- This forces android to display 'charging rapidly' whenever our proprietary 33w charger is connected, based on the value of this node (0/1)

Signed-off-by: saikiran2001 <bjsaikiran@gmail.com>
2025-01-07 22:12:54 +09:00
Lowxorx
d053a1df29 sm8350-common: overlay: show min/max refresh rate in settings 2025-01-07 22:12:54 +09:00
Omkar Chandorkar
657723b437 sm8350-common: overlay: Update CarrierConfig from phone1
* From Nothing OS 2.0.4

Signed-off-by: flakeforever <113103193+flakeforever@users.noreply.github.com>
2025-01-07 22:12:54 +09:00
kssrao13882
83a42b37a6 sm8350-common: Remove order preference for Thermal Profiles
- In Infinity X rom this tab at top spoils the look of Battery section
2025-01-07 22:12:54 +09:00
Chaohui Wang
721dd7b329 sm8350-common: parts: Migrate to CompoundButton.OnCheckedChangeListener
Switch and SwitchCompat are both CompoundButton.

Using CompoundButton in Java will helps migration in the future.

Bug: 306658427
Test: manual - check Settings pages
Test: m RunSettingsLibRoboTests
Change-Id: I85a70d4c504d8584030ea4a058f30d74206ab835
2025-01-07 22:12:54 +09:00
Peter Kalauskas
52e11fe2b4 sm8350-common: parts: Enable use_resource_processor for all sysui deps
This will make the build faster

Test: m checkbuild
Bug: 295208392
Change-Id: I0c1bd901429bbe3bf81c1530e156735f8637a96e
2025-01-07 22:12:54 +09:00
Adithya R
97622bb428 sm8350-common: parts: Fix thermal profile screen state handling 2025-01-07 22:12:54 +09:00
EmanuelCN
e98554c3f4 sm8350-common: parts: Checkout thermal profiles to xiaomi-sm8250 implementation 2025-01-07 22:12:54 +09:00
truly-irham
c3f1231a89 sm8350-common: Address sepolicy denial for per-app thermal profile parts 2025-01-07 22:12:54 +09:00
Arian
0fb494705f sm8350-common: parts: Import from xiaomi_sdm845-common
e261035d91/parts

Change-Id: I442f48780ca020f3e420ee4ccaf8ac07b05457cb
Signed-off-by: Anush02198 <anush.4376@gmail.com>
2025-01-07 22:12:54 +09:00
Chenyang Zhong
41ae9cff05 sm8350-common: enable Dolby Vision in hwcomposer
Signed-off-by: Chenyang Zhong <zhongcy95@gmail.com>
2025-01-07 22:12:54 +09:00
johnmart19
7ee8fc0703 sm8350-common: Enable VoNR Calls support 2025-01-07 22:12:54 +09:00
Terminator-J
1e404647c2 sm8350-common: rootdir: Fix the battery drain due to statsd...?
- Could it really be so simple?
2025-01-07 22:12:54 +09:00
Sugakesshaa
1b78df99d7 sm8350-common: Build android.hardware.graphics.common-V4-ndk
AOSP upgraded the blob to V5 but xiaomi's libgui requires V4 version of the blob

Change-Id: Ib596cde74c414bcb5ac2ea33c394ad7b83b336f0
2025-01-07 22:12:54 +09:00
Peng Xu
cec6acae9f sm8350-common: wifi: Enable support for IEEE80211AX
* This is to allow supporting WiFi 6 mobile hotspots,
   to be noted this is only supported on SDM855+ platforms.
2025-01-07 22:12:54 +09:00
Matheus de Souza
013a8c4431 sm8350-common: Set BUILD_BROKEN_DUP_RULES := true 2025-01-07 22:12:54 +09:00
Lup Gabriel
f4bed525a7 sm8350-common: Enable screen off udfps support 2025-01-07 22:12:54 +09:00
Joey Huab
f7532bfcb0 Revert "sm8350-common: Include MIUI Camera(renoir)"
This reverts commit 32827582d34ac08c85f7cbb1965c3fe304912610.
2025-01-07 22:12:54 +09:00
Joey Huab
c1395b491e Revert "Bring up Pixelage"
This reverts commit 9c84cc4debbd220c577a26424efc3e92273b8c84.
2025-01-07 22:12:54 +09:00
RobertGarciaa
60aef698b6 sm8350-common: Add missing misys vendor blobs
1056 F linker  : CANNOT LINK EXECUTABLE "/vendor/bin/hw/vendor.xiaomi.hardware.misys@2.0-service": library "libmivsock_utils.so" not found: needed by main executable
1066 F linker  : CANNOT LINK EXECUTABLE "/vendor/bin/hw/vendor.xiaomi.hardware.misys@2.0-service": library "libmicuttlefish_fs.so" not found: needed by main executable
1081 F linker  : CANNOT LINK EXECUTABLE "/vendor/bin/hw/vendor.xiaomi.hardware.misys@2.0-service": library "libmicuttlefish_utils.so" not found: needed by main executable

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
johnmart19
fc623a39da sm8350-common: Import Xiaomi Misys Hal
- Import Xiaomi Misys hal for camera processing
- Build Legacy android.hidl.memory.block, android.hidl.manager in vendor for misys serivce
F linker  : CANNOT LINK EXECUTABLE "/vendor/bin/hw/vendor.xiaomi.hardware.misys@3.0-service": library "android.hidl.memory.block@1.0.so" not found: needed by /vendor/lib64/vendor.xiaomi.hardware.misys@3.0.so in namespace (default)
- 636 I hwservicemanager: getTransport: Cannot find entry vendor.xiaomi.hardware.misys@1.0::IMiSys/default in either framework or device VINTF manifest.

Co-authored-by: klozz <klozz@thexperienceproject.org>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
RobertGarciaa
e64b21c7b1 sm8350-common: Address sepolicy for MIUI camera
13202 com.android.camera W .android.camera: type=1400 audit(0.0:137): avc:  denied  { read } for  name="u:object_r:vendor_audio_prop:s0" dev="tmpfs" ino=11770 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:vendor_audio_prop:s0 tclass=file permissive=0 app=com.android.camera
13202 com.android.camera W libc: Access denied finding property "ro.vendor.audio.us.proximity"​
05-28 18:59:04.807   995 12991 W libc    : Access denied finding property "camera.debug.superlowlight"

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
Murat Kozan
5ce1261ead sm8350-common: sepolicy: Label persist.vendor.low.cutoff for Leica Camera
Leica camera
 libc : Access denied finding property "persist.vendor.low.cutoff"

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
RobertGarciaa
41d0c8b031 sm8350-common: Add sepolicy for MIUI camera
1 W /system/bin/init: type=1107 audit(0.0:133): uid=0 auid=4294967295 ses=4294967295 subj=u:r:init:s0 msg='avc:  denied  { set } for property=persist.vendor.aiie_capture_log.debug pid=992 uid=1047 gid=1005 scontext=u:r:hal_camera_default:s0 tcontext=u:object_r:vendor_default_prop:s0 tclass=property_service permissive=0'
7940 W libc    : Access denied finding property "persist.al.cfr.loglevel"
391 E init    : Unable to set property 'persist.vendor.aiie_capture_log.debug' from uid:1047 gid:1005 pid:992: SELinux permission check failed

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
AndroidHQ254
c686cb9146 sm8350-common: sepolicy: Label ro.hardware.chipname property
W libc    : Access denied finding property "ro.hardware.chipname"

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
Davide Garberi
25e5561be0 sm8350-common: Build libhidltransport and libhwbinder
05-05 15:53:59.961 12354 12354 E MI_Algo_JNI: Open /system/lib64/libmicampostproc_client.so Error :dlopen failed: library "libhidltransport.so" not found: needed by /system/lib64/libmicampostproc_client.so in namespace clns-shared-4

Change-Id: Id87af3af701000734aaa89f1ec98a80dd70a266b
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:53 +09:00
RobertGarciaa
61703e9016 sm8350-common: Address some denials
19537 W libc    : Access denied finding property "vendor.camera.sensor.logsystem"
19537 W libc    : Access denied finding property "vendor.panel.display"

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Murat Kozan
33c3b9cb4d sm8350-common: sepolicy: Label ro.miui.build.region
08-28 13:06:16.280   898  7800 W libc    : Access denied finding property "ro.miui.build.region"

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Amit Pundir
444177d555 sm8350-common: sepolicy: Address mediaswcodec denials
- avc: denied { read write } for name="kgsl-3d0" dev="tmpfs" ino=1100 scontext=u:r:mediaswcodec:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
piscesmk2013
91be5faa38 sm8350-common: sepolicy: Allow mediaserver to find native service
Change-Id: I7db098069e7aa4be74935a506c9a3ceacfd755e3
2025-01-07 22:12:51 +09:00
Pig
12c546a4e6 sm8350-common: sepolicy: Label ro.product.mod_device
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
AdarshGrewal
5cec766e97 sm8350-common: sepolicy: Label ro.product.marketname
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
bheatleyyy
c85868ec79 sm8350-common: sepolicy: Allow cameraserver write to property socket
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Kuba Wojciechowski
2571ce8b48 sm8350-common: sepolicy: Address camera denials
Change-Id: Ie6546e690c5acd6b1f544ec1a110ec5341406481
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Adithya R
1f093e4cac sm8350-common: sepolicy: Update camera property contexts
Change-Id: I874a71c70b5e7d5e46e68e6109014e2b632a2ea2
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
RobertGarciaa
55f75622d4 sm8350-common: Include MIUI Camera(renoir)
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Carlos Arriaga
cdc4c41e12 sm8350-common: sepolicy: Add camera label's
W libc    : Access denied finding property "ro.camera.req.fmq.size"
W libc    : Access denied finding property "ro.camera.res.fmq.size"
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
RobertGarciaa
347384c937 sm8350-common: Define missing Dolby HALs
The following HALs in device manifest are not declared in FCM <= level 5:
  vendor.dolby.hardware.dms@2.0::IDms/default
ERROR: files are incompatible: The following instances are in the device manifest but not specified in framework compatibility matrix:
    vendor.dolby.hardware.dms@2.0::IDms/default
Suggested fix:
1. Update deprecated HALs to the latest version.
2. Check for any typos in device manifest or framework compatibility matrices with FCM version >= 5.
3. For new platform HALs, add them to any framework compatibility matrix with FCM version >= 5 where applicable.
4. For device-specific HALs, add to DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE or DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE.: Success
INCOMPATIBLE

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Pranav Vashi
8d938a4198 sm8350-common: dolby: Add profiles overlay for moto dolby
Change-Id: Ided92625cb73f530656e86929b3ba70fea1e940d
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Pranav Vashi
a32cc5950a sm8350-common: dolby: Update dax-default from moto
Change-Id: I430adc74c64093bf3c1439e66607567cb6444b80
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
dogpoopy
80ca450e87 sm8350-common: Switch dolby soundfx to libswdap
* libhwdap.so doesn't work with devices that doesn't have dolby hardware support
* libswdap.so from https://github.com/reiryuki/Dolby-Atmos-Moto-G52-Magisk-Module.git

[@neobuddy89: Pin libswdap.so from above module]
Change-Id: Icb22599d2d439a837b537b59330f30e558869532
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Pranav Vashi
ef3f53ae69 sm8350-common: audio: Add dolby to audio effects
* Clean up a bit.

Change-Id: Ie4865489f79b617f2568fc29b382c56bb0cd6f11
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
Pranav Vashi
baa3ce674d sm8350-common: audio: Apply NLSound 4.0 optimization for dolby
Change-Id: I221799b79f80933cc8302418f1290893722a5368
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
basamaryan
08320a7b98 sm8350-common: audio: Forcefully disable volume leveler
sed -i "/volume-leveler-enable/ s/true/false/g" configs/audio/dax-default.xml

Change-Id: I7ceb29291a9e55036d57975f5a28a149c7fcb435
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:51 +09:00
basamaryan
fa2a6a2b7a sm8350-common: Build XiaomiDolby
Change-Id: I31ff2c27a479423951c8a645bf1cd65dc6ad6f81
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:50 +09:00
madmax7896
e0ac651622 sm8350-common: Import Dolby audio blobs and sepolicy
Squashed with:
commit b1baf8e4109edf71727c39bff18077110174dff2
Author: Yuan Si <do4suki@gmail.com>
Date:   Sat Sep 16 06:35:46 2023 +0800

    sweet: sepolicy: Address more Dolby audio denials

    09-16 06:33:17.209   613   613 E SELinux : avc:  denied  { find } for interface=vendor.dolby.hardware.dms::IDms sid=u:r:mediacodec:s0 pid=1262 scontext=u:r:mediacodec:s0 tcontext=u:object_r:hal_dms_hwservice:s0 tclass=hwservice_manager permissive=0
    09-16 06:33:17.209  1262  8489 E DecDynamicConfig: connectService : Connect to Dolby Native Service failed
    09-16 06:33:17.209  1262  8489 E DecDynamicConfig: checkShareConfig: Dolby service is NULL

    Change-Id: Ideb557073b53e7b31f6535d6053933104b455ae7
    Signed-off-by: Yuan Si <do4suki@gmail.com>

commit e83b80995343c56382e43bf0656ee1e2b79ee067
Author: YuKongA <70465933+YuKongA@users.noreply.github.com>
Date:   Thu Oct 12 00:02:27 2023 +0800

    sweet: sepolicy: Address mediacodec denials

    Partially taken from ec0e9c641f and extended to hal_dms_server

    Change-Id: I51cfbbb2f8b9d83e74ef2f44196e8393189ca3dc
    Signed-off-by: basamaryan <basam.aryan@gmail.com>

commit 0a7aab81667f137c57fa95c4661fa7e43e0e2c1c
Author: Pranav Vashi <neobuddy89@gmail.com>
Date:   Fri Aug 2 20:27:52 2024 +0530

    sweet: Move dax-default to device tree

    Change-Id: Id2054bb5e61bcfe58706e32f44d37fe7524aa912
    Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>

Change-Id: I2d466238525d074269377a82627a816527aefd74
Signed-off-by: Mesquita <mesquita@aospa.co>
Signed-off-by: basamaryan <basam.aryan@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:50 +09:00
RobertGarciaa
e5fd69b296 sm8350-common: Build more soundtrigger packages
W libc    : Unable to set property "ctl.interface_start" to "android.hardware.soundtrigger@2.0::ISoundTriggerHw/default": PROP_ERROR_HANDLE_CONTROL_MESSAGE (0x20)

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:50 +09:00
Chenyang Zhong
3545b6d29d sm8350-common: rootdir: import diag related usb entries
Looks like apps like Network Signal Guru connects to the diag-router
through an emulated(?) USB device.

Signed-off-by: Chenyang Zhong <zhongcy95@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:48 +09:00
dianlujitao
54b76326ac sm8350-common: Make fastrpc_shell_3 publicly available
* Used by GCAM for DSP-accelerated HDR processing
 * Arguably we should label /vendor/dsp/cdsp/fastrpc_shell_3 to
   same_process_hal_file like Pixels, but the partition is prebuilt thus
   we're unable to relabel it.
 * Copy the file to writable tmpfs, setup attributes and bind mount back
   to workaround the limitation.

[ghostrider-reborn]:
Allow adsp/cdsprpcd and neuralnetworks HAL to access fastrpc_shell_3

[kras edit:
 1. rename some contexts as per qva/kona
 2. extend to allow camera HAL and VPP service to access it as well]

Co-authored-by: Adithya R <gh0strider.2k18.reborn@gmail.com>
Change-Id: Ide90e5c7307d413db5ece736e859559f06679545
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:45 +09:00
RobertGarciaa
dd2d742c09 sm8350-common: Label more wakeup
for i in $(realpath /sys/class/wakeup/*); do if ! echo "$(ls -dZ $i)" | grep -q sysfs_wakeup; then echo genfscon sysfs $(echo $i | sed -e 's|/sys||g' -e 's|wakeup/wakeup.|wakeup|g' -e 's|wakeup[0-9]*|wakeup|g') u:object_r:sysfs_wakeup:s0; fi; done | sort -u

09-21 10:21:21.407   813   813 W binder:813_7: type=1400 audit(0.0:1684): avc:  denied  { read } for  name="event_count" dev="sysfs" ino=78308 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
09-21 10:21:21.407   813   813 W binder:813_7: type=1400 audit(0.0:1685): avc:  denied  { read } for  name="max_time_ms" dev="sysfs" ino=78313 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
09-21 10:21:21.407   813   813 W binder:813_7: type=1400 audit(0.0:1686): avc:  denied  { read } for  name="wakeup_count" dev="sysfs" ino=78309 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
09-21 10:21:21.407   813   813 W binder:813_7: type=1400 audit(0.0:1687): avc:  denied  { read } for  name="total_time_ms" dev="sysfs" ino=78312 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0
09-21 10:21:21.407   813   813 W binder:813_7: type=1400 audit(0.0:1688): avc:  denied  { read } for  name="expire_count" dev="sysfs" ino=78310 scontext=u:r:system_suspend:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0

09-21 10:17:28.575   813  2119 E android.system.suspend-service: Error opening event_count for wakeup32: Permission denied
09-21 10:17:28.575   813  2119 E android.system.suspend-service: Error reading event_count for wakeup32: Bad file descriptor
09-21 10:17:28.575   813  2119 E android.system.suspend-service: Error opening max_time_ms for wakeup32: Permission denied
09-21 10:17:28.575   813  2119 E android.system.suspend-service: Error reading max_time_ms for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening wakeup_count for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading wakeup_count for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening total_time_ms for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading total_time_ms for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening expire_count for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading expire_count for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening active_count for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading active_count for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening last_change_ms for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading last_change_ms for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening waiting_for_supplier for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading waiting_for_supplier for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening prevent_suspend_time_ms for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading prevent_suspend_time_ms for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening name for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading name for wakeup32: Bad file descriptor
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error opening active_time_ms for wakeup32: Permission denied
09-21 10:17:28.576   813  2119 E android.system.suspend-service: Error reading active_time_ms for wakeup32: Bad file descriptor

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:45 +09:00
minaripenguin
527e2dc090 sm8350-common: sepolicy: Address incremental fs SeLinux denials
* fixes random app crash for apps like coc

logcat reported by user

12-15 09:23:37.767  2383  2383 W TaskThumbnailIc: type=1400 audit(0.0:705): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/base.apk" dev="incremental-fs" ino=176013 ioctlcmd=0x6722 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.android.launcher3
12-15 09:23:37.767  2383  2383 W TaskThumbnailIc: type=1400 audit(0.0:706): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/split_config.en.apk" dev="incremental-fs" ino=175987 ioctlcmd=0x6722 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.android.launcher3
12-15 09:23:37.767  2383  2383 W TaskThumbnailIc: type=1400 audit(0.0:707): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/split_config.xxhdpi.apk" dev="incremental-fs" ino=176007 ioctlcmd=0x6722 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.android.launcher3
12-15 09:23:37.767  2383  2383 W TaskThumbnailIc: type=1400 audit(0.0:708): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/base.apk" dev="incremental-fs" ino=176013 ioctlcmd=0x6722 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.android.launcher3
12-15 09:23:37.767  2383  2383 W TaskThumbnailIc: type=1400 audit(0.0:709): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/base.apk" dev="incremental-fs" ino=176013 ioctlcmd=0x6722 scontext=u

* also noticed incremental-fs denials

12-15 09:23:25.658 16094 16145 I incfs   : IncFs_Features: v1
12-15 09:23:25.654 16094 16094 W com.android.vending: type=1400 audit(0.0:672): avc: denied { read } for comm=62674578656375746F72202332 name="filesystems" dev="proc" ino=4026532355 scontext=u:r:priv_app:s0:c512,c768 tcontext=u:object_r:proc_filesystems:s0 tclass=file permissive=0 app=com.android.vending
12-15 09:23:25.661 16094 16130 I Finsky  : [83] ghu.apply(78): AIM: Got app ownership map. App counts: 1. Unique apps: 1
12-15 09:23:25.790 19437 20775 I incfs   : Initial API level of the device: 30
12-15 09:23:25.790 19437 20775 W libc    : Access denied finding property "ro.incremental.enable"
12-15 09:23:25.790 19437 20775 I incfs   : ro.incremental.enable:
12-15 09:23:25.787 19437 19437 W lowpool[13]: type=1400 audit(0.0:673): avc: denied { read } for name="u:object_r:incremental_prop:s0" dev="tmpfs" ino=12498 scontext=u:r:gmscore_app:s0:c512,c768 tcontext=u:object_r:incremental_prop:s0 tclass=file permissive=0 app=com.google.android.gms
12-15 09:23:25.791 19437 19437 W lowpool[13]: type=1400 audit(0.0:674): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/base.apk" dev="incremental-fs" ino=176013 ioctlcmd=0x6722 scontext=u:r:gmscore_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.google.android.gms
12-15 09:23:25.794 19437 19437 W lowpool[13]: type=1400 audit(0.0:675): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/split_config.en.apk" dev="incremental-fs" ino=175987 ioctlcmd=0x6722 scontext=u:r:gmscore_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.google.android.gms
12-15 09:23:25.794 19437 19437 W lowpool[13]: type=1400 audit(0.0:676): avc: denied { ioctl } for path="/data/app/~~AkF5id64oKGn1EZvys0LgA==/com.supercell.clashofclans-oTOm1Cdlt18nhXT8665Pbw==/split_config.xxhdpi.apk" dev="incremental-fs" ino=176007 ioctlcmd=0x6722 scontext=u:r:gmscore_app:s0:c512,c768 tcontext=u:object_r:apk_data_file:s0 tclass=file permissive=0 app=com.google.android.gms
12-15 09:23:25.795 19437 20775 I incfs   : IncFs_Features: v1

test: boot to homescreen, open fresh installed COC app
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:45 +09:00
RobertGarciaa
5fd99c9433 sm8350-common: sepolicy: Fix vendor_hal_perf_default denials
avc:  denied  { set } for property=ctl.vendor.msm_irqbalance pid=1057 uid=0 gid=0 scontext=u:r:vendor_hal_perf_default:s0 tcontext=u:object_r:vendor_msm_irqbalance_prop:s0 tclass=property_service permissive=0
avc:  denied  { set } for property=ctl.stop$vendor.msm_irqbalance pid=1057 uid=0 gid=0 scontext=u:r:vendor_hal_perf_default:s0 tcontext=u:object_r:ctl_stop_prop:s0 tclass=property_service permissive=0
avc:  denied  { set } for property=ctl.start$vendor.msm_irqbalance pid=1057 uid=0 gid=0 scontext=u:r:vendor_hal_perf_default:s0 tcontext=u:object_r:ctl_start_prop:s0 tclass=property_service permissive=0

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:45 +09:00
RobertGarciaa
790982b32f sm8350-common: Define missing HALs in FCM
The following HALs in device manifest are not declared in FCM <= level 5:
  android.hardware.biometrics.fingerprint@2.3::IBiometricsFingerprint/default
  android.hardware.power@1.2::IPower/default
  android.hardware.bluetooth.audio.IBluetoothAudioProviderFactory/default (@4)
  android.hardware.boot@1.2::IBootControl/default
  android.hardware.drm.IDrmFactory/clearkey (@1)
  android.hardware.nfc.INfc/default (@1)
  android.hardware.usb.IUsb/default (@1)
  android.hardware.wifi.IWifi/default (@1)
  android.hardware.wifi.IWifi/default (@2)
  android.hardware.wifi.hostapd.IHostapd/default (@2)
  android.hardware.wifi.supplicant.ISupplicant/default (@3)
  android.hardware.power.IPower/default (@4)
  android.hardware.vibrator.IVibrator/default (@2)
  android.hardware.health.IHealth/default (@3)
  android.hardware.ir.IConsumerIr/default (@1)
  android.hardware.sensors.ISensors/default (@2)
  android.hardware.thermal.IThermal/default (@1)
COMPATIBLE

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:45 +09:00
RobertGarciaa
972ae68be8 Bring up Pixelage 2025-01-07 22:12:44 +09:00
Tim Zimmermann
a5b527c6e2 sm8350-common: CarrierConfig: Set LTE+ threshold bandwidth to 0
* so LTE+ icon will show whenever it's available

Change-Id: I45a569fa52d19f4b9af370d7a18c4198e29febc6
Signed-off-by: Adithya R <gh0strider.2k18.reborn@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Vishalcj17
b910f67f72 sm8350-common: CarrierConfig: Globally enable LTE+ icon
Change-Id: Ifcad30636c0ee76a1fa4830bc0c8143d2b7be879
Signed-off-by: Adithya R <gh0strider.2k18.reborn@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Xin Li
6c2cc0e9cb sm8350-common: overlay: Turn on screen on unplug
Signed-off-by: Vaisakh Murali <mvaisakh@statixos.com>
Change-Id: I9d49a6bcdaaf2defa4d8c9c3528110b25e266653
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Karan Parashar
6db575bfda sm8350-common: overlay: Enable force LTE_CA toggle
Change-Id: I79715f210feb4958b5bb8d4b67b099eb4e577401
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Karan Parashar
57d72e1daa sm8350-common: overlay: Disable pocket mode lock
Change-Id: I85ee0637f65e0ba11b7b57ff2461ad769bf946b3
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Cassie
199d23e228 sm8350-common: overlay: Use the new auto network selection UI
Change-Id: I76698911103601d5f3ad67e1099790af8c2fdc18
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
LuK1337
de18e06814 sm8350-common: overlay: Set max network scan search time to 254
Matches value found in stock TeleServiceQcom.

Change-Id: If2b224298ffe731f8ccfd0b4f3b6d8a257b6f968
Signed-off-by: aswin7469 <aswinas@pixysos.com>
Signed-off-by: NotHarshhaa <reddyharshhaa12@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Elektroschmock
88d12cc52f sm8350-common: sepolicy: Fix isolated_app denial
avc:  denied  { setattr } for  name="model-info.pb" dev="dm-38" ino=16414 scontext=u:r:isolated_app:s0:c512,c768 tcontext=u:object_r:app_data_file:s0:c61,c257,c512,c768 tclass=file permissive=0
avc:  denied  { setattr } for  name="model.tflite" dev="dm-38" ino=14897 scontext=u:r:isolated_app:s0:c512,c768 tcontext=u:object_r:app_data_file:s0:c61,c257,c512,c768 tclass=file permissive=0

Change-Id: I9a70417149c3239b89cc4266942cb3de4da34a4f
Signed-off-by: Kneba <abenkenary3@gmail.com>
Signed-off-by: dotkit <ewprjkt@proton.me>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
RobertGarciaa
75a8923e3b sm8350-common: sepolicy: Address some sepolicy denials
avc:  denied  { read } for  name="cmdline" dev="proc" ino=59888 scontext=u:r:vendor_hal_perf_default:s0 tcontext=u:r:hal_camera_default:s0 tclass=file permissive=0
avc:  denied  { read } for  name="comm" dev="proc" ino=59889 scontext=u:r:vendor_hal_perf_default:s0 tcontext=u:r:hal_camera_default:s0 tclass=file permissive=0

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Tri Vo
70a1c3573f sm8350-common: sepolicy: Neverallow app open access to /dev/ashmem
- Fixes scroll lag in apps such as twitter etc.

Apps are no longer allowed open access to /dev/ashmem, unless they
target API level < Q.

Bug: 113362644
Test: device boots, Chrome, instant apps work
Change-Id: I1cff08f26159fbf48a42afa7cfa08eafa1936f42

Signed-off-by: BladeRunner-A2C <prisoner56898@protonmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
¨raystef66¨
3a4d78666e sm8350-common: sepolicy: Adress isolated_app denial
* SELinux : avc:  denied  { find } for pid=19014 uid=99025 name=content_capture scontext=u:r:isolated_app:s0:c512,c768 tcontext=u:object_r:content_capture_service:s0 tclass=service_manager permissive=0
* SELinux : avc:  denied  { find } for pid=11474 uid=99937 name=content_capture scontext=u:r:isolated_app:s0:c512,c768 tcontext=u:object_r:content_capture_service:s0 tclass=service_manager permissive=0

Signed-off-by: RobertGarciaa <chae0218@naver.com>
Change-Id: Ia59e3989a9f0c2aae930f61ed9e266659f6c92fa
2025-01-07 22:12:42 +09:00
minaripenguin
dfeef4b611 sm8350-common: sepolicy: Resolve qemu_hw_prop denial
avc: denied { read } for name="u:object_r:qemu_hw_prop:s0" dev="tmpfs" ino=1316 scontext=u:r:system_app:s0 tcontext=u:object_r:qemu_hw_prop:s0 tclass=file permissive=0
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
wshamroukh
8fa2408226 sm8350-common: sepolicy: dontaudit camera hal default_prop
avc: denied { read } for name="u:object_r:default_prop:s0" dev="tmpfs" ino=2320 scontext=u:r:hal_camera_default:s0 tcontext=u:object_r:default_prop:s0 tclass=file permissive=0

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
wshamroukh
0630363845 sm8350-common: sepolicy: address denials
W libc    : Access denied finding property "ro.vendor.aware_available"
avc: denied { read } for name="pagetypeinfo" dev="proc" ino=4026531857 scontext=u:r:system_app:s0 tcontext=u:object_r:proc_pagetypeinfo:s0 tclass=file permissive=0
2025-01-07 22:12:42 +09:00
Владимир
ddbcf5bfac sm8350-common: silence log spam OpenGLRenderer
E OpenGLRenderer: Unable to match the desired swap behavior.

Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Gareth Kitchen
d24746616d sm8350-common: gps: Localise NTP to improve GPS TTFF
Testing response times to time.android.com from around the globe reveals
in ms:-

Europe			 <30
Middle East		 <68
North America		<150
Johannesburg		 183
Buenos Aires		 220
Tokyo			 226
Sydney			 276
Hong Kong		 285
Brisbane		 295
Mumbai			 349
Beijing			4691
Shanghai		4906
Russia			 n/a

Whilst time.android.com is NOT used for GPS NTP, North American time servers
are, by specifying north-america.pool.ntp.org as default in the framework,
to align with pixel devices.  I am assuming similar response times to these
servers from around the world.

Great for North America and it appears Europe but it does not address the
global issue. Also, the pool.ntp.org project forbids both hardware and
software vendors from using these default zone names.
http://www.pool.ntp.org/en/vendors.html

It makes sense, therefore, to leverage the ntp.org's existing 'android' vendor
name to make the default ntp server for GPS purposes:
1.android.pool.ntp.org this will return a random but accurate NTP server in
close geopraphic proximity to the device.

Testing on my own build in the UK seems to improve hot and cold TTFF
considerably.

Change-Id: I144af45757efa35b32daf034eece6e046d2bde79
Signed-off-by: Chenyang Zhong <zhongcy95@gmail.com>
Signed-off-by: Adithya R <gh0strider.2k18.reborn@gmail.com>
Signed-off-by: RobertGarciaa <chae0218@naver.com>
2025-01-07 22:12:42 +09:00
Yumi Yukimura
6fda944d47 sm8350-common: Switch to QTI Memtrack AIDL HAL
Change-Id: Ibcbaff02fd56fbccc3a88c01a5f46a89cb212ef5
2025-01-07 08:22:35 +01:00
Giovanni Ricca
22d764c9b5 fixup! sm8350-common: do not manually build dependencies
Change-Id: I0b2ea4e8e0f8872e25f71c0075e7b6730aa75a83
2025-01-07 08:22:35 +01:00
175 changed files with 7383 additions and 8252 deletions

View File

@@ -5,10 +5,8 @@
soong_namespace {
imports: [
"hardware/qcom-caf/bootctrl",
"hardware/xiaomi",
"hardware/google/interfaces",
"hardware/google/pixel",
"hardware/lineage/interfaces/power-libperfmgr",
],
}

39
Android.mk Normal file
View File

@@ -0,0 +1,39 @@
#
# Copyright (C) 2020-2024 The LineageOS Project
#
# SPDX-License-Identifier: Apache-2.0
#
LOCAL_PATH := $(call my-dir)
ifneq ($(filter haydn lisa mars odin redwood renoir star venus,$(TARGET_DEVICE)),)
include $(call all-makefiles-under,$(LOCAL_PATH))
include $(CLEAR_VARS)
FIRMWARE_MOUNT_POINT := $(TARGET_OUT_VENDOR)/firmware_mnt
$(FIRMWARE_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE)
@echo "Creating $(FIRMWARE_MOUNT_POINT)"
@mkdir -p $(TARGET_OUT_VENDOR)/firmware_mnt
BT_FIRMWARE_MOUNT_POINT := $(TARGET_OUT_VENDOR)/bt_firmware
$(BT_FIRMWARE_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE)
@echo "Creating $(BT_FIRMWARE_MOUNT_POINT)"
@mkdir -p $(TARGET_OUT_VENDOR)/bt_firmware
DSP_MOUNT_POINT := $(TARGET_OUT_VENDOR)/dsp
$(DSP_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE)
@echo "Creating $(DSP_MOUNT_POINT)"
@mkdir -p $(TARGET_OUT_VENDOR)/dsp
VM_SYSTEM_MOUNT_POINT := $(TARGET_OUT_VENDOR)/vm-system
$(VM_SYSTEM_MOUNT_POINT): $(LOCAL_INSTALLED_MODULE)
@echo "Creating $(VM_SYSTEM_MOUNT_POINT)"
@mkdir -p $(TARGET_OUT_VENDOR)/vm-system
ALL_DEFAULT_INSTALLED_MODULES += $(FIRMWARE_MOUNT_POINT)
ALL_DEFAULT_INSTALLED_MODULES += $(BT_FIRMWARE_MOUNT_POINT)
ALL_DEFAULT_INSTALLED_MODULES += $(DSP_MOUNT_POINT)
ALL_DEFAULT_INSTALLED_MODULES += $(VM_SYSTEM_MOUNT_POINT)
endif

View File

@@ -6,13 +6,13 @@
COMMON_PATH := device/xiaomi/sm8350-common
BOARD_VENDOR := xiaomi
# Ignore overriding commands errors
BUILD_BROKEN_DUP_RULES := true
BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true
# A/B
AB_OTA_UPDATER := true
AB_OTA_PARTITIONS += \
boot \
dtbo \
@@ -28,22 +28,18 @@ AB_OTA_PARTITIONS += \
# Architecture
TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-2a-dotprod
TARGET_ARCH_VARIANT := armv8-2a
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 :=
TARGET_CPU_VARIANT := cortex-a76
TARGET_CPU_VARIANT := generic
TARGET_CPU_VARIANT_RUNTIME := kryo385
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv8-2a
TARGET_2ND_ARCH_VARIANT := armv8-a
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := cortex-a76
# ART
ART_BUILD_TARGET_NDEBUG := true
ART_BUILD_TARGET_DEBUG := false
ART_BUILD_HOST_NDEBUG := true
ART_BUILD_HOST_DEBUG := false
TARGET_2ND_CPU_VARIANT := generic
TARGET_2ND_CPU_VARIANT_RUNTIME := kryo385
# Audio
AUDIO_FEATURE_ENABLED_EXTENDED_COMPRESS_FORMAT := true
@@ -55,12 +51,14 @@ TARGET_PROVIDES_AUDIO_EXTNS := true
# Bootloader
TARGET_NO_BOOTLOADER := true
# Camera
TARGET_CAMERA_SERVICE_EXT_LIB := //$(COMMON_PATH):libcameraservice_extension.xiaomi_sm8350
# Display
TARGET_SCREEN_DENSITY ?= 440
# Dolby Vision
SOONG_CONFIG_NAMESPACES += dolby_vision
SOONG_CONFIG_dolby_vision += enabled
SOONG_CONFIG_dolby_vision_enabled := true
# Filesystem
TARGET_FS_CONFIG_GEN := $(COMMON_PATH)/config.fs
@@ -68,14 +66,12 @@ TARGET_FS_CONFIG_GEN := $(COMMON_PATH)/config.fs
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE := default
# HIDL
DEVICE_MATRIX_FILE := hardware/qcom-caf/common/compatibility_matrix.xml
DEVICE_MATRIX_FILE := $(COMMON_PATH)/hidl/compatibility_matrix.xml
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \
hardware/qcom-caf/common/vendor_framework_compatibility_matrix.xml \
hardware/xiaomi/vintf/xiaomi_framework_compatibility_matrix.xml \
vendor/lineage/config/device_framework_matrix.xml \
$(COMMON_PATH)/hidl/vendor_framework_compatibility_matrix.xml \
$(COMMON_PATH)/hidl/xiaomi_framework_compatibility_matrix.xml
$(COMMON_PATH)/hidl/xiaomi_framework_compatibility_matrix.xml \
vendor/lineage/config/device_framework_matrix.xml
DEVICE_MANIFEST_FILE := \
$(COMMON_PATH)/hidl/manifest_lahaina.xml \
@@ -91,12 +87,15 @@ BOARD_BOOT_HEADER_VERSION := 3
BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION)
TARGET_KERNEL_ADDITIONAL_FLAGS := TARGET_PRODUCT=$(PRODUCT_DEVICE)
TARGET_KERNEL_CLANG_VERSION := clang-r522817
TARGET_KERNEL_CLANG_PATH := $(shell pwd)/prebuilts/clang/host/linux-x86/clang-r522817
TARGET_KERNEL_NO_GCC := true
TARGET_KERNEL_SOURCE := kernel/xiaomi/sm8350
TARGET_KERNEL_CONFIG := vendor/lahaina-qgki_defconfig vendor/debugfs.config vendor/xiaomi_QGKI.config
BOARD_KERNEL_CMDLINE += androidboot.console=ttyMSM0
BOARD_KERNEL_CMDLINE += androidboot.hardware=qcom
BOARD_KERNEL_CMDLINE += androidboot.memcg=1
BOARD_KERNEL_CMDLINE += androidboot.usbcontroller=a600000.dwc3
BOARD_KERNEL_CMDLINE += cgroup.memory=nokmem,nosocket
BOARD_KERNEL_CMDLINE += console=ttyMSM0,115200n8
@@ -107,7 +106,9 @@ BOARD_KERNEL_CMDLINE += swiotlb=0
BOARD_KERNEL_CMDLINE += pcie_ports=compat
BOARD_KERNEL_CMDLINE += iptable_raw.raw_before_defrag=1
BOARD_KERNEL_CMDLINE += ip6table_raw.raw_before_defrag=1
BOARD_KERNEL_CMDLINE += androidboot.init_fatal_reboot_target=recovery
# Lineage Health
TARGET_HEALTH_CHARGING_CONTROL_SUPPORTS_BYPASS := false
# Partitions
BOARD_FLASH_BLOCK_SIZE := 131072
@@ -141,6 +142,12 @@ TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
# Platform
TARGET_BOARD_PLATFORM := lahaina
# Power
TARGET_POWERHAL_MODE_EXT := $(COMMON_PATH)/power/power-mode.cpp
# PowerShare
TARGET_POWERSHARE_PATH := /sys/class/qcom-battery/reverse_chg_mode
# Properties
TARGET_ODM_PROP += $(COMMON_PATH)/odm.prop
TARGET_SYSTEM_PROP += $(COMMON_PATH)/system.prop
@@ -162,16 +169,14 @@ TARGET_USERIMAGES_USE_F2FS := true
ENABLE_VENDOR_RIL_SERVICE := true
# Security patch level
VENDOR_SECURITY_PATCH := 2025-06-05
VENDOR_SECURITY_PATCH := 2024-11-01
# Sepolicy
include device/lineage/sepolicy/libperfmgr/sepolicy.mk
include device/qcom/sepolicy_vndr/SEPolicy.mk
SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/private
SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/public
BOARD_VENDOR_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/vendor
SELINUX_IGNORE_NEVERALLOWS := true
# Verified Boot
BOARD_AVB_ENABLE := true

View File

@@ -42,6 +42,15 @@
<library name="audiosphere" path="libasphere.so"/>
<library name="shoebox" path="libshoebox.so"/>
<library name="v4a_re" path="libv4a_re.so"/>
<!--DOLBY DAP-->
<library name="dap" path="libswdap.so"/>
<!--DOLBY END-->
<!--DOLBY GAME-->
<library name="gamedap" path="libswgamedap.so"/>
<!--DOLBY END-->
<!--DOLBY VQE-->
<library name="vqe" path="libswvqe.so"/>
<!--DOLBY END-->
</libraries>
<effects>
<effectProxy name="bassboost" library="proxy" uuid="14804144-a5ee-4d24-aa88-0002a5d5c51b">
@@ -78,7 +87,6 @@
<libhw library="visualizer_hw" uuid="7a8044a0-1a71-11e3-a184-0002a5d5c51b"/>
</effectProxy>
<effect name="downmix" library="downmix" uuid="93f04452-e4fe-41cc-91f9-e475b6d1d69f"/>
<effect name="hw_acc" library="offload_bundle" uuid="7d1580bd-297f-4683-9239-e475b6d1d69f"/>
<effect name="loudness_enhancer" library="loudness_enhancer" uuid="fa415329-2034-4bea-b5dc-5b381c8d1e2c"/>
<effect name="dynamics_processing" library="dynamics_processing" uuid="e0e6539b-1781-7261-676f-6d7573696340"/>
<effect name="aec" library="audio_pre_processing" uuid="0f8d0d2a-59e5-45fe-b6e4-248c8a799109"/>
@@ -91,6 +99,15 @@
<effect name="audiosphere" library="audiosphere" uuid="184e62ab-2d19-4364-9d1b-c0a40733866c"/>
<effect name="shoebox" library="shoebox" uuid="1eab784c-1a36-4b2a-b7fc-e34c44cab89e"/>
<effect name="v4a_standard_re" library="v4a_re" uuid="90380da3-8536-4744-a6a3-5731970e640f"/>
<!--DOLBY DAP-->
<effect name="dap" library="dap" uuid="9d4921da-8225-4f29-aefa-39537a04bcaa"/>
<!--DOLBY END-->
<!--DOLBY GAME-->
<effect name="gamedap" library="gamedap" uuid="3783c334-d3a0-4d13-874f-0032e5fb80e2"/>
<!--DOLBY END-->
<!--DOLBY VQE-->
<effect name="vqe" library="vqe" uuid="64a0f614-7fa4-48b8-b081-d59dc954616f"/>
<!--DOLBY END-->
</effects>
<postprocess>
<stream type="music">

View File

@@ -1,5 +1,5 @@
//
// Copyright (C) 2022 The LineageOS Project
// 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.
@@ -12,11 +12,11 @@
// 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.
//
cc_library_static {
name: "libcameraservice_extension.xiaomi_sm8350",
srcs: ["CameraProviderExtension.cpp"],
include_dirs: [
"frameworks/av/services/camera/libcameraservice/common"
],
cc_library_shared {
name: "android.hardware.boot@1.2-impl-qti",
stem: "android.hardware.boot@1.0-impl-1.2-qti",
defaults: ["android.hardware.boot@1.2-impl-qti_defaults"],
static_libs: ["libgptutils.xiaomi_sm8350"],
}

View File

@@ -1,75 +0,0 @@
/*
* Copyright (C) 2024 LibreMobileOS Foundation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "CameraProviderExtension.h"
#include <fstream>
#define TORCH_BRIGHTNESS "brightness"
#define TORCH_MAX_BRIGHTNESS "max_brightness"
#define TOGGLE_SWITCH "/sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm8350c@2:qcom,flash_led@ee00/leds/led:switch_2/brightness"
static std::string kTorchLedPath = "/sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm8350c@2:qcom,flash_led@ee00/leds/led:torch_0";
/**
* Write value to path and close file.
*/
template <typename T>
static void set(const std::string& path, const T& value) {
std::ofstream file(path);
file << value;
}
/**
* Read value from the path and close file.
*/
template <typename T>
static T get(const std::string& path, const T& def) {
std::ifstream file(path);
T result;
file >> result;
return file.fail() ? def : result;
}
bool supportsTorchStrengthControlExt() {
return true;
}
bool supportsSetTorchModeExt() {
return false;
}
int32_t getTorchDefaultStrengthLevelExt() {
// Our default value is 75. This corresponds to 15%.
// As we have changed the maximum value, 59% now corresponds to 75.
return 59;
}
int32_t getTorchMaxStrengthLevelExt() {
// 255 out of 500 is a sane brightness.
// Let's cap it to 255 as max, we can go much higher, but I don't want to test this.
return 255;
}
int32_t getTorchStrengthLevelExt() {
// We write same value in the both LEDs,
// so get from one.
auto node = kTorchLedPath + "/" + TORCH_BRIGHTNESS;
return get(node, 0);
}
void setTorchStrengthLevelExt(int32_t torchStrength, bool enabled) {
set(TOGGLE_SWITCH, 0);
auto node = kTorchLedPath + "/" + TORCH_BRIGHTNESS;
set(node, torchStrength);
if (enabled)
set(TOGGLE_SWITCH, 255);
}
void setTorchModeExt(bool enabled) {
int32_t strength = getTorchDefaultStrengthLevelExt();
setTorchStrengthLevelExt(enabled ? strength : 0, enabled);
}

View File

@@ -1,17 +1,13 @@
#
# Copyright (C) 2024 The LineageOS Project
# Copyright (C) 2020 The LineageOS Project
#
# SPDX-License-Identifier: Apache-2.0
#
# Inherit from those products. Most specific first.
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
TARGET_SUPPORTS_OMX_SERVICE := false
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
# Call the ViperFX Config
$(call inherit-product-if-exists, packages/apps/ViPER4AndroidFX/config.mk)
# Enable virtual A/B OTA
$(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/launch_with_vendor_ramdisk.mk)
@@ -47,6 +43,9 @@ PRODUCT_PACKAGES += \
android.hardware.audio@6.0-impl \
android.hardware.audio.effect@6.0-impl \
android.hardware.audio.service \
android.hardware.soundtrigger@2.0-impl \
android.hardware.soundtrigger@2.1-impl \
android.hardware.soundtrigger@2.2-impl \
android.hardware.soundtrigger@2.3-impl
PRODUCT_COPY_FILES += \
@@ -77,6 +76,10 @@ PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml \
frameworks/native/data/etc/android.software.midi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.midi.xml
# Audio configs (Dolby Atmos)
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/audio/dax-default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/dolby/dax-default.xml \
# A/B
AB_OTA_POSTINSTALL_CONFIG += \
RUN_POSTINSTALL_system=true \
@@ -111,8 +114,12 @@ TARGET_SCREEN_WIDTH := 1080
# Boot control
PRODUCT_PACKAGES += \
android.hardware.boot-service.qti \
android.hardware.boot-service.qti.recovery
android.hardware.boot@1.2-impl-qti \
android.hardware.boot@1.2-impl-qti.recovery \
android.hardware.boot@1.2-service
PRODUCT_PACKAGES_DEBUG += \
bootctl
# Camera
PRODUCT_PACKAGES += \
@@ -131,14 +138,12 @@ PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml \
frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml
$(call soong_config_set,libcameraservice,ext_lib,libcameraservice_extension.xiaomi_sm8350)
# DebugFS
PRODUCT_SET_DEBUGFS_RESTRICTIONS := true
# Device-specific settings
PRODUCT_PACKAGES += \
DSPVolumeSynchronizer \
XiaomiDolby \
XiaomiParts
# Display
@@ -151,15 +156,9 @@ PRODUCT_PACKAGES += \
vendor.qti.hardware.display.composer-service.xml \
vendor.qti.hardware.memtrack-service
PRODUCT_PACKAGES += \
android.hardware.graphics.allocator@3.0
PRODUCT_COPY_FILES += \
hardware/qcom-caf/sm8350/display/config/snapdragon_color_libs_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/snapdragon_color_libs_config.xml
# Dolby Vision
$(call soong_config_set, dolby_vision, enabled, true)
# DRM
PRODUCT_PACKAGES += \
android.hardware.drm-service.clearkey
@@ -168,10 +167,6 @@ PRODUCT_PACKAGES += \
PRODUCT_PACKAGES += \
fastbootd
# Fastcharge
PRODUCT_PACKAGES += \
vendor.lineage.fastcharge@1.0-service.venus
# Fingerprint
PRODUCT_PACKAGES += \
android.hardware.biometrics.fingerprint-service.xiaomi
@@ -262,7 +257,7 @@ PRODUCT_PACKAGES += \
# IR
PRODUCT_PACKAGES += \
android.hardware.ir-service.lineage
android.hardware.ir-service.xiaomi
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.consumerir.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.consumerir.xml
@@ -274,9 +269,17 @@ PRODUCT_ENABLE_UFFD_GC := false
PRODUCT_PACKAGES += \
vendor.lineage.health-service.default
$(call soong_config_set,lineage_health,charging_control_supports_bypass,false)
# Media
PRODUCT_PACKAGES += \
libmm-omxcore \
libOmxAacEnc \
libOmxAmrEnc \
libOmxCore \
libOmxEvrcEnc \
libOmxG711Enc \
libOmxQcelp13Enc \
libstagefrighthw
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/media/init.qti.media.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.qti.media.sh \
$(LOCAL_PATH)/media/init.qti.media.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.qti.media.rc
@@ -302,8 +305,7 @@ PRODUCT_COPY_FILES += \
# Network
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml \
frameworks/native/data/etc/android.software.ipsec_tunnel_migration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnel_migration.xml
frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml
# NFC
PRODUCT_PACKAGES += \
@@ -332,25 +334,18 @@ DEVICE_PACKAGE_OVERLAYS += \
PRODUCT_ENFORCE_RRO_TARGETS := *
# Partitions
PRODUCT_PACKAGES += \
vendor_bt_firmware_mountpoint \
vendor_dsp_mountpoint \
vendor_firmware_mnt_mountpoint
PRODUCT_BUILD_SUPER_PARTITION := false
PRODUCT_USE_DYNAMIC_PARTITIONS := true
# Power
PRODUCT_PACKAGES += \
android.hardware.power-service.lineage-libperfmgr \
libqti-perfd-client
android.hardware.power-service-qti
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json \
$(LOCAL_PATH)/configs/powerhint.json:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.json
$(LOCAL_PATH)/configs/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json
# PowerShare
$(call soong_config_set,lineage_powershare,powershare_path,/sys/class/qcom-battery/reverse_chg_mode)
PRODUCT_COPY_FILES += \
vendor/qcom/opensource/power/config/lahaina/powerhint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.xml
# QTI
PRODUCT_COPY_FILES += \
@@ -361,9 +356,13 @@ PRODUCT_COPY_FILES += \
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/rootdir/etc/init.recovery.qcom.rc:$(TARGET_COPY_OUT_RECOVERY)/root/init.recovery.qcom.rc
# RenderScript HAL
PRODUCT_PACKAGES += \
android.hardware.renderscript@1.0-impl
# QTI fwk-detect
PRODUCT_PACKAGES += \
libvndfwk_detect_jni.qti.vendor # Needed by CNE app
libvndfwk_detect_jni.qti.vendor:64 # Needed by CNE app
# RIL
PRODUCT_PACKAGES += \
@@ -387,26 +386,27 @@ PRODUCT_COPY_FILES += \
# Soong namespaces
PRODUCT_SOONG_NAMESPACES += \
$(LOCAL_PATH) \
hardware/google/interfaces \
hardware/google/pixel \
hardware/lineage/interfaces/power-libperfmgr \
hardware/qcom-caf/common/libqti-perfd-client \
hardware/xiaomi
# Telephony
PRODUCT_PACKAGES += \
extphonelib \
extphonelib-product \
extphonelib.xml \
extphonelib_product.xml \
ims-ext-common \
ims_ext_common.xml \
qti-telephony-hidl-wrapper \
qti-telephony-hidl-wrapper-prd \
qti_telephony_hidl_wrapper.xml \
qti_telephony_hidl_wrapper_prd.xml \
qti-telephony-utils \
qti-telephony-utils-prd \
qti_telephony_utils.xml \
qti_telephony_utils_prd.xml \
telephony-ext \
xiaomi-telephony-stub
PRODUCT_PACKAGES += \
qcrilNrDb_vendor
PRODUCT_BOOT_JARS += \
telephony-ext \
xiaomi-telephony-stub
@@ -435,6 +435,9 @@ PRODUCT_PACKAGES += \
update_engine_sideload \
update_verifier
PRODUCT_PACKAGES_DEBUG += \
update_engine_client
# USB
PRODUCT_PACKAGES += \
android.hardware.usb-service.qti
@@ -450,6 +453,9 @@ PRODUCT_PACKAGES += \
PRODUCT_COPY_FILES += \
vendor/qcom/opensource/vibrator/excluded-input-devices.xml:$(TARGET_COPY_OUT_VENDOR)/etc/excluded-input-devices.xml
# Viper
$(call inherit-product, packages/apps/ViPER4AndroidFX/config.mk)
# VNDK
# vndservicemanager has been removed from API30 devices (aosp/1235751)
# but we still need it for display services.
@@ -473,6 +479,7 @@ PRODUCT_PACKAGES += \
android.hardware.wifi-service \
hostapd \
libwifi-hal-qcom \
libwpa_client \
WifiOverlay \
wpa_cli \
wpa_supplicant \
@@ -493,3 +500,7 @@ PRODUCT_COPY_FILES += \
# WiFi firmware symlinks
PRODUCT_PACKAGES += \
firmware_WCNSS_qcom_cfg.ini_symlink
# WiFi Display
PRODUCT_BOOT_JARS += \
WfdCommon

File diff suppressed because it is too large Load Diff

View File

@@ -1,622 +0,0 @@
{
"Nodes": [
{
"Name": "CPULittleClusterMaxFreq",
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq",
"Values": [
"9999999",
"1612800"
],
"DefaultIndex": 0,
"ResetOnInit": true
},
{
"Name": "CPULittleClusterMinFreq",
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq",
"Values": [
"9999999",
"1708800",
"1305600",
"691200"
],
"ResetOnInit": true
},
{
"Name": "CPULittleClusterUpRateLimit",
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/schedutil/up_rate_limit_us",
"Values": [
"500",
"2000"
],
"ResetOnInit": true
},
{
"Name": "CPULittleClusterDownRateLimit",
"Path": "/sys/devices/system/cpu/cpu0/cpufreq/schedutil/down_rate_limit_us",
"Values": [
"20000",
"2000"
],
"ResetOnInit": true
},
{
"Name": "CPUBigClusterMaxFreq",
"Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq",
"Values": [
"9999999",
"1324800"
],
"DefaultIndex": 0,
"ResetOnInit": true
},
{
"Name": "CPUBigClusterMinFreq",
"Path": "/sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq",
"Values": [
"9999999",
"1324800",
"1075200",
"710400"
],
"ResetOnInit": true
},
{
"Name": "CPUBigClusterUpRateLimit",
"Path": "/sys/devices/system/cpu/cpu4/cpufreq/schedutil/up_rate_limit_us",
"Values": [
"500",
"2000"
],
"ResetOnInit": true
},
{
"Name": "CPUBigClusterDownRateLimit",
"Path": "/sys/devices/system/cpu/cpu4/cpufreq/schedutil/down_rate_limit_us",
"Values": [
"10000",
"2000"
],
"ResetOnInit": true
},
{
"Name": "CPUBigPlusClusterMaxFreq",
"Path": "/sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq",
"Values": [
"9999999",
"1555200"
],
"DefaultIndex": 0,
"ResetOnInit": true
},
{
"Name": "CPUBigPlusClusterMinFreq",
"Path": "/sys/devices/system/cpu/cpu7/cpufreq/scaling_min_freq",
"Values": [
"9999999",
"1075200",
"844800"
],
"ResetOnInit": true
},
{
"Name": "CPUBigPlusClusterUpRateLimit",
"Path": "/sys/devices/system/cpu/cpu7/cpufreq/schedutil/up_rate_limit_us",
"Values": [
"500",
"2000"
],
"ResetOnInit": true
},
{
"Name": "CPUBigPlusClusterDownRateLimit",
"Path": "/sys/devices/system/cpu/cpu7/cpufreq/schedutil/down_rate_limit_us",
"Values": [
"5000",
"2000"
],
"ResetOnInit": true
},
{
"Name": "UclampTAMin",
"Path": "/dev/cpuctl/top-app/cpu.uclamp.min",
"Values": [
"0",
"25",
"50"
],
"DefaultIndex": 0,
"ResetOnInit": true
},
{
"Name": "UclampTALatency",
"Path": "/dev/cpuctl/top-app/cpu.uclamp.latency_sensitive",
"Values": [
"1",
"0"
],
"ResetOnInit": true
},
{
"Name": "UclampFgMin",
"Path": "/dev/cpuctl/foreground/cpu.uclamp.min",
"Values": [
"0",
"50"
],
"DefaultIndex": 0,
"ResetOnInit": true
},
{
"Name": "SchedPreferSpread",
"Path": "/proc/sys/kernel/sched_prefer_spread",
"Values": [
"4",
"0"
],
"ResetOnInit": true
},
{
"Name": "SchedBusyHystNs",
"Path": "/proc/sys/kernel/sched_busy_hyst_ns",
"Values": [
"99000000",
"3000000",
"0"
],
"ResetOnInit": true
},
{
"Name": "SchedBusyHystEnableCPUs",
"Path": "/proc/sys/kernel/sched_busy_hysteresis_enable_cpus",
"Values": [
"255",
"15",
"0"
],
"ResetOnInit": true
},
{
"Name": "SchedMinTaskUtilForBoost",
"Path": "/proc/sys/kernel/sched_min_task_util_for_boost",
"Values": [
"0",
"51"
],
"ResetOnInit": true
},
{
"Name": "SchedMinTaskUtilForColoc",
"Path": "/proc/sys/kernel/sched_min_task_util_for_colocation",
"Values": [
"0",
"35"
],
"ResetOnInit": true
},
{
"Name": "GPUMaxFreq",
"Path": "/sys/class/kgsl/kgsl-3d0/devfreq/max_freq",
"Values": [
"840000000",
"540000000",
"443000000"
],
"DefaultIndex": 0,
"ResetOnInit": true
},
{
"Name": "GPUMinFreq",
"Path": "/sys/class/kgsl/kgsl-3d0/devfreq/min_freq",
"Values": [
"540000000",
"379000000",
"315000000"
],
"ResetOnInit": true
},
{
"Name": "GPUForceRailOn",
"Path": "/sys/class/kgsl/kgsl-3d0/force_rail_on",
"Values": [
"1",
"0"
],
"ResetOnInit": true
},
{
"Name": "GPUForceClkOn",
"Path": "/sys/class/kgsl/kgsl-3d0/force_clk_on",
"Values": [
"1",
"0"
],
"ResetOnInit": true
},
{
"Name": "GPUIdleTimer",
"Path": "/sys/class/kgsl/kgsl-3d0/idle_timer",
"Values": [
"10000",
"58"
],
"ResetOnInit": true
},
{
"Name": "CPUBWHystTriggerCount",
"Path": "/sys/class/devfreq/soc:qcom,cpu-cpu-llcc-bw/bw_hwmon/hyst_trigger_count",
"Values": [
"0",
"3"
],
"ResetOnInit": true
},
{
"Name": "CPUBWHistMemory",
"Path": "/sys/class/devfreq/soc:qcom,cpu-cpu-llcc-bw/bw_hwmon/hist_memory",
"Values": [
"0",
"20"
],
"ResetOnInit": true
},
{
"Name": "CPUBWHystLength",
"Path": "/sys/class/devfreq/soc:qcom,cpu-cpu-llcc-bw/bw_hwmon/hyst_length",
"Values": [
"0",
"10"
],
"ResetOnInit": true
},
{
"Name": "CPUBWMinFreq",
"Path": "/sys/class/devfreq/soc:qcom,cpu-cpu-llcc-bw/min_freq",
"Values": [
"12298",
"9155",
"4577"
],
"ResetOnInit": true
},
{
"Name": "LLCCBWMinFreq",
"Path": "/sys/class/devfreq/soc:qcom,cpu-llcc-ddr-bw/min_freq",
"Values": [
"6515",
"3879",
"762"
],
"ResetOnInit": true
},
{
"Name": "PowerHALMainState",
"Path": "vendor.powerhal.state",
"Values": [
"SUSTAINED_PERFORMANCE",
""
],
"Type": "Property"
},
{
"Name": "PowerHALRenderingState",
"Path": "vendor.powerhal.rendering",
"Values": [
"EXPENSIVE_RENDERING",
""
],
"Type": "Property"
},
{
"Name": "DoubleTapToWake",
"Path": "/sys/devices/virtual/touch/tp_dev/double_tap",
"Values": [
"0",
"1"
],
"DefaultIndex": 0,
"ResetOnInit": true
}
],
"Actions": [
{
"PowerHint": "SUSTAINED_PERFORMANCE",
"Node": "PowerHALMainState",
"Duration": 0,
"Value": "SUSTAINED_PERFORMANCE"
},
{
"PowerHint": "SUSTAINED_PERFORMANCE",
"Node": "CPUBigClusterMaxFreq",
"Duration": 0,
"Value": "1324800"
},
{
"PowerHint": "SUSTAINED_PERFORMANCE",
"Node": "CPUBigPlusClusterMaxFreq",
"Duration": 0,
"Value": "1555200"
},
{
"PowerHint": "SUSTAINED_PERFORMANCE",
"Node": "CPULittleClusterMaxFreq",
"Duration": 0,
"Value": "1612800"
},
{
"PowerHint": "SUSTAINED_PERFORMANCE",
"Node": "GPUMaxFreq",
"Duration": 0,
"Value": "540000000"
},
{
"PowerHint": "INTERACTION",
"Node": "CPUBigClusterMinFreq",
"Duration": 0,
"Value": "1324800"
},
{
"PowerHint": "INTERACTION",
"Node": "CPULittleClusterMinFreq",
"Duration": 0,
"Value": "1708800"
},
{
"PowerHint": "INTERACTION",
"Node": "UclampTAMin",
"Duration": 0,
"Value": "25"
},
{
"PowerHint": "INTERACTION",
"Node": "UclampTALatency",
"Duration": 0,
"Value": "1"
},
{
"PowerHint": "INTERACTION",
"Node": "SchedPreferSpread",
"Duration": 0,
"Value": "4"
},
{
"PowerHint": "INTERACTION",
"Node": "SchedBusyHystNs",
"Duration": 0,
"Value": "99000000"
},
{
"PowerHint": "INTERACTION",
"Node": "SchedBusyHystEnableCPUs",
"Duration": 0,
"Value": "255"
},
{
"PowerHint": "INTERACTION",
"Node": "SchedMinTaskUtilForBoost",
"Duration": 0,
"Value": "0"
},
{
"PowerHint": "INTERACTION",
"Node": "SchedMinTaskUtilForColoc",
"Duration": 0,
"Value": "0"
},
{
"PowerHint": "INTERACTION",
"Node": "CPUBWHystTriggerCount",
"Duration": 0,
"Value": "0"
},
{
"PowerHint": "INTERACTION",
"Node": "CPUBWHystLength",
"Duration": 0,
"Value": "0"
},
{
"PowerHint": "INTERACTION",
"Node": "CPUBWHistMemory",
"Duration": 0,
"Value": "0"
},
{
"PowerHint": "INTERACTION",
"Node": "CPUBWMinFreq",
"Duration": 0,
"Value": "9155"
},
{
"PowerHint": "INTERACTION",
"Node": "LLCCBWMinFreq",
"Duration": 0,
"Value": "3879"
},
{
"PowerHint": "INTERACTIVE",
"Node": "CPULittleClusterUpRateLimit",
"Duration": 0,
"Value": "500"
},
{
"PowerHint": "INTERACTIVE",
"Node": "CPULittleClusterDownRateLimit",
"Duration": 0,
"Value": "20000"
},
{
"PowerHint": "INTERACTIVE",
"Node": "CPUBigClusterUpRateLimit",
"Duration": 0,
"Value": "500"
},
{
"PowerHint": "INTERACTIVE",
"Node": "CPUBigClusterDownRateLimit",
"Duration": 0,
"Value": "10000"
},
{
"PowerHint": "INTERACTIVE",
"Node": "CPUBigPlusClusterUpRateLimit",
"Duration": 0,
"Value": "500"
},
{
"PowerHint": "INTERACTIVE",
"Node": "CPUBigPlusClusterDownRateLimit",
"Duration": 0,
"Value": "5000"
},
{
"PowerHint": "INTERACTIVE",
"Node": "SchedBusyHystNs",
"Duration": 0,
"Value": "3000000"
},
{
"PowerHint": "INTERACTIVE",
"Node": "SchedBusyHystEnableCPUs",
"Duration": 0,
"Value": "15"
},
{
"PowerHint": "LAUNCH",
"Node": "CPUBigClusterMinFreq",
"Duration": 3000,
"Value": "9999999"
},
{
"PowerHint": "LAUNCH",
"Node": "CPULittleClusterMinFreq",
"Duration": 3000,
"Value": "9999999"
},
{
"PowerHint": "LAUNCH",
"Node": "UclampFgMin",
"Duration": 3000,
"Value": "50"
},
{
"PowerHint": "LAUNCH",
"Node": "CPUBWHystTriggerCount",
"Duration": 3000,
"Value": "0"
},
{
"PowerHint": "LAUNCH",
"Node": "CPUBWHystLength",
"Duration": 3000,
"Value": "0"
},
{
"PowerHint": "LAUNCH",
"Node": "CPUBWHistMemory",
"Duration": 3000,
"Value": "0"
},
{
"PowerHint": "LAUNCH",
"Node": "CPUBWMinFreq",
"Duration": 3000,
"Value": "12298"
},
{
"PowerHint": "LAUNCH",
"Node": "GPUForceClkOn",
"Duration": 3000,
"Value": "1"
},
{
"PowerHint": "LAUNCH",
"Node": "GPUForceRailOn",
"Duration": 3000,
"Value": "1"
},
{
"PowerHint": "LAUNCH",
"Node": "GPUIdleTimer",
"Duration": 3000,
"Value": "10000"
},
{
"PowerHint": "LAUNCH",
"Node": "LLCCBWMinFreq",
"Duration": 3000,
"Value": "6515"
},
{
"PowerHint": "EXPENSIVE_RENDERING",
"Node": "PowerHALRenderingState",
"Duration": 0,
"Value": "EXPENSIVE_RENDERING"
},
{
"PowerHint": "EXPENSIVE_RENDERING",
"Node": "GPUMinFreq",
"Duration": 0,
"Value": "540000000"
},
{
"PowerHint": "Flipendo",
"Node": "CPULittleClusterMaxFreq",
"Duration": 0,
"Value": "1612800"
},
{
"PowerHint": "Flipendo",
"Node": "CPUBigClusterMaxFreq",
"Duration": 0,
"Value": "1324800"
},
{
"PowerHint": "Flipendo",
"Node": "CPUBigPlusClusterMaxFreq",
"Duration": 0,
"Value": "1555200"
},
{
"PowerHint": "GAME",
"Node": "CPUBigClusterMinFreq",
"Duration": 0,
"Value": "1075200"
},
{
"PowerHint": "GAME",
"Node": "CPULittleClusterMinFreq",
"Duration": 0,
"Value": "9999999"
},
{
"PowerHint": "GAME",
"Node": "GPUMinFreq",
"Duration": 0,
"Value": "379000000"
},
{
"PowerHint": "GAME",
"Node": "CPULittleClusterDownRateLimit",
"Duration": 0,
"Value": "2000"
},
{
"PowerHint": "GAME",
"Node": "CPUBigClusterDownRateLimit",
"Duration": 0,
"Value": "2000"
},
{
"PowerHint": "GAME",
"Node": "CPUBigPlusClusterDownRateLimit",
"Duration": 0,
"Value": "2000"
},
{
"PowerHint": "DOUBLE_TAP_TO_WAKE",
"Node": "DoubleTapToWake",
"Duration": 0,
"Value": "1"
}
]
}

View File

@@ -1,3 +1,4 @@
libqti-perfd-client.so
libadsprpc.so
libcdsprpc.so
libsdsprpc.so

View File

@@ -9,6 +9,7 @@ from extract_utils.fixups_blob import (
blob_fixups_user_type,
)
from extract_utils.fixups_lib import (
lib_fixup_remove,
lib_fixups,
lib_fixups_user_type,
)
@@ -38,19 +39,16 @@ lib_fixups: lib_fixups_user_type = {
(
'com.qualcomm.qti.dpm.api@1.0',
'libmmosal',
'vendor.qti.diaghal@1.0',
'vendor.qti.hardware.wifidisplaysession@1.0',
'vendor.qti.imsrtpservice@3.0',
'vendor.xiaomi.hardware.misys@1.0',
'vendor.xiaomi.hardware.misys@2.0',
'vendor.xiaomi.hardware.misys@3.0',
'vendor.xiaomi.hardware.misys@4.0',
): lib_fixup_vendor_suffix,
(
'libOmxCore',
'libwpa_client',
): lib_fixup_remove,
}
blob_fixups: blob_fixups_user_type = {
'system_ext/bin/wfdservice64': blob_fixup()
.add_needed('libwfdservice_shim.so'),
'system_ext/etc/init/wfdservice.rc': blob_fixup()
.regex_replace(r'(start|stop) wfdservice\b', r'\1 wfdservice64'),
'system_ext/lib64/libwfdmmsrc_system.so': blob_fixup()

View File

@@ -1,19 +0,0 @@
cc_binary {
name: "vendor.lineage.fastcharge@1.0-service.venus",
relative_install_path: "hw",
init_rc: ["vendor.lineage.fastcharge@1.0-service.venus.rc"],
vintf_fragments: ["vendor.lineage.fastcharge@1.0-service.venus.xml"],
vendor: true,
shared_libs: [
"libbase",
"libbinder",
"libcutils",
"libhidlbase",
"libutils",
"vendor.lineage.fastcharge@1.0",
],
srcs: [
"FastCharge.cpp",
"service.cpp",
],
}

View File

@@ -1,59 +0,0 @@
/*
* Copyright (C) 2023 The LineageOS 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.
*/
#define LOG_TAG "fastcharge@1.0-service.venus"
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <cstdlib>
#include "FastCharge.h"
namespace vendor {
namespace lineage {
namespace fastcharge {
namespace V1_0 {
namespace implementation {
static constexpr const char *kFastChargingProp = "persist.vendor.sec.fastchg_enabled";
static constexpr bool FASTCHARGE_DEFAULT_SETTING = true;
FastCharge::FastCharge() {
android::base::SetProperty(kFastChargingProp, "true");
system("start batterysecret");
}
android::hardware::Return<bool> FastCharge::isEnabled() {
return android::hardware::Return<bool>(android::base::GetBoolProperty(kFastChargingProp, false));
}
android::hardware::Return<bool> FastCharge::setEnabled(bool enable) {
android::base::SetProperty(kFastChargingProp, enable ? "true" : "false");
if (enable) {
system("start batterysecret");
} else {
system("stop batterysecret");
}
return android::hardware::Return<bool>(enable);
}
} // namespace implementation
} // namespace V1_0
} // namespace fastcharge
} // namespace lineage
} // namespace vendor

View File

@@ -1,50 +0,0 @@
/*
* Copyright (C) 2023 The LineageOS 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 <hidl/MQDescriptor.h>
#include <hidl/Status.h>
#include <vendor/lineage/fastcharge/1.0/IFastCharge.h>
namespace vendor {
namespace lineage {
namespace fastcharge {
namespace V1_0 {
namespace implementation {
using ::android::sp;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_memory;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
using ::vendor::lineage::fastcharge::V1_0::IFastCharge;
struct FastCharge : public IFastCharge {
FastCharge();
Return<bool> isEnabled() override;
Return<bool> setEnabled(bool enable) override;
};
} // namespace implementation
} // namespace V1_0
} // namespace fastcharge
} // namespace lineage
} // namespace vendor

View File

@@ -1,50 +0,0 @@
/*
* Copyright (C) 2023 The LineageOS 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.
*/
#define LOG_TAG "fastcharge@1.0-service.venus"
#include <android-base/logging.h>
#include <hidl/HidlTransportSupport.h>
#include "FastCharge.h"
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using vendor::lineage::fastcharge::V1_0::IFastCharge;
using vendor::lineage::fastcharge::V1_0::implementation::FastCharge;
using android::OK;
using android::status_t;
int main() {
android::sp<FastCharge> service = new FastCharge();
configureRpcThreadpool(1, true);
status_t status = service->registerAsService();
if (status != OK) {
LOG(ERROR) << "Cannot register FastCharge HAL service.";
return 1;
}
LOG(INFO) << "FastCharge HAL service ready.";
joinRpcThreadpool();
LOG(ERROR) << "FastCharge HAL service failed to join thread pool.";
return 1;
}

View File

@@ -1,10 +0,0 @@
service vendor.fastcharge-hal-1-0 /vendor/bin/hw/vendor.lineage.fastcharge@1.0-service.venus
class hal
user system
group system
on property:persist.vendor.sec.fastchg_enabled=true
start batterysecret
on property:persist.vendor.sec.fastchg_enabled=false
stop batterysecret

View File

@@ -1,11 +0,0 @@
<manifest version="1.0" type="device">
<hal format="hidl">
<name>vendor.lineage.fastcharge</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>IFastCharge</name>
<instance>default</instance>
</interface>
</hal>
</manifest>

View File

@@ -1,18 +1,4 @@
GNSS_CFLAGS = [
"-Werror",
"-Wno-undefined-bool-conversion",
"-Wno-error=unused-parameter",
"-Wno-error=macro-redefined",
"-Wno-error=reorder",
"-Wno-error=missing-braces",
"-Wno-error=self-assign",
"-Wno-error=enum-conversion",
"-Wno-error=logical-op-parentheses",
"-Wno-error=null-arithmetic",
"-Wno-error=null-conversion",
"-Wno-error=parentheses-equality",
"-Wno-error=undefined-bool-conversion",
"-Wno-error=tautological-compare",
"-Wno-error=switch",
"-Wno-error=date-time",
]

50
gps/CleanSpec.mk Normal file
View File

@@ -0,0 +1,50 @@
# Copyright (C) 2007 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.
#
# If you don't need to do a full clean build but would like to touch
# a file or delete some intermediate files, add a clean step to the end
# of the list. These steps will only be run once, if they haven't been
# run before.
#
# E.g.:
# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
#
# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
# files that are missing or have been moved.
#
# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
# Use $(OUT_DIR) to refer to the "out" directory.
#
# If you need to re-do something that's already mentioned, just copy
# the command and add it to the bottom of the list. E.g., if a change
# that you made last week required touching a file and a change you
# made today requires touching the same file, just copy the old
# touch step and add it to the end of the list.
#
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
# For example:
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libloc_api*)

View File

@@ -51,6 +51,9 @@ void AGnss::statusCb(AGpsExtType type, LocAGpsStatusValue status) {
V2_0::IAGnssCallback::AGnssType aType;
IAGnssCallback::AGnssStatusValue aStatus;
// cache the AGps Type
mType = type;
switch (type) {
case LOC_AGPS_TYPE_SUPL:
aType = IAGnssCallback::AGnssType::SUPL;
@@ -84,13 +87,8 @@ void AGnss::statusCb(AGpsExtType type, LocAGpsStatusValue status) {
return;
}
mMutex.lock();
// cache the AGps Type
mType = type;
auto aGnssCbIface = mAGnssCbIface;
mMutex.unlock();
if (aGnssCbIface != nullptr) {
auto r = aGnssCbIface->agnssStatusCb(aType, aStatus);
if (mAGnssCbIface != nullptr) {
auto r = mAGnssCbIface->agnssStatusCb(aType, aStatus);
if (!r.isOk()) {
LOC_LOGw("Error invoking AGNSS status cb %s", r.description().c_str());
}
@@ -108,9 +106,7 @@ Return<void> AGnss::setCallback(const sp<V2_0::IAGnssCallback>& callback) {
}
// Save the interface
mMutex.lock();
mAGnssCbIface = callback;
mMutex.unlock();
AgpsCbInfo cbInfo = {};
cbInfo.statusV4Cb = (void*)agnssStatusIpV4Cb;

View File

@@ -21,7 +21,6 @@
#ifndef ANDROID_HARDWARE_GNSS_V2_0_AGNSS_H
#define ANDROID_HARDWARE_GNSS_V2_0_AGNSS_H
#include <mutex>
#include <android/hardware/gnss/2.0/IAGnss.h>
#include <hidl/Status.h>
#include <gps_extended_c.h>
@@ -67,7 +66,6 @@ struct AGnss : public V2_0::IAGnss {
private:
Gnss* mGnss = nullptr;
std::mutex mMutex;
sp<V2_0::IAGnssCallback> mAGnssCbIface = nullptr;
AGpsExtType mType;

View File

@@ -29,7 +29,7 @@
#include <string>
#include "Gnss.h"
#include "AGnssRil.h"
#include <DataItemConcreteTypes.h>
#include <DataItemConcreteTypesBase.h>
typedef void* (getLocationInterface)();

View File

@@ -459,8 +459,7 @@ Return<bool> Gnss::setCallback_1_1(const sp<V1_1::IGnssCallback>& callback) {
OdcpiRequestCallback cb = [this](const OdcpiRequestInfo& odcpiRequest) {
odcpiRequestCb(odcpiRequest);
};
gnssInterface->odcpiInit(cb, OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW,
(EMERGENCY_ODCPI | NON_EMERGENCY_ODCPI));
gnssInterface->odcpiInit(cb, OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW);
}
GnssAPIClient* api = getApi();
@@ -611,8 +610,7 @@ Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) {
OdcpiRequestCallback cb = [this](const OdcpiRequestInfo& odcpiRequest) {
odcpiRequestCb(odcpiRequest);
};
gnssInterface->odcpiInit(cb, OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW,
(EMERGENCY_ODCPI | NON_EMERGENCY_ODCPI));
gnssInterface->odcpiInit(cb, OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW);
}
GnssAPIClient* api = getApi();
@@ -750,8 +748,7 @@ Return<bool> Gnss::setCallback_2_1(const sp<V2_1::IGnssCallback>& callback) {
OdcpiRequestCallback cb = [this](const OdcpiRequestInfo& odcpiRequest) {
odcpiRequestCb(odcpiRequest);
};
gnssInterface->odcpiInit(cb, OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW,
(EMERGENCY_ODCPI | NON_EMERGENCY_ODCPI));
gnssInterface->odcpiInit(cb, OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW);
}
GnssAPIClient* api = getApi();

View File

@@ -18,15 +18,11 @@
* limitations under the License.
*/
/* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_TAG "LocSvc_GnssMeasurementInterface"
#include <log_util.h>
#include "GnssMeasurement.h"
#include "MeasurementAPIClient.h"
namespace android {
namespace hardware {
@@ -58,44 +54,32 @@ GnssMeasurement::~GnssMeasurement() {
// Methods from ::android::hardware::gnss::V1_0::IGnssMeasurement follow.
Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback(
const sp<V1_0::IGnssMeasurementCallback>& callback) {
return setCallback(callback, mGnssMeasurementCbIface, GNSS_POWER_MODE_INVALID);
}
template <typename T>
Return<IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback(
const sp<T>& callback, sp<T>& myCallback, GnssPowerMode powerMode) {
Return<GnssMeasurement::GnssMeasurementStatus> ret =
IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
if (mGnssMeasurementCbIface != nullptr) {
LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
}
if (callback == nullptr) {
LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
return ret;
}
if (mApi == nullptr) {
LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
return ret;
}
if (myCallback != callback) {
if (nullptr == callback) {
LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
mApi->measurementSetCallback(callback);
close();
} else {
if (nullptr != myCallback) {
myCallback->unlinkToDeath(mGnssMeasurementDeathRecipient);
}
myCallback = callback;
myCallback->linkToDeath(mGnssMeasurementDeathRecipient, 0);
ret = mApi->measurementSetCallback(callback, powerMode);
}
}
clearInterfaces();
return ret;
mGnssMeasurementCbIface = callback;
mGnssMeasurementCbIface->linkToDeath(mGnssMeasurementDeathRecipient, 0);
return mApi->measurementSetCallback(callback);
}
void GnssMeasurement::clearInterfaces() {
if (mApi != nullptr) {
mApi->measurementSetCallback<V1_0::IGnssMeasurementCallback>(nullptr);
mApi->measurementSetCallback<V1_1::IGnssMeasurementCallback>(nullptr);
mApi->measurementSetCallback<V2_0::IGnssMeasurementCallback>(nullptr);
mApi->measurementSetCallback<V2_1::IGnssMeasurementCallback>(nullptr);
}
if (mGnssMeasurementCbIface != nullptr) {
mGnssMeasurementCbIface->unlinkToDeath(mGnssMeasurementDeathRecipient);
mGnssMeasurementCbIface = nullptr;
@@ -129,24 +113,95 @@ Return<void> GnssMeasurement::close() {
// Methods from ::android::hardware::gnss::V1_1::IGnssMeasurement follow.
Return<GnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_1_1(
const sp<V1_1::IGnssMeasurementCallback>& callback, bool enableFullTracking) {
return setCallback(callback, mGnssMeasurementCbIface_1_1,
enableFullTracking ? GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2);
}
Return<GnssMeasurement::GnssMeasurementStatus> ret =
IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
if (mGnssMeasurementCbIface_1_1 != nullptr) {
LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
}
if (callback == nullptr) {
LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
return ret;
}
if (nullptr == mApi) {
LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
return ret;
}
clearInterfaces();
mGnssMeasurementCbIface_1_1 = callback;
mGnssMeasurementCbIface_1_1->linkToDeath(mGnssMeasurementDeathRecipient, 0);
GnssPowerMode powerMode = enableFullTracking?
GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2;
return mApi->measurementSetCallback_1_1(callback, powerMode);
}
// Methods from ::android::hardware::gnss::V2_0::IGnssMeasurement follow.
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_2_0(
const sp<V2_0::IGnssMeasurementCallback>& callback,
bool enableFullTracking) {
return setCallback(callback, mGnssMeasurementCbIface_2_0,
enableFullTracking ? GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2);
Return<GnssMeasurement::GnssMeasurementStatus> ret =
IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
if (mGnssMeasurementCbIface_2_0 != nullptr) {
LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
}
if (callback == nullptr) {
LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
return ret;
}
if (nullptr == mApi) {
LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
return ret;
}
clearInterfaces();
mGnssMeasurementCbIface_2_0 = callback;
mGnssMeasurementCbIface_2_0->linkToDeath(mGnssMeasurementDeathRecipient, 0);
GnssPowerMode powerMode = enableFullTracking ?
GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2;
return mApi->measurementSetCallback_2_0(callback, powerMode);
}
// Methods from ::android::hardware::gnss::V2_1::IGnssMeasurement follow.
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_2_1(
const sp<::android::hardware::gnss::V2_1::IGnssMeasurementCallback>& callback,
bool enableFullTracking) {
return setCallback(callback, mGnssMeasurementCbIface_2_1,
enableFullTracking ? GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2);
Return<GnssMeasurement::GnssMeasurementStatus> ret =
IGnssMeasurement::GnssMeasurementStatus::ERROR_GENERIC;
if (mGnssMeasurementCbIface_2_1 != nullptr) {
LOC_LOGE("%s]: GnssMeasurementCallback is already set", __FUNCTION__);
return IGnssMeasurement::GnssMeasurementStatus::ERROR_ALREADY_INIT;
}
if (callback == nullptr) {
LOC_LOGE("%s]: callback is nullptr", __FUNCTION__);
return ret;
}
if (nullptr == mApi) {
LOC_LOGE("%s]: mApi is nullptr", __FUNCTION__);
return ret;
}
clearInterfaces();
mGnssMeasurementCbIface_2_1 = callback;
mGnssMeasurementCbIface_2_1->linkToDeath(mGnssMeasurementDeathRecipient, 0);
GnssPowerMode powerMode = enableFullTracking ?
GNSS_POWER_MODE_M1 : GNSS_POWER_MODE_M2;
return mApi->measurementSetCallback_2_1(callback, powerMode);
}
} // namespace implementation

View File

@@ -18,18 +18,12 @@
* limitations under the License.
*/
/* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#ifndef ANDROID_HARDWARE_GNSS_V2_1_GNSSMEASUREMENT_H
#define ANDROID_HARDWARE_GNSS_V2_1_GNSSMEASUREMENT_H
#include <android/hardware/gnss/2.1/IGnssMeasurement.h>
#include <hidl/MQDescriptor.h>
#include <hidl/Status.h>
#include "MeasurementAPIClient.h"
namespace android {
namespace hardware {
@@ -80,9 +74,7 @@ struct GnssMeasurement : public V2_1::IGnssMeasurement {
sp<GnssMeasurement> mGnssMeasurement;
};
template <typename T>
Return<IGnssMeasurement::GnssMeasurementStatus> setCallback(
const sp<T>& callback, sp<T>& myCallback, GnssPowerMode powerMode);
private:
sp<GnssMeasurementDeathRecipient> mGnssMeasurementDeathRecipient = nullptr;
sp<V1_0::IGnssMeasurementCallback> mGnssMeasurementCbIface = nullptr;
sp<V1_1::IGnssMeasurementCallback> mGnssMeasurementCbIface_1_1 = nullptr;

View File

@@ -1,4 +1,4 @@
service gnss_service /vendor/bin/hw/android.hardware.gnss@2.1-service-qti
class hal
user gps
group system gps radio vendor_qti_diag inet
group system gps radio vendor_qti_diag

View File

@@ -95,6 +95,65 @@ void MeasurementAPIClient::clearInterfaces()
mGnssMeasurementCbIface_2_1 = nullptr;
}
// for GpsInterface
Return<IGnssMeasurement::GnssMeasurementStatus>
MeasurementAPIClient::measurementSetCallback(const sp<V1_0::IGnssMeasurementCallback>& callback)
{
LOC_LOGD("%s]: (%p)", __FUNCTION__, &callback);
mMutex.lock();
clearInterfaces();
mGnssMeasurementCbIface = callback;
mMutex.unlock();
return startTracking();
}
Return<IGnssMeasurement::GnssMeasurementStatus>
MeasurementAPIClient::measurementSetCallback_1_1(
const sp<V1_1::IGnssMeasurementCallback>& callback,
GnssPowerMode powerMode, uint32_t timeBetweenMeasurement)
{
LOC_LOGD("%s]: (%p) (powermode: %d) (tbm: %d)",
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
clearInterfaces();
mGnssMeasurementCbIface_1_1 = callback;
mMutex.unlock();
return startTracking(powerMode, timeBetweenMeasurement);
}
Return<IGnssMeasurement::GnssMeasurementStatus>
MeasurementAPIClient::measurementSetCallback_2_0(
const sp<V2_0::IGnssMeasurementCallback>& callback,
GnssPowerMode powerMode, uint32_t timeBetweenMeasurement)
{
LOC_LOGD("%s]: (%p) (powermode: %d) (tbm: %d)",
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
clearInterfaces();
mGnssMeasurementCbIface_2_0 = callback;
mMutex.unlock();
return startTracking(powerMode, timeBetweenMeasurement);
}
Return<IGnssMeasurement::GnssMeasurementStatus> MeasurementAPIClient::measurementSetCallback_2_1(
const sp<V2_1::IGnssMeasurementCallback>& callback,
GnssPowerMode powerMode, uint32_t timeBetweenMeasurement) {
LOC_LOGD("%s]: (%p) (powermode: %d) (tbm: %d)",
__FUNCTION__, &callback, (int)powerMode, timeBetweenMeasurement);
mMutex.lock();
clearInterfaces();
mGnssMeasurementCbIface_2_1 = callback;
mMutex.unlock();
return startTracking(powerMode, timeBetweenMeasurement);
}
Return<IGnssMeasurement::GnssMeasurementStatus>
MeasurementAPIClient::startTracking(
GnssPowerMode powerMode, uint32_t timeBetweenMeasurement)
@@ -103,6 +162,16 @@ MeasurementAPIClient::startTracking(
memset(&locationCallbacks, 0, sizeof(LocationCallbacks));
locationCallbacks.size = sizeof(LocationCallbacks);
locationCallbacks.trackingCb = nullptr;
locationCallbacks.batchingCb = nullptr;
locationCallbacks.geofenceBreachCb = nullptr;
locationCallbacks.geofenceStatusCb = nullptr;
locationCallbacks.gnssLocationInfoCb = nullptr;
locationCallbacks.gnssNiCb = nullptr;
locationCallbacks.gnssSvCb = nullptr;
locationCallbacks.gnssNmeaCb = nullptr;
locationCallbacks.gnssMeasurementsCb = nullptr;
if (mGnssMeasurementCbIface_2_1 != nullptr ||
mGnssMeasurementCbIface_2_0 != nullptr ||
mGnssMeasurementCbIface_1_1 != nullptr ||
@@ -126,8 +195,7 @@ MeasurementAPIClient::startTracking(
}
mTracking = true;
LOC_LOGd("(powermode: %d) (tbm %d)", (int)powerMode, timeBetweenMeasurement);
LOC_LOGD("%s]: start tracking session", __FUNCTION__);
locAPIStartTracking(options);
return IGnssMeasurement::GnssMeasurementStatus::SUCCESS;
}
@@ -136,7 +204,6 @@ MeasurementAPIClient::startTracking(
void MeasurementAPIClient::measurementClose() {
LOC_LOGD("%s]: ()", __FUNCTION__);
mTracking = false;
clearInterfaces();
locAPIStopTracking();
}

View File

@@ -32,6 +32,7 @@
#include <mutex>
#include <android/hardware/gnss/2.1/IGnssMeasurement.h>
//#include <android/hardware/gnss/1.1/IGnssMeasurementCallback.h>
#include <android/hardware/gnss/2.1/IGnssMeasurementCallback.h>
#include <LocationAPIClientBase.h>
#include <hidl/Status.h>
@@ -53,16 +54,20 @@ public:
MeasurementAPIClient& operator=(const MeasurementAPIClient&) = delete;
// for GpsMeasurementInterface
template <typename T>
Return<IGnssMeasurement::GnssMeasurementStatus> measurementSetCallback(
const sp<T>& callback, GnssPowerMode powerMode = GNSS_POWER_MODE_INVALID) {
mMutex.lock();
setCallbackLocked(callback);
mMutex.unlock();
return startTracking(powerMode);
}
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> measurementSetCallback(
const sp<V1_0::IGnssMeasurementCallback>& callback);
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> measurementSetCallback_1_1(
const sp<V1_1::IGnssMeasurementCallback>& callback,
GnssPowerMode powerMode = GNSS_POWER_MODE_INVALID,
uint32_t timeBetweenMeasurement = GPS_DEFAULT_FIX_INTERVAL_MS);
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> measurementSetCallback_2_0(
const sp<V2_0::IGnssMeasurementCallback>& callback,
GnssPowerMode powerMode = GNSS_POWER_MODE_INVALID,
uint32_t timeBetweenMeasurement = GPS_DEFAULT_FIX_INTERVAL_MS);
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> measurementSetCallback_2_1(
const sp<V2_1::IGnssMeasurementCallback>& callback,
GnssPowerMode powerMode = GNSS_POWER_MODE_INVALID,
uint32_t timeBetweenMeasurement = GPS_DEFAULT_FIX_INTERVAL_MS);
void measurementClose();
Return<IGnssMeasurement::GnssMeasurementStatus> startTracking(
GnssPowerMode powerMode = GNSS_POWER_MODE_INVALID,
@@ -72,18 +77,6 @@ public:
void onGnssMeasurementsCb(GnssMeasurementsNotification gnssMeasurementsNotification) final;
private:
inline void setCallbackLocked(const sp<V1_0::IGnssMeasurementCallback>& callback) {
mGnssMeasurementCbIface = callback;
}
inline void setCallbackLocked(const sp<V1_1::IGnssMeasurementCallback>& callback) {
mGnssMeasurementCbIface_1_1 = callback;
}
inline void setCallbackLocked(const sp<V2_0::IGnssMeasurementCallback>& callback) {
mGnssMeasurementCbIface_2_0 = callback;
}
inline void setCallbackLocked(const sp<V2_1::IGnssMeasurementCallback>& callback) {
mGnssMeasurementCbIface_2_1 = callback;
}
virtual ~MeasurementAPIClient();
std::mutex mMutex;

View File

@@ -22,7 +22,6 @@ cc_library_shared {
"LocContext.cpp",
"loc_core_log.cpp",
"data-items/DataItemsFactoryProxy.cpp",
"data-items/DataItemConcreteTypes.cpp",
"SystemStatusOsObserver.cpp",
"SystemStatus.cpp",
],

View File

@@ -26,43 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_CtxBase"
@@ -88,7 +51,6 @@ bool ContextBase::sGnssMeasurementSupported = false;
uint8_t ContextBase::sFeaturesSupported[MAX_FEATURE_LENGTH];
GnssNMEARptRate ContextBase::sNmeaReportRate = GNSS_NMEA_REPORT_RATE_NHZ;
LocationCapabilitiesMask ContextBase::sQwesFeatureMask = 0;
LocationCapabilitiesMask ContextBase::sHwCapabilitiesMask = 0;
const loc_param_s_type ContextBase::mGps_conf_table[] =
{

View File

@@ -26,42 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __LOC_CONTEXT_BASE__
#define __LOC_CONTEXT_BASE__
@@ -194,10 +158,7 @@ public:
return mLBSProxy->getIzatDevId();
}
inline void sendMsg(const LocMsg *msg) { getMsgTask()->sendMsg(msg); }
inline bool checkFeatureStatus(int* fids,
LocFeatureStatus* status, uint32_t idCount, bool directQwesCall = false) const {
return mLocApiProxy->checkFeatureStatus(fids, status, idCount, directQwesCall);
}
static loc_gps_cfg_s_type mGps_conf;
static loc_sap_cfg_s_type mSap_conf;
static bool sIsEngineCapabilitiesKnown;
@@ -206,7 +167,6 @@ public:
static bool sGnssMeasurementSupported;
static GnssNMEARptRate sNmeaReportRate;
static LocationCapabilitiesMask sQwesFeatureMask;
static LocationHwCapabilitiesMask sHwCapabilitiesMask;
void readConfig();
static uint32_t getCarrierCapabilities();
@@ -313,27 +273,6 @@ public:
sQwesFeatureMask &= ~LOCATION_CAPABILITIES_QWES_VPE;
}
break;
case LOCATION_QWES_FEATURE_TYPE_DGNSS:
if (itr->second) {
sQwesFeatureMask |= LOCATION_CAPABILITIES_QWES_DGNSS;
} else {
sQwesFeatureMask &= ~LOCATION_CAPABILITIES_QWES_DGNSS;
}
break;
case LOCATION_QWES_FEATURE_TYPE_RSSI_POSITIONING:
if (itr->second) {
sQwesFeatureMask |= LOCATION_CAPABILITIES_QWES_WIFI_RSSI_POSITIONING;
} else {
sQwesFeatureMask &= ~LOCATION_CAPABILITIES_QWES_WIFI_RSSI_POSITIONING;
}
break;
case LOCATION_QWES_FEATURE_TYPE_RTT_POSITIONING:
if (itr->second) {
sQwesFeatureMask |= LOCATION_CAPABILITIES_QWES_WIFI_RTT_POSITIONING;
} else {
sQwesFeatureMask &= ~LOCATION_CAPABILITIES_QWES_WIFI_RTT_POSITIONING;
}
break;
}
}
@@ -371,19 +310,7 @@ public:
return (ContextBase::sQwesFeatureMask);
}
/*
set HW feature status info
*/
static inline void setHwCapabilities(const LocationHwCapabilitiesMask& mask) {
sHwCapabilitiesMask |= mask;
}
/*
get HW feature status info
*/
static inline LocationHwCapabilitiesMask getHwCapabilitiesMask() {
return (ContextBase::sHwCapabilitiesMask);
}
};
struct LocApiResponse: LocMsg {

View File

@@ -33,7 +33,6 @@
#else
#include <unordered_map>
#endif
#include <ContextBase.h>
namespace loc_core {
@@ -149,7 +148,6 @@ typedef std::function<void(const std::unordered_map<LocationQwesFeatureType, boo
// callback function to report back dr and ppe position and sv report
typedef EngineHubProxyBase* (getEngHubProxyFn)(
const MsgTask * msgTask,
const ContextBase * context,
IOsObserver* osObserver,
GnssAdapterReportEnginePositionsEventCb positionEventCb,
GnssAdapterReportSvEventCb svEventCb,

View File

@@ -26,43 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_LocAdapterBase"
@@ -359,19 +322,6 @@ LocAdapterBase::getCapabilities()
if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_EDGNSS)) {
mask |= LOCATION_CAPABILITIES_EDGNSS_BIT;
}
if ((ContextBase::getQwesFeatureStatus() & LOCATION_CAPABILITIES_QWES_PPE)) {
mask |= LOCATION_CAPABILITIES_QWES_PPE;
}
//Get QWES feature status mask
mask |= ContextBase::getQwesFeatureStatus();
//Get HW feature status mask
LocationHwCapabilitiesMask hwMask = ContextBase::getHwCapabilitiesMask();
if ((hwMask & LOCATION_WIFI_CAPABILITY_RTT) != 0) {
mask |= LOCATION_CAPABILITIES_WIFI_RTT_POSITIONING;
}
if ((hwMask & LOCATION_WIFI_CAPABILITY_RSSI) != 0) {
mask |= LOCATION_CAPABILITIES_WIFI_RSSI_POSITIONING;
}
} else {
LOC_LOGE("%s]: attempt to get capabilities before they are known.", __func__);
}

View File

@@ -489,8 +489,6 @@ void LocApiBase::reportQwesCapabilities
const std::unordered_map<LocationQwesFeatureType, bool> &featureMap
)
{
//Set Qwes feature status map in ContextBase
ContextBase::setQwesFeatureStatus(featureMap);
// loop through adapters, and deliver to all adapters.
TO_ALL_LOCADAPTERS(mLocAdapters[i]->reportQwesCapabilities(featureMap));
}
@@ -1036,7 +1034,7 @@ bool ElapsedRealtimeEstimator::getCurrentTime(
struct timespec sinceBootTime;
struct timespec sinceBootTimeTest;
bool clockGetTimeSuccess = false;
const uint32_t MAX_TIME_DELTA_VALUE_NANOS = 2000000; // 2 milli-seconds
const uint32_t MAX_TIME_DELTA_VALUE_NANOS = 15000;
const uint32_t MAX_GET_TIME_COUNT = 20;
/* Attempt to get CLOCK_REALTIME and CLOCK_BOOTIME in succession without an interruption
or context switch (for up to MAX_GET_TIME_COUNT times) to avoid errors in the calculation */

View File

@@ -26,44 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LOC_API_BASE_H
#define LOC_API_BASE_H
@@ -139,9 +101,6 @@ public:
inline virtual void* getSibling2() { return NULL; }
inline virtual double getGloRfLoss(uint32_t left __unused,
uint32_t center __unused, uint32_t right __unused, uint8_t gloFrequency __unused) { return 0.0; }
inline virtual float getGeoidalSeparation(double latitude __unused, double longitude __unused) { return 0.0; }
inline virtual bool checkFeatureStatus(int* fids __unused, LocFeatureStatus* status __unused,
uint32_t idCount __unused, bool directQwesCall __unused = false) {return false;}
};
class LocApiBase {
@@ -176,17 +135,14 @@ protected:
}
bool isInSession();
const LOC_API_ADAPTER_EVENT_MASK_T mExcludedMask;
bool isMaster();
public:
bool isMaster();
inline void sendMsg(const LocMsg* msg) const {
if (nullptr != mMsgTask) {
mMsgTask->sendMsg(msg);
}
}
inline MsgTask* getMsgTask() const {
return mMsgTask;
}
inline void destroy() {
close();
struct LocKillMsg : public LocMsg {

View File

@@ -22,8 +22,7 @@ libloc_core_la_h_sources = \
EngineHubProxyBase.h \
data-items/DataItemId.h \
data-items/IDataItemCore.h \
data-items/DataItemConcreteTypes.h \
data-items/DataItemsFactoryProxy.h \
data-items/DataItemConcreteTypesBase.h \
observer/IDataItemObserver.h \
observer/IDataItemSubscription.h \
observer/IFrameworkActionReq.h \
@@ -38,7 +37,6 @@ libloc_core_la_c_sources = \
LocContext.cpp \
loc_core_log.cpp \
data-items/DataItemsFactoryProxy.cpp \
data-items/DataItemConcreteTypes.cpp \
SystemStatusOsObserver.cpp \
SystemStatus.cpp

View File

@@ -26,43 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define LOG_TAG "LocSvc_SystemStatus"
#include <inttypes.h>
@@ -77,7 +40,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <DataItemsFactoryProxy.h>
#include <SystemStatus.h>
#include <SystemStatusOsObserver.h>
#include <DataItemConcreteTypes.h>
#include <DataItemConcreteTypesBase.h>
namespace loc_core
{
@@ -785,17 +748,18 @@ SystemStatusTimeAndClock::SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea
{
}
bool SystemStatusTimeAndClock::equals(const SystemStatusItemBase& peer) {
if ((mGpsWeek != ((const SystemStatusTimeAndClock&)peer).mGpsWeek) ||
(mGpsTowMs != ((const SystemStatusTimeAndClock&)peer).mGpsTowMs) ||
(mTimeValid != ((const SystemStatusTimeAndClock&)peer).mTimeValid) ||
(mTimeSource != ((const SystemStatusTimeAndClock&)peer).mTimeSource) ||
(mTimeUnc != ((const SystemStatusTimeAndClock&)peer).mTimeUnc) ||
(mClockFreqBias != ((const SystemStatusTimeAndClock&)peer).mClockFreqBias) ||
(mClockFreqBiasUnc != ((const SystemStatusTimeAndClock&)peer).mClockFreqBiasUnc) ||
(mLeapSeconds != ((const SystemStatusTimeAndClock&)peer).mLeapSeconds) ||
(mLeapSecUnc != ((const SystemStatusTimeAndClock&)peer).mLeapSecUnc) ||
(mTimeUncNs != ((const SystemStatusTimeAndClock&)peer).mTimeUncNs)) {
bool SystemStatusTimeAndClock::equals(const SystemStatusTimeAndClock& peer)
{
if ((mGpsWeek != peer.mGpsWeek) ||
(mGpsTowMs != peer.mGpsTowMs) ||
(mTimeValid != peer.mTimeValid) ||
(mTimeSource != peer.mTimeSource) ||
(mTimeUnc != peer.mTimeUnc) ||
(mClockFreqBias != peer.mClockFreqBias) ||
(mClockFreqBiasUnc != peer.mClockFreqBiasUnc) ||
(mLeapSeconds != peer.mLeapSeconds) ||
(mLeapSecUnc != peer.mLeapSecUnc) ||
(mTimeUncNs != peer.mTimeUncNs)) {
return false;
}
return true;
@@ -826,8 +790,9 @@ SystemStatusXoState::SystemStatusXoState(const SystemStatusPQWM1& nmea) :
{
}
bool SystemStatusXoState::equals(const SystemStatusItemBase& peer) {
if (mXoState != ((const SystemStatusXoState&)peer).mXoState) {
bool SystemStatusXoState::equals(const SystemStatusXoState& peer)
{
if (mXoState != peer.mXoState) {
return false;
}
return true;
@@ -867,26 +832,27 @@ SystemStatusRfAndParams::SystemStatusRfAndParams(const SystemStatusPQWM1& nmea)
{
}
bool SystemStatusRfAndParams::equals(const SystemStatusItemBase& peer) {
if ((mPgaGain != ((const SystemStatusRfAndParams&)peer).mPgaGain) ||
(mGpsBpAmpI != ((const SystemStatusRfAndParams&)peer).mGpsBpAmpI) ||
(mGpsBpAmpQ != ((const SystemStatusRfAndParams&)peer).mGpsBpAmpQ) ||
(mAdcI != ((const SystemStatusRfAndParams&)peer).mAdcI) ||
(mAdcQ != ((const SystemStatusRfAndParams&)peer).mAdcQ) ||
(mJammerGps != ((const SystemStatusRfAndParams&)peer).mJammerGps) ||
(mJammerGlo != ((const SystemStatusRfAndParams&)peer).mJammerGlo) ||
(mJammerBds != ((const SystemStatusRfAndParams&)peer).mJammerBds) ||
(mJammerGal != ((const SystemStatusRfAndParams&)peer).mJammerGal) ||
(mAgcGps != ((const SystemStatusRfAndParams&)peer).mAgcGps) ||
(mAgcGlo != ((const SystemStatusRfAndParams&)peer).mAgcGlo) ||
(mAgcBds != ((const SystemStatusRfAndParams&)peer).mAgcBds) ||
(mAgcGal != ((const SystemStatusRfAndParams&)peer).mAgcGal) ||
(mGloBpAmpI != ((const SystemStatusRfAndParams&)peer).mGloBpAmpI) ||
(mGloBpAmpQ != ((const SystemStatusRfAndParams&)peer).mGloBpAmpQ) ||
(mBdsBpAmpI != ((const SystemStatusRfAndParams&)peer).mBdsBpAmpI) ||
(mBdsBpAmpQ != ((const SystemStatusRfAndParams&)peer).mBdsBpAmpQ) ||
(mGalBpAmpI != ((const SystemStatusRfAndParams&)peer).mGalBpAmpI) ||
(mGalBpAmpQ != ((const SystemStatusRfAndParams&)peer).mGalBpAmpQ)) {
bool SystemStatusRfAndParams::equals(const SystemStatusRfAndParams& peer)
{
if ((mPgaGain != peer.mPgaGain) ||
(mGpsBpAmpI != peer.mGpsBpAmpI) ||
(mGpsBpAmpQ != peer.mGpsBpAmpQ) ||
(mAdcI != peer.mAdcI) ||
(mAdcQ != peer.mAdcQ) ||
(mJammerGps != peer.mJammerGps) ||
(mJammerGlo != peer.mJammerGlo) ||
(mJammerBds != peer.mJammerBds) ||
(mJammerGal != peer.mJammerGal) ||
(mAgcGps != peer.mAgcGps) ||
(mAgcGlo != peer.mAgcGlo) ||
(mAgcBds != peer.mAgcBds) ||
(mAgcGal != peer.mAgcGal) ||
(mGloBpAmpI != peer.mGloBpAmpI) ||
(mGloBpAmpQ != peer.mGloBpAmpQ) ||
(mBdsBpAmpI != peer.mBdsBpAmpI) ||
(mBdsBpAmpQ != peer.mBdsBpAmpQ) ||
(mGalBpAmpI != peer.mGalBpAmpI) ||
(mGalBpAmpQ != peer.mGalBpAmpQ)) {
return false;
}
return true;
@@ -922,8 +888,9 @@ SystemStatusErrRecovery::SystemStatusErrRecovery(const SystemStatusPQWM1& nmea)
{
}
bool SystemStatusErrRecovery::equals(const SystemStatusItemBase& peer) {
if (mRecErrorRecovery != ((const SystemStatusErrRecovery&)peer).mRecErrorRecovery) {
bool SystemStatusErrRecovery::equals(const SystemStatusErrRecovery& peer)
{
if (mRecErrorRecovery != peer.mRecErrorRecovery) {
return false;
}
return true;
@@ -951,14 +918,15 @@ SystemStatusInjectedPosition::SystemStatusInjectedPosition(const SystemStatusPQW
{
}
bool SystemStatusInjectedPosition::equals(const SystemStatusItemBase& peer) {
if ((mEpiValidity != ((const SystemStatusInjectedPosition&)peer).mEpiValidity) ||
(mEpiLat != ((const SystemStatusInjectedPosition&)peer).mEpiLat) ||
(mEpiLon != ((const SystemStatusInjectedPosition&)peer).mEpiLon) ||
(mEpiAlt != ((const SystemStatusInjectedPosition&)peer).mEpiAlt) ||
(mEpiHepe != ((const SystemStatusInjectedPosition&)peer).mEpiHepe) ||
(mEpiAltUnc != ((const SystemStatusInjectedPosition&)peer).mEpiAltUnc) ||
(mEpiSrc != ((const SystemStatusInjectedPosition&)peer).mEpiSrc)) {
bool SystemStatusInjectedPosition::equals(const SystemStatusInjectedPosition& peer)
{
if ((mEpiValidity != peer.mEpiValidity) ||
(mEpiLat != peer.mEpiLat) ||
(mEpiLon != peer.mEpiLon) ||
(mEpiAlt != peer.mEpiAlt) ||
(mEpiHepe != peer.mEpiHepe) ||
(mEpiAltUnc != peer.mEpiAltUnc) ||
(mEpiSrc != peer.mEpiSrc)) {
return false;
}
return true;
@@ -991,12 +959,13 @@ SystemStatusBestPosition::SystemStatusBestPosition(const SystemStatusPQWP2& nmea
{
}
bool SystemStatusBestPosition::equals(const SystemStatusItemBase& peer) {
if ((mBestLat != ((const SystemStatusBestPosition&)peer).mBestLat) ||
(mBestLon != ((const SystemStatusBestPosition&)peer).mBestLon) ||
(mBestAlt != ((const SystemStatusBestPosition&)peer).mBestAlt) ||
(mBestHepe != ((const SystemStatusBestPosition&)peer).mBestHepe) ||
(mBestAltUnc != ((const SystemStatusBestPosition&)peer).mBestAltUnc)) {
bool SystemStatusBestPosition::equals(const SystemStatusBestPosition& peer)
{
if ((mBestLat != peer.mBestLat) ||
(mBestLon != peer.mBestLon) ||
(mBestAlt != peer.mBestAlt) ||
(mBestHepe != peer.mBestHepe) ||
(mBestAltUnc != peer.mBestAltUnc)) {
return false;
}
return true;
@@ -1034,20 +1003,21 @@ SystemStatusXtra::SystemStatusXtra(const SystemStatusPQWP3& nmea) :
{
}
bool SystemStatusXtra::equals(const SystemStatusItemBase& peer) {
if ((mXtraValidMask != ((const SystemStatusXtra&)peer).mXtraValidMask) ||
(mGpsXtraAge != ((const SystemStatusXtra&)peer).mGpsXtraAge) ||
(mGloXtraAge != ((const SystemStatusXtra&)peer).mGloXtraAge) ||
(mBdsXtraAge != ((const SystemStatusXtra&)peer).mBdsXtraAge) ||
(mGalXtraAge != ((const SystemStatusXtra&)peer).mGalXtraAge) ||
(mQzssXtraAge != ((const SystemStatusXtra&)peer).mQzssXtraAge) ||
(mNavicXtraAge != ((const SystemStatusXtra&)peer).mNavicXtraAge) ||
(mGpsXtraValid != ((const SystemStatusXtra&)peer).mGpsXtraValid) ||
(mGloXtraValid != ((const SystemStatusXtra&)peer).mGloXtraValid) ||
(mBdsXtraValid != ((const SystemStatusXtra&)peer).mBdsXtraValid) ||
(mGalXtraValid != ((const SystemStatusXtra&)peer).mGalXtraValid) ||
(mQzssXtraValid != ((const SystemStatusXtra&)peer).mQzssXtraValid) ||
(mNavicXtraValid != ((const SystemStatusXtra&)peer).mNavicXtraValid)) {
bool SystemStatusXtra::equals(const SystemStatusXtra& peer)
{
if ((mXtraValidMask != peer.mXtraValidMask) ||
(mGpsXtraAge != peer.mGpsXtraAge) ||
(mGloXtraAge != peer.mGloXtraAge) ||
(mBdsXtraAge != peer.mBdsXtraAge) ||
(mGalXtraAge != peer.mGalXtraAge) ||
(mQzssXtraAge != peer.mQzssXtraAge) ||
(mNavicXtraAge != peer.mNavicXtraAge) ||
(mGpsXtraValid != peer.mGpsXtraValid) ||
(mGloXtraValid != peer.mGloXtraValid) ||
(mBdsXtraValid != peer.mBdsXtraValid) ||
(mGalXtraValid != peer.mGalXtraValid) ||
(mQzssXtraValid != peer.mQzssXtraValid) ||
(mNavicXtraValid != peer.mNavicXtraValid)) {
return false;
}
return true;
@@ -1083,12 +1053,13 @@ SystemStatusEphemeris::SystemStatusEphemeris(const SystemStatusPQWP4& nmea) :
{
}
bool SystemStatusEphemeris::equals(const SystemStatusItemBase& peer) {
if ((mGpsEpheValid != ((const SystemStatusEphemeris&)peer).mGpsEpheValid) ||
(mGloEpheValid != ((const SystemStatusEphemeris&)peer).mGloEpheValid) ||
(mBdsEpheValid != ((const SystemStatusEphemeris&)peer).mBdsEpheValid) ||
(mGalEpheValid != ((const SystemStatusEphemeris&)peer).mGalEpheValid) ||
(mQzssEpheValid != ((const SystemStatusEphemeris&)peer).mQzssEpheValid)) {
bool SystemStatusEphemeris::equals(const SystemStatusEphemeris& peer)
{
if ((mGpsEpheValid != peer.mGpsEpheValid) ||
(mGloEpheValid != peer.mGloEpheValid) ||
(mBdsEpheValid != peer.mBdsEpheValid) ||
(mGalEpheValid != peer.mGalEpheValid) ||
(mQzssEpheValid != peer.mQzssEpheValid)) {
return false;
}
return true;
@@ -1131,22 +1102,23 @@ SystemStatusSvHealth::SystemStatusSvHealth(const SystemStatusPQWP5& nmea) :
{
}
bool SystemStatusSvHealth::equals(const SystemStatusItemBase& peer) {
if ((mGpsUnknownMask != ((const SystemStatusSvHealth&)peer).mGpsUnknownMask) ||
(mGloUnknownMask != ((const SystemStatusSvHealth&)peer).mGloUnknownMask) ||
(mBdsUnknownMask != ((const SystemStatusSvHealth&)peer).mBdsUnknownMask) ||
(mGalUnknownMask != ((const SystemStatusSvHealth&)peer).mGalUnknownMask) ||
(mQzssUnknownMask != ((const SystemStatusSvHealth&)peer).mQzssUnknownMask) ||
(mGpsGoodMask != ((const SystemStatusSvHealth&)peer).mGpsGoodMask) ||
(mGloGoodMask != ((const SystemStatusSvHealth&)peer).mGloGoodMask) ||
(mBdsGoodMask != ((const SystemStatusSvHealth&)peer).mBdsGoodMask) ||
(mGalGoodMask != ((const SystemStatusSvHealth&)peer).mGalGoodMask) ||
(mQzssGoodMask != ((const SystemStatusSvHealth&)peer).mQzssGoodMask) ||
(mGpsBadMask != ((const SystemStatusSvHealth&)peer).mGpsBadMask) ||
(mGloBadMask != ((const SystemStatusSvHealth&)peer).mGloBadMask) ||
(mBdsBadMask != ((const SystemStatusSvHealth&)peer).mBdsBadMask) ||
(mGalBadMask != ((const SystemStatusSvHealth&)peer).mGalBadMask) ||
(mQzssBadMask != ((const SystemStatusSvHealth&)peer).mQzssBadMask)) {
bool SystemStatusSvHealth::equals(const SystemStatusSvHealth& peer)
{
if ((mGpsUnknownMask != peer.mGpsUnknownMask) ||
(mGloUnknownMask != peer.mGloUnknownMask) ||
(mBdsUnknownMask != peer.mBdsUnknownMask) ||
(mGalUnknownMask != peer.mGalUnknownMask) ||
(mQzssUnknownMask != peer.mQzssUnknownMask) ||
(mGpsGoodMask != peer.mGpsGoodMask) ||
(mGloGoodMask != peer.mGloGoodMask) ||
(mBdsGoodMask != peer.mBdsGoodMask) ||
(mGalGoodMask != peer.mGalGoodMask) ||
(mQzssGoodMask != peer.mQzssGoodMask) ||
(mGpsBadMask != peer.mGpsBadMask) ||
(mGloBadMask != peer.mGloBadMask) ||
(mBdsBadMask != peer.mBdsBadMask) ||
(mGalBadMask != peer.mGalBadMask) ||
(mQzssBadMask != peer.mQzssBadMask)) {
return false;
}
return true;
@@ -1185,8 +1157,9 @@ SystemStatusPdr::SystemStatusPdr(const SystemStatusPQWP6& nmea) :
{
}
bool SystemStatusPdr::equals(const SystemStatusItemBase& peer) {
if (mFixInfoMask != ((const SystemStatusPdr&)peer).mFixInfoMask) {
bool SystemStatusPdr::equals(const SystemStatusPdr& peer)
{
if (mFixInfoMask != peer.mFixInfoMask) {
return false;
}
return true;
@@ -1210,11 +1183,12 @@ SystemStatusNavData::SystemStatusNavData(const SystemStatusPQWP7& nmea)
}
}
bool SystemStatusNavData::equals(const SystemStatusItemBase& peer) {
bool SystemStatusNavData::equals(const SystemStatusNavData& peer)
{
for (uint32_t i=0; i<SV_ALL_NUM; i++) {
if ((mNav[i].mType != ((const SystemStatusNavData&)peer).mNav[i].mType) ||
(mNav[i].mSource != ((const SystemStatusNavData&)peer).mNav[i].mSource) ||
(mNav[i].mAgeSec != ((const SystemStatusNavData&)peer).mNav[i].mAgeSec)) {
if ((mNav[i].mType != peer.mNav[i].mType) ||
(mNav[i].mSource != peer.mNav[i].mSource) ||
(mNav[i].mAgeSec != peer.mNav[i].mAgeSec)) {
return false;
}
}
@@ -1241,9 +1215,10 @@ SystemStatusPositionFailure::SystemStatusPositionFailure(const SystemStatusPQWS1
{
}
bool SystemStatusPositionFailure::equals(const SystemStatusItemBase& peer) {
if ((mFixInfoMask != ((const SystemStatusPositionFailure&)peer).mFixInfoMask) ||
(mHepeLimit != ((const SystemStatusPositionFailure&)peer).mHepeLimit)) {
bool SystemStatusPositionFailure::equals(const SystemStatusPositionFailure& peer)
{
if ((mFixInfoMask != peer.mFixInfoMask) ||
(mHepeLimit != peer.mHepeLimit)) {
return false;
}
return true;
@@ -1261,13 +1236,11 @@ void SystemStatusPositionFailure::dump()
/******************************************************************************
SystemStatusLocation
******************************************************************************/
bool SystemStatusLocation::equals(const SystemStatusItemBase& peer) {
if ((mLocation.gpsLocation.latitude !=
((const SystemStatusLocation&)peer).mLocation.gpsLocation.latitude) ||
(mLocation.gpsLocation.longitude !=
((const SystemStatusLocation&)peer).mLocation.gpsLocation.longitude) ||
(mLocation.gpsLocation.altitude !=
((const SystemStatusLocation&)peer).mLocation.gpsLocation.altitude)) {
bool SystemStatusLocation::equals(const SystemStatusLocation& peer)
{
if ((mLocation.gpsLocation.latitude != peer.mLocation.gpsLocation.latitude) ||
(mLocation.gpsLocation.longitude != peer.mLocation.gpsLocation.longitude) ||
(mLocation.gpsLocation.altitude != peer.mLocation.gpsLocation.altitude)) {
return false;
}
return true;
@@ -1317,10 +1290,8 @@ void SystemStatus::destroyInstance()
void SystemStatus::resetNetworkInfo() {
for (int i=0; i<mCache.mNetworkInfo.size(); ++i) {
// Reset all the cached NetworkInfo Items as disconnected
eventConnectionStatus(false, mCache.mNetworkInfo[i].mDataItem.mType,
mCache.mNetworkInfo[i].mDataItem.mRoaming,
mCache.mNetworkInfo[i].mDataItem.mNetworkHandle,
mCache.mNetworkInfo[i].mDataItem.mApn);
eventConnectionStatus(false, mCache.mNetworkInfo[i].mType, mCache.mNetworkInfo[i].mRoaming,
mCache.mNetworkInfo[i].mNetworkHandle, mCache.mNetworkInfo[i].mApn);
}
}
@@ -1525,109 +1496,91 @@ bool SystemStatus::eventDataItemNotify(IDataItemCore* dataitem)
{
case AIRPLANEMODE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mAirplaneMode,
SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItem*>(dataitem))));
SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItemBase*>(dataitem))));
break;
case ENH_DATA_ITEM_ID:
ret = setIteminReport(mCache.mENH,
SystemStatusENH(*(static_cast<ENHDataItem*>(dataitem))));
SystemStatusENH(*(static_cast<ENHDataItemBase*>(dataitem))));
break;
case GPSSTATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mGPSState,
SystemStatusGpsState(*(static_cast<GPSStateDataItem*>(dataitem))));
SystemStatusGpsState(*(static_cast<GPSStateDataItemBase*>(dataitem))));
break;
case NLPSTATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mNLPStatus,
SystemStatusNLPStatus(*(static_cast<NLPStatusDataItem*>(dataitem))));
SystemStatusNLPStatus(*(static_cast<NLPStatusDataItemBase*>(dataitem))));
break;
case WIFIHARDWARESTATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mWifiHardwareState, SystemStatusWifiHardwareState(
*(static_cast<WifiHardwareStateDataItem*>(dataitem))));
ret = setIteminReport(mCache.mWifiHardwareState,
SystemStatusWifiHardwareState(*(static_cast<WifiHardwareStateDataItemBase*>(dataitem))));
break;
case NETWORKINFO_DATA_ITEM_ID:
ret = setIteminReport(mCache.mNetworkInfo,
SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItem*>(dataitem))));
// Update latest mAllTypes/mAllNetworkHandles of original obj to notify clients
if (ret) {
(static_cast<NetworkInfoDataItem*>(dataitem))->mAllTypes =
mCache.mNetworkInfo.back().mDataItem.mAllTypes;
memcpy((static_cast<NetworkInfoDataItem*>(dataitem))->mAllNetworkHandles,
mCache.mNetworkInfo.back().mDataItem.mAllNetworkHandles, sizeof((
static_cast<NetworkInfoDataItem*>(dataitem))->mAllNetworkHandles));
}
SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItemBase*>(dataitem))));
break;
case RILSERVICEINFO_DATA_ITEM_ID:
ret = setIteminReport(mCache.mRilServiceInfo,
SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItem*>(dataitem))));
SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItemBase*>(dataitem))));
break;
case RILCELLINFO_DATA_ITEM_ID:
ret = setIteminReport(mCache.mRilCellInfo,
SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItem*>(dataitem))));
SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItemBase*>(dataitem))));
break;
case SERVICESTATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mServiceStatus,
SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItem*>(dataitem))));
SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItemBase*>(dataitem))));
break;
case MODEL_DATA_ITEM_ID:
ret = setIteminReport(mCache.mModel,
SystemStatusModel(*(static_cast<ModelDataItem*>(dataitem))));
SystemStatusModel(*(static_cast<ModelDataItemBase*>(dataitem))));
break;
case MANUFACTURER_DATA_ITEM_ID:
ret = setIteminReport(mCache.mManufacturer,
SystemStatusManufacturer(*(static_cast<ManufacturerDataItem*>(dataitem))));
break;
case IN_EMERGENCY_CALL_DATA_ITEM_ID:
ret = setIteminReport(mCache.mInEmergencyCall,
SystemStatusInEmergencyCall(
*(static_cast<InEmergencyCallDataItem*>(dataitem))));
SystemStatusManufacturer(*(static_cast<ManufacturerDataItemBase*>(dataitem))));
break;
case ASSISTED_GPS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mAssistedGps,
SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItem*>(dataitem))));
SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItemBase*>(dataitem))));
break;
case SCREEN_STATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mScreenState,
SystemStatusScreenState(*(static_cast<ScreenStateDataItem*>(dataitem))));
SystemStatusScreenState(*(static_cast<ScreenStateDataItemBase*>(dataitem))));
break;
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mPowerConnectState, SystemStatusPowerConnectState(
*(static_cast<PowerConnectStateDataItem*>(dataitem))));
ret = setIteminReport(mCache.mPowerConnectState,
SystemStatusPowerConnectState(*(static_cast<PowerConnectStateDataItemBase*>(dataitem))));
break;
case TIMEZONE_CHANGE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mTimeZoneChange,
SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItem*>(dataitem))));
SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItemBase*>(dataitem))));
break;
case TIME_CHANGE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mTimeChange,
SystemStatusTimeChange(*(static_cast<TimeChangeDataItem*>(dataitem))));
SystemStatusTimeChange(*(static_cast<TimeChangeDataItemBase*>(dataitem))));
break;
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mWifiSupplicantStatus, SystemStatusWifiSupplicantStatus(
*(static_cast<WifiSupplicantStatusDataItem*>(dataitem))));
ret = setIteminReport(mCache.mWifiSupplicantStatus,
SystemStatusWifiSupplicantStatus(*(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem))));
break;
case SHUTDOWN_STATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mShutdownState,
SystemStatusShutdownState(*(static_cast<ShutdownStateDataItem*>(dataitem))));
SystemStatusShutdownState(*(static_cast<ShutdownStateDataItemBase*>(dataitem))));
break;
case TAC_DATA_ITEM_ID:
ret = setIteminReport(mCache.mTac,
SystemStatusTac(*(static_cast<TacDataItem*>(dataitem))));
SystemStatusTac(*(static_cast<TacDataItemBase*>(dataitem))));
break;
case MCCMNC_DATA_ITEM_ID:
ret = setIteminReport(mCache.mMccMnc,
SystemStatusMccMnc(*(static_cast<MccmncDataItem*>(dataitem))));
SystemStatusMccMnc(*(static_cast<MccmncDataItemBase*>(dataitem))));
break;
case BTLE_SCAN_DATA_ITEM_ID:
ret = setIteminReport(mCache.mBtDeviceScanDetail, SystemStatusBtDeviceScanDetail(
*(static_cast<BtDeviceScanDetailsDataItem*>(dataitem))));
ret = setIteminReport(mCache.mBtDeviceScanDetail,
SystemStatusBtDeviceScanDetail(*(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem))));
break;
case BT_SCAN_DATA_ITEM_ID:
ret = setIteminReport(mCache.mBtLeDeviceScanDetail, SystemStatusBtleDeviceScanDetail(
*(static_cast<BtLeDeviceScanDetailsDataItem*>(dataitem))));
break;
case LOC_FEATURE_STATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mLocFeatureStatus,
SystemStatusLocFeatureStatus(
*(static_cast<LocFeatureStatusDataItem*>(dataitem))));
ret = setIteminReport(mCache.mBtLeDeviceScanDetail,
SystemStatusBtleDeviceScanDetail(*(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem))));
break;
default:
break;
@@ -1786,7 +1739,7 @@ bool SystemStatus::eventConnectionStatus(bool connected, int8_t type,
// send networkinof dataitem to systemstatus observer clients
SystemStatusNetworkInfo s(type, "", "", connected, roaming,
(uint64_t) networkHandle, apn);
mSysStatusObsvr.notify({&s.mDataItem});
mSysStatusObsvr.notify({&s});
return true;
}
@@ -1801,62 +1754,7 @@ bool SystemStatus::eventConnectionStatus(bool connected, int8_t type,
bool SystemStatus::updatePowerConnectState(bool charging)
{
SystemStatusPowerConnectState s(charging);
mSysStatusObsvr.notify({&s.mDataItem});
return true;
}
/******************************************************************************
@brief API to update ENH
@param[In] user consent
@return true when successfully done
******************************************************************************/
bool SystemStatus::eventOptInStatus(bool userConsent)
{
SystemStatusENH s(userConsent, ENHDataItem::FIELD_CONSENT);
mSysStatusObsvr.notify({&s.mDataItem});
return true;
}
/******************************************************************************
@brief API to update Region
@param[In] region
@return true when successfully done
******************************************************************************/
bool SystemStatus::eventRegionStatus(bool region)
{
SystemStatusENH s(region, ENHDataItem::FIELD_REGION);
mSysStatusObsvr.notify({&s.mDataItem});
return true;
}
/******************************************************************************
@brief API to update Location feature QWES status
@param[In] Location feature QWES status
@return true when successfully done
******************************************************************************/
bool SystemStatus::eventLocFeatureStatus(std::unordered_set<int> fids) {
SystemStatusLocFeatureStatus s(fids);
mSysStatusObsvr.notify({&s.mDataItem});
return true;
}
/******************************************************************************
@brief API to notify emergency call
@param[In] is emergency call
@return true when successfully done
******************************************************************************/
bool SystemStatus::eventInEmergencyCall(bool isEmergency)
{
SystemStatusInEmergencyCall s(isEmergency);
mSysStatusObsvr.notify({&s.mDataItem});
mSysStatusObsvr.notify({&s});
return true;
}
} // namespace loc_core

View File

@@ -26,43 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __SYSTEM_STATUS__
#define __SYSTEM_STATUS__
@@ -76,7 +39,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <MsgTask.h>
#include <IDataItemCore.h>
#include <IOsObserver.h>
#include <DataItemConcreteTypes.h>
#include <DataItemConcreteTypesBase.h>
#include <SystemStatusOsObserver.h>
#include <gps_extended_c.h>
@@ -125,7 +88,6 @@ public:
}
virtual void dump(void) {};
inline virtual bool ignore() { return false; };
virtual bool equals(const SystemStatusItemBase& peer __unused) { return false; }
};
class SystemStatusLocation : public SystemStatusItemBase
@@ -141,7 +103,7 @@ public:
mValid(true),
mLocation(location),
mLocationEx(locationEx) {}
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusLocation& peer);
void dump(void) override;
};
@@ -171,7 +133,7 @@ public:
mLeapSecUnc(0),
mTimeUncNs(0ULL) {}
inline SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusTimeAndClock& peer);
void dump(void) override;
};
@@ -182,7 +144,7 @@ public:
inline SystemStatusXoState() :
mXoState(0) {}
inline SystemStatusXoState(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusXoState& peer);
void dump(void) override;
};
@@ -229,7 +191,7 @@ public:
mGalBpAmpI(0),
mGalBpAmpQ(0) {}
inline SystemStatusRfAndParams(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusRfAndParams& peer);
void dump(void) override;
};
@@ -240,7 +202,7 @@ public:
inline SystemStatusErrRecovery() :
mRecErrorRecovery(0) {};
inline SystemStatusErrRecovery(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusErrRecovery& peer);
inline bool ignore() override { return 0 == mRecErrorRecovery; };
void dump(void) override;
};
@@ -265,7 +227,7 @@ public:
mEpiAltUnc(0),
mEpiSrc(0) {}
inline SystemStatusInjectedPosition(const SystemStatusPQWP1& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusInjectedPosition& peer);
void dump(void) override;
};
@@ -287,7 +249,7 @@ public:
mBestHepe(0),
mBestAltUnc(0) {}
inline SystemStatusBestPosition(const SystemStatusPQWP2& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusBestPosition& peer);
void dump(void) override;
};
@@ -323,7 +285,7 @@ public:
mQzssXtraValid(0),
mNavicXtraValid(0) {}
inline SystemStatusXtra(const SystemStatusPQWP3& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusXtra& peer);
void dump(void) override;
};
@@ -343,7 +305,7 @@ public:
mGalEpheValid(0ULL),
mQzssEpheValid(0) {}
inline SystemStatusEphemeris(const SystemStatusPQWP4& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusEphemeris& peer);
void dump(void) override;
};
@@ -389,7 +351,7 @@ public:
mQzssBadMask(0),
mNavicBadMask(0) {}
inline SystemStatusSvHealth(const SystemStatusPQWP5& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusSvHealth& peer);
void dump(void) override;
};
@@ -401,7 +363,7 @@ public:
inline SystemStatusPdr() :
mFixInfoMask(0) {}
inline SystemStatusPdr(const SystemStatusPQWP6& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusPdr& peer);
void dump(void) override;
};
@@ -425,7 +387,7 @@ public:
}
}
inline SystemStatusNavData(const SystemStatusPQWP7& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusNavData& peer);
void dump(void) override;
};
@@ -439,139 +401,153 @@ public:
mFixInfoMask(0),
mHepeLimit(0) {}
inline SystemStatusPositionFailure(const SystemStatusPQWS1& nmea);
bool equals(const SystemStatusItemBase& peer) override;
bool equals(const SystemStatusPositionFailure& peer);
void dump(void) override;
};
/******************************************************************************
SystemStatus report data structure - from DataItem observer
******************************************************************************/
class SystemStatusAirplaneMode : public SystemStatusItemBase {
class SystemStatusAirplaneMode : public SystemStatusItemBase,
public AirplaneModeDataItemBase
{
public:
AirplaneModeDataItem mDataItem;
inline SystemStatusAirplaneMode(bool mode=false): mDataItem(mode) {}
inline SystemStatusAirplaneMode(const AirplaneModeDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mMode == ((const SystemStatusAirplaneMode&)peer).mDataItem.mMode;
inline SystemStatusAirplaneMode(bool mode=false) :
AirplaneModeDataItemBase(mode) {}
inline SystemStatusAirplaneMode(const AirplaneModeDataItemBase& itemBase) :
AirplaneModeDataItemBase(itemBase) {}
inline bool equals(const SystemStatusAirplaneMode& peer) {
return (mMode == peer.mMode);
}
};
class SystemStatusENH : public SystemStatusItemBase {
class SystemStatusENH : public SystemStatusItemBase,
public ENHDataItemBase
{
public:
ENHDataItem mDataItem;
inline SystemStatusENH(bool enabled, ENHDataItem::Fields updateBit = ENHDataItem::FIELD_MAX):
mDataItem(enabled, updateBit) {}
inline SystemStatusENH(const ENHDataItem& itemBase): mDataItem(itemBase) {}
inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& peer) {
mDataItem.mEnhFields = ((const SystemStatusENH&)peer).mDataItem.mEnhFields;
mDataItem.updateFields();
return *this;
}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mEnhFields == ((const SystemStatusENH&)peer).mDataItem.mEnhFields;
inline SystemStatusENH(bool enabled=false) :
ENHDataItemBase(enabled) {}
inline SystemStatusENH(const ENHDataItemBase& itemBase) :
ENHDataItemBase(itemBase) {}
inline bool equals(const SystemStatusENH& peer) {
return (mEnabled == peer.mEnabled);
}
};
class SystemStatusGpsState : public SystemStatusItemBase {
class SystemStatusGpsState : public SystemStatusItemBase,
public GPSStateDataItemBase
{
public:
GPSStateDataItem mDataItem;
inline SystemStatusGpsState(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusGpsState(const GPSStateDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mEnabled == ((const SystemStatusGpsState&)peer).mDataItem.mEnabled;
inline SystemStatusGpsState(bool enabled=false) :
GPSStateDataItemBase(enabled) {}
inline SystemStatusGpsState(const GPSStateDataItemBase& itemBase) :
GPSStateDataItemBase(itemBase) {}
inline bool equals(const SystemStatusGpsState& peer) {
return (mEnabled == peer.mEnabled);
}
inline void dump(void) override {
LOC_LOGD("GpsState: state=%u", mDataItem.mEnabled);
LOC_LOGD("GpsState: state=%u", mEnabled);
}
};
class SystemStatusNLPStatus : public SystemStatusItemBase {
class SystemStatusNLPStatus : public SystemStatusItemBase,
public NLPStatusDataItemBase
{
public:
NLPStatusDataItem mDataItem;
inline SystemStatusNLPStatus(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusNLPStatus(const NLPStatusDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mEnabled == ((const SystemStatusNLPStatus&)peer).mDataItem.mEnabled;
inline SystemStatusNLPStatus(bool enabled=false) :
NLPStatusDataItemBase(enabled) {}
inline SystemStatusNLPStatus(const NLPStatusDataItemBase& itemBase) :
NLPStatusDataItemBase(itemBase) {}
inline bool equals(const SystemStatusNLPStatus& peer) {
return (mEnabled == peer.mEnabled);
}
};
class SystemStatusWifiHardwareState : public SystemStatusItemBase {
class SystemStatusWifiHardwareState : public SystemStatusItemBase,
public WifiHardwareStateDataItemBase
{
public:
WifiHardwareStateDataItem mDataItem;
inline SystemStatusWifiHardwareState(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusWifiHardwareState(const WifiHardwareStateDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mEnabled == ((const SystemStatusWifiHardwareState&)peer).mDataItem.mEnabled;
inline SystemStatusWifiHardwareState(bool enabled=false) :
WifiHardwareStateDataItemBase(enabled) {}
inline SystemStatusWifiHardwareState(const WifiHardwareStateDataItemBase& itemBase) :
WifiHardwareStateDataItemBase(itemBase) {}
inline bool equals(const SystemStatusWifiHardwareState& peer) {
return (mEnabled == peer.mEnabled);
}
};
class SystemStatusNetworkInfo : public SystemStatusItemBase {
class SystemStatusNetworkInfo : public SystemStatusItemBase,
public NetworkInfoDataItemBase
{
NetworkInfoDataItemBase* mSrcObjPtr;
public:
NetworkInfoDataItem mDataItem;
inline SystemStatusNetworkInfo(int32_t type=0, std::string typeName="", string subTypeName="",
bool connected=false, bool roaming=false,
uint64_t networkHandle=NETWORK_HANDLE_UNKNOWN, string apn = "") :
mDataItem((NetworkType)type, type, typeName,
subTypeName, connected && (!roaming), connected, roaming, networkHandle,
apn) {}
inline SystemStatusNetworkInfo(const NetworkInfoDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
const NetworkInfoDataItem peerDI = ((const SystemStatusNetworkInfo&)peer).mDataItem;
bool rtv = (mDataItem.mAllTypes == peerDI.mAllTypes) &&
(mDataItem.mConnected == peerDI.mConnected);
inline SystemStatusNetworkInfo(
int32_t type = 0,
std::string typeName = "",
string subTypeName = "",
bool connected = false,
bool roaming = false,
uint64_t networkHandle = NETWORK_HANDLE_UNKNOWN,
string apn = "") :
NetworkInfoDataItemBase(
(NetworkType)type,
type,
typeName,
subTypeName,
connected && (!roaming),
connected,
roaming,
networkHandle, apn),
mSrcObjPtr(nullptr) {}
inline SystemStatusNetworkInfo(const NetworkInfoDataItemBase& itemBase) :
NetworkInfoDataItemBase(itemBase),
mSrcObjPtr((NetworkInfoDataItemBase*)&itemBase) {
mType = (int32_t)itemBase.getType();
}
inline bool equals(const SystemStatusNetworkInfo& peer) {
bool rtv = (peer.mConnected == mConnected);
for (uint8_t i = 0; rtv && i < MAX_NETWORK_HANDLES; ++i) {
rtv = (mDataItem.mAllNetworkHandles[i] == peerDI.mAllNetworkHandles[i]) && rtv;
rtv &= (mAllNetworkHandles[i] == peer.mAllNetworkHandles[i]);
}
rtv = rtv && !peerDI.mApn.compare(mDataItem.mApn);
LOC_LOGv("NetworkInfoDataItem quals: %d", rtv);
return rtv;
return rtv && !peer.mApn.compare(mApn);
}
inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& curInfo) {
LOC_LOGv("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x mApn=%s",
mDataItem.mAllTypes, mDataItem.mConnected, mDataItem.mType,
mDataItem.mApn.c_str());
uint64_t allTypes = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mDataItem.mAllTypes;
string& apn = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mDataItem.mApn;
mAllTypes, mConnected, mType, mApn.c_str());
uint64_t allTypes = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mAllTypes;
string& apn = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mApn;
// Replace current with cached table for now and then update
memcpy(mDataItem.mAllNetworkHandles,
static_cast<SystemStatusNetworkInfo&>(curInfo).mDataItem.getNetworkHandle(),
sizeof(mDataItem.mAllNetworkHandles));
// Update the apn for non-mobile type connections.
if (TYPE_MOBILE != mDataItem.mType && apn.compare("") != 0) {
mDataItem.mApn = apn;
}
if (mDataItem.mConnected) {
mDataItem.mAllTypes |= allTypes;
memcpy(mAllNetworkHandles,
(static_cast<SystemStatusNetworkInfo&>(curInfo)).getNetworkHandle(),
sizeof(mAllNetworkHandles));
// Update the apn for non-mobile type connections.
if (TYPE_MOBILE != mType && apn.compare("") != 0) {
mApn = apn;
}
if (mConnected) {
mAllTypes |= allTypes;
for (uint8_t i = 0; i < MAX_NETWORK_HANDLES; ++i) {
if (mDataItem.mNetworkHandle ==
mDataItem.mAllNetworkHandles[i].networkHandle) {
if (mNetworkHandle == mAllNetworkHandles[i].networkHandle) {
LOC_LOGD("collate duplicate detected, not updating");
break;
}
if (NETWORK_HANDLE_UNKNOWN ==
mDataItem.mAllNetworkHandles[i].networkHandle) {
mDataItem.mAllNetworkHandles[i].networkHandle =
mDataItem.mNetworkHandle;
mDataItem.mAllNetworkHandles[i].networkType =
(loc_core::NetworkType) mDataItem.mType;
if (NETWORK_HANDLE_UNKNOWN == mAllNetworkHandles[i].networkHandle) {
mAllNetworkHandles[i].networkHandle = mNetworkHandle;
mAllNetworkHandles[i].networkType = (loc_core::NetworkType) mType;
break;
}
}
} else if (0 != mDataItem.mAllTypes) {
} else if (0 != mAllTypes) {
uint8_t deletedIndex = MAX_NETWORK_HANDLES;
uint8_t lastValidIndex = 0;
uint8_t typeCount = 0;
for (; lastValidIndex < MAX_NETWORK_HANDLES && NETWORK_HANDLE_UNKNOWN !=
mDataItem.mAllNetworkHandles[lastValidIndex].networkHandle;
for (; lastValidIndex < MAX_NETWORK_HANDLES &&
NETWORK_HANDLE_UNKNOWN != mAllNetworkHandles[lastValidIndex].networkHandle;
++lastValidIndex) {
// Maintain count for number of network handles still
// connected for given type
if (mDataItem.mType ==
mDataItem.mAllNetworkHandles[lastValidIndex].networkType) {
if (mDataItem.mNetworkHandle ==
mDataItem.mAllNetworkHandles[lastValidIndex].networkHandle) {
if (mType == (int32_t)mAllNetworkHandles[lastValidIndex].networkType) {
if (mNetworkHandle == mAllNetworkHandles[lastValidIndex].networkHandle) {
deletedIndex = lastValidIndex;
} else {
typeCount++;
@@ -586,273 +562,264 @@ public:
if (MAX_NETWORK_HANDLES != deletedIndex) {
LOC_LOGd("deletedIndex:%u, lastValidIndex:%u, typeCount:%u",
deletedIndex, lastValidIndex, typeCount);
mDataItem.mAllNetworkHandles[deletedIndex] =
mDataItem.mAllNetworkHandles[lastValidIndex];
mDataItem.mAllNetworkHandles[lastValidIndex].networkHandle =
NETWORK_HANDLE_UNKNOWN;
mDataItem.mAllNetworkHandles[lastValidIndex].networkType = TYPE_UNKNOWN;
mAllNetworkHandles[deletedIndex] = mAllNetworkHandles[lastValidIndex];
mAllNetworkHandles[lastValidIndex].networkHandle = NETWORK_HANDLE_UNKNOWN;
mAllNetworkHandles[lastValidIndex].networkType = TYPE_UNKNOWN;
}
// If no more handles of given type, set bitmask
if (0 == typeCount) {
mDataItem.mAllTypes = (allTypes & (~mDataItem.mAllTypes));
LOC_LOGD("mAllTypes:%" PRIx64, mDataItem.mAllTypes);
mAllTypes = (allTypes & (~mAllTypes));
LOC_LOGD("mAllTypes:%" PRIx64, mAllTypes);
}
} // else (mDataItem.mConnected == false && mDataItem.mAllTypes == 0)
// we keep mDataItem->mAllTypes as 0, which means no more connections.
} // else (mConnected == false && mAllTypes == 0)
// we keep mAllTypes as 0, which means no more connections.
if (nullptr != mSrcObjPtr) {
// this is critical, changing mAllTypes of the original obj
mSrcObjPtr->mAllTypes = mAllTypes;
memcpy(mSrcObjPtr->mAllNetworkHandles,
mAllNetworkHandles,
sizeof(mSrcObjPtr->mAllNetworkHandles));
}
return *this;
}
inline void dump(void) override {
LOC_LOGD("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x mApn=%s",
mDataItem.mAllTypes, mDataItem.mConnected, mDataItem.mType, mDataItem.mApn.c_str());
mAllTypes, mConnected, mType, mApn.c_str());
}
};
class SystemStatusServiceInfo : public SystemStatusItemBase {
class SystemStatusServiceInfo : public SystemStatusItemBase,
public RilServiceInfoDataItemBase
{
public:
RilServiceInfoDataItem mDataItem;
inline SystemStatusServiceInfo(): mDataItem() {}
inline SystemStatusServiceInfo(const RilServiceInfoDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return ((const SystemStatusServiceInfo&)peer).mDataItem == mDataItem;
inline SystemStatusServiceInfo() :
RilServiceInfoDataItemBase() {}
inline SystemStatusServiceInfo(const RilServiceInfoDataItemBase& itemBase) :
RilServiceInfoDataItemBase(itemBase) {}
inline bool equals(const SystemStatusServiceInfo& peer) {
return static_cast<const RilServiceInfoDataItemBase&>(peer) ==
static_cast<const RilServiceInfoDataItemBase&>(*this);
}
};
class SystemStatusRilCellInfo : public SystemStatusItemBase {
class SystemStatusRilCellInfo : public SystemStatusItemBase,
public RilCellInfoDataItemBase
{
public:
RilCellInfoDataItem mDataItem;
inline SystemStatusRilCellInfo(): mDataItem() {}
inline SystemStatusRilCellInfo(const RilCellInfoDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return ((const SystemStatusRilCellInfo&)peer).mDataItem == mDataItem;
inline SystemStatusRilCellInfo() :
RilCellInfoDataItemBase() {}
inline SystemStatusRilCellInfo(const RilCellInfoDataItemBase& itemBase) :
RilCellInfoDataItemBase(itemBase) {}
inline bool equals(const SystemStatusRilCellInfo& peer) {
return static_cast<const RilCellInfoDataItemBase&>(peer) ==
static_cast<const RilCellInfoDataItemBase&>(*this);
}
};
class SystemStatusServiceStatus : public SystemStatusItemBase {
class SystemStatusServiceStatus : public SystemStatusItemBase,
public ServiceStatusDataItemBase
{
public:
ServiceStatusDataItem mDataItem;
inline SystemStatusServiceStatus(int32_t mServiceState=0): mDataItem(mServiceState) {}
inline SystemStatusServiceStatus(const ServiceStatusDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mServiceState ==
((const SystemStatusServiceStatus&)peer).mDataItem.mServiceState;
inline SystemStatusServiceStatus(int32_t mServiceState=0) :
ServiceStatusDataItemBase(mServiceState) {}
inline SystemStatusServiceStatus(const ServiceStatusDataItemBase& itemBase) :
ServiceStatusDataItemBase(itemBase) {}
inline bool equals(const SystemStatusServiceStatus& peer) {
return (mServiceState == peer.mServiceState);
}
};
class SystemStatusModel : public SystemStatusItemBase {
class SystemStatusModel : public SystemStatusItemBase,
public ModelDataItemBase
{
public:
ModelDataItem mDataItem;
inline SystemStatusModel(string name=""): mDataItem(name) {}
inline SystemStatusModel(const ModelDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mModel == ((const SystemStatusModel&)peer).mDataItem.mModel;
}
};
class SystemStatusManufacturer : public SystemStatusItemBase {
public:
ManufacturerDataItem mDataItem;
inline SystemStatusManufacturer(string name=""): mDataItem(name) {}
inline SystemStatusManufacturer(const ManufacturerDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mManufacturer ==
((const SystemStatusManufacturer&)peer).mDataItem.mManufacturer;
}
};
class SystemStatusAssistedGps : public SystemStatusItemBase {
public:
AssistedGpsDataItem mDataItem;
inline SystemStatusAssistedGps(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusAssistedGps(const AssistedGpsDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mEnabled == ((const SystemStatusAssistedGps&)peer).mDataItem.mEnabled;
}
};
class SystemStatusScreenState : public SystemStatusItemBase {
public:
ScreenStateDataItem mDataItem;
inline SystemStatusScreenState(bool state=false): mDataItem(state) {}
inline SystemStatusScreenState(const ScreenStateDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mState == ((const SystemStatusScreenState&)peer).mDataItem.mState;
}
};
class SystemStatusPowerConnectState : public SystemStatusItemBase {
public:
PowerConnectStateDataItem mDataItem;
inline SystemStatusPowerConnectState(bool state=false): mDataItem(state) {}
inline SystemStatusPowerConnectState(const PowerConnectStateDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mState == ((const SystemStatusPowerConnectState&)peer).mDataItem.mState;
}
};
class SystemStatusTimeZoneChange : public SystemStatusItemBase {
public:
TimeZoneChangeDataItem mDataItem;
inline SystemStatusTimeZoneChange(int64_t currTimeMillis=0ULL, int32_t rawOffset=0,
int32_t dstOffset=0): mDataItem(currTimeMillis, rawOffset, dstOffset) {}
inline SystemStatusTimeZoneChange(const TimeZoneChangeDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mCurrTimeMillis ==
((const SystemStatusTimeZoneChange&)peer).mDataItem.mCurrTimeMillis &&
mDataItem.mRawOffsetTZ ==
((const SystemStatusTimeZoneChange&)peer).mDataItem.mRawOffsetTZ &&
mDataItem.mDstOffsetTZ ==
((const SystemStatusTimeZoneChange&)peer).mDataItem.mDstOffsetTZ;
}
};
class SystemStatusTimeChange : public SystemStatusItemBase {
public:
TimeChangeDataItem mDataItem;
inline SystemStatusTimeChange(
int64_t currTimeMillis=0ULL, int32_t rawOffset=0, int32_t dstOffset=0):
mDataItem(currTimeMillis, rawOffset, dstOffset) {}
inline SystemStatusTimeChange(const TimeChangeDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mCurrTimeMillis ==
((const SystemStatusTimeChange&)peer).mDataItem.mCurrTimeMillis &&
mDataItem.mRawOffsetTZ ==
((const SystemStatusTimeChange&)peer).mDataItem.mRawOffsetTZ &&
mDataItem.mDstOffsetTZ ==
((const SystemStatusTimeChange&)peer).mDataItem.mDstOffsetTZ;
}
};
class SystemStatusWifiSupplicantStatus : public SystemStatusItemBase {
public:
WifiSupplicantStatusDataItem mDataItem;
inline SystemStatusWifiSupplicantStatus(): mDataItem() {}
inline SystemStatusWifiSupplicantStatus(const WifiSupplicantStatusDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mState ==
((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mState &&
mDataItem.mApMacAddressValid ==
((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mApMacAddressValid &&
mDataItem.mWifiApSsidValid ==
((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mWifiApSsidValid &&
mDataItem.mWifiApSsid ==
((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mWifiApSsid;
inline SystemStatusModel(string name="") :
ModelDataItemBase(name) {}
inline SystemStatusModel(const ModelDataItemBase& itemBase) :
ModelDataItemBase(itemBase) {}
inline bool equals(const SystemStatusModel& peer) {
return (mModel == peer.mModel);
}
};
class SystemStatusShutdownState : public SystemStatusItemBase {
class SystemStatusManufacturer : public SystemStatusItemBase,
public ManufacturerDataItemBase
{
public:
ShutdownStateDataItem mDataItem;
inline SystemStatusShutdownState(bool state=false): mDataItem(state) {}
inline SystemStatusShutdownState(const ShutdownStateDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mState == ((const SystemStatusShutdownState&)peer).mDataItem.mState;
inline SystemStatusManufacturer(string name="") :
ManufacturerDataItemBase(name) {}
inline SystemStatusManufacturer(const ManufacturerDataItemBase& itemBase) :
ManufacturerDataItemBase(itemBase) {}
inline bool equals(const SystemStatusManufacturer& peer) {
return (mManufacturer == peer.mManufacturer);
}
};
class SystemStatusTac : public SystemStatusItemBase {
class SystemStatusAssistedGps : public SystemStatusItemBase,
public AssistedGpsDataItemBase
{
public:
TacDataItem mDataItem;
inline SystemStatusTac(std::string value=""): mDataItem(value) {}
inline SystemStatusTac(const TacDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mValue == ((const SystemStatusTac&)peer).mDataItem.mValue;
inline SystemStatusAssistedGps(bool enabled=false) :
AssistedGpsDataItemBase(enabled) {}
inline SystemStatusAssistedGps(const AssistedGpsDataItemBase& itemBase) :
AssistedGpsDataItemBase(itemBase) {}
inline bool equals(const SystemStatusAssistedGps& peer) {
return (mEnabled == peer.mEnabled);
}
};
class SystemStatusScreenState : public SystemStatusItemBase,
public ScreenStateDataItemBase
{
public:
inline SystemStatusScreenState(bool state=false) :
ScreenStateDataItemBase(state) {}
inline SystemStatusScreenState(const ScreenStateDataItemBase& itemBase) :
ScreenStateDataItemBase(itemBase) {}
inline bool equals(const SystemStatusScreenState& peer) {
return (mState == peer.mState);
}
};
class SystemStatusPowerConnectState : public SystemStatusItemBase,
public PowerConnectStateDataItemBase
{
public:
inline SystemStatusPowerConnectState(bool state=false) :
PowerConnectStateDataItemBase(state) {}
inline SystemStatusPowerConnectState(const PowerConnectStateDataItemBase& itemBase) :
PowerConnectStateDataItemBase(itemBase) {}
inline bool equals(const SystemStatusPowerConnectState& peer) {
return (mState == peer.mState);
}
};
class SystemStatusTimeZoneChange : public SystemStatusItemBase,
public TimeZoneChangeDataItemBase
{
public:
inline SystemStatusTimeZoneChange(
int64_t currTimeMillis=0ULL, int32_t rawOffset=0, int32_t dstOffset=0) :
TimeZoneChangeDataItemBase(currTimeMillis, rawOffset, dstOffset) {}
inline SystemStatusTimeZoneChange(const TimeZoneChangeDataItemBase& itemBase) :
TimeZoneChangeDataItemBase(itemBase) {}
inline bool equals(const SystemStatusTimeZoneChange& peer) {
return ((mCurrTimeMillis == peer.mCurrTimeMillis) &&
(mRawOffsetTZ == peer.mRawOffsetTZ) &&
(mDstOffsetTZ == peer.mDstOffsetTZ));
}
};
class SystemStatusTimeChange : public SystemStatusItemBase,
public TimeChangeDataItemBase
{
public:
inline SystemStatusTimeChange(
int64_t currTimeMillis=0ULL, int32_t rawOffset=0, int32_t dstOffset=0) :
TimeChangeDataItemBase(currTimeMillis, rawOffset, dstOffset) {}
inline SystemStatusTimeChange(const TimeChangeDataItemBase& itemBase) :
TimeChangeDataItemBase(itemBase) {}
inline bool equals(const SystemStatusTimeChange& peer) {
return ((mCurrTimeMillis == peer.mCurrTimeMillis) &&
(mRawOffsetTZ == peer.mRawOffsetTZ) &&
(mDstOffsetTZ == peer.mDstOffsetTZ));
}
};
class SystemStatusWifiSupplicantStatus : public SystemStatusItemBase,
public WifiSupplicantStatusDataItemBase
{
public:
inline SystemStatusWifiSupplicantStatus() :
WifiSupplicantStatusDataItemBase() {}
inline SystemStatusWifiSupplicantStatus(const WifiSupplicantStatusDataItemBase& itemBase) :
WifiSupplicantStatusDataItemBase(itemBase) {}
inline bool equals(const SystemStatusWifiSupplicantStatus& peer) {
return ((mState == peer.mState) &&
(mApMacAddressValid == peer.mApMacAddressValid) &&
(mWifiApSsidValid == peer.mWifiApSsidValid) &&
(mWifiApSsid == peer.mWifiApSsid));
}
};
class SystemStatusShutdownState : public SystemStatusItemBase,
public ShutdownStateDataItemBase
{
public:
inline SystemStatusShutdownState(bool state=false) :
ShutdownStateDataItemBase(state) {}
inline SystemStatusShutdownState(const ShutdownStateDataItemBase& itemBase) :
ShutdownStateDataItemBase(itemBase) {}
inline bool equals(const SystemStatusShutdownState& peer) {
return (mState == peer.mState);
}
};
class SystemStatusTac : public SystemStatusItemBase,
public TacDataItemBase
{
public:
inline SystemStatusTac(std::string value="") :
TacDataItemBase(value) {}
inline SystemStatusTac(const TacDataItemBase& itemBase) :
TacDataItemBase(itemBase) {}
inline bool equals(const SystemStatusTac& peer) {
return (mValue == peer.mValue);
}
inline void dump(void) override {
LOC_LOGD("Tac: value=%s", mDataItem.mValue.c_str());
LOC_LOGD("Tac: value=%s", mValue.c_str());
}
};
class SystemStatusMccMnc : public SystemStatusItemBase {
class SystemStatusMccMnc : public SystemStatusItemBase,
public MccmncDataItemBase
{
public:
MccmncDataItem mDataItem;
inline SystemStatusMccMnc(std::string value=""): mDataItem(value) {}
inline SystemStatusMccMnc(const MccmncDataItem& itemBase): mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mValue == ((const SystemStatusMccMnc&)peer).mDataItem.mValue;
inline SystemStatusMccMnc(std::string value="") :
MccmncDataItemBase(value) {}
inline SystemStatusMccMnc(const MccmncDataItemBase& itemBase) :
MccmncDataItemBase(itemBase) {}
inline bool equals(const SystemStatusMccMnc& peer) {
return (mValue == peer.mValue);
}
inline void dump(void) override {
LOC_LOGD("TacMccMnc value=%s", mDataItem.mValue.c_str());
LOC_LOGD("TacMccMnc value=%s", mValue.c_str());
}
};
class SystemStatusBtDeviceScanDetail : public SystemStatusItemBase {
class SystemStatusBtDeviceScanDetail : public SystemStatusItemBase,
public BtDeviceScanDetailsDataItemBase
{
public:
BtDeviceScanDetailsDataItem mDataItem;
inline SystemStatusBtDeviceScanDetail(): mDataItem() {}
inline SystemStatusBtDeviceScanDetail(const BtDeviceScanDetailsDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mApSrnRssi ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mApSrnRssi &&
memcmp(mDataItem.mApSrnMacAddress,
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mApSrnMacAddress,
sizeof(mDataItem.mApSrnMacAddress)) == 0 &&
mDataItem.mApSrnTimestamp ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mApSrnTimestamp &&
mDataItem.mRequestTimestamp ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mRequestTimestamp &&
mDataItem.mReceiveTimestamp ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mReceiveTimestamp;
inline SystemStatusBtDeviceScanDetail() :
BtDeviceScanDetailsDataItemBase() {}
inline SystemStatusBtDeviceScanDetail(const BtDeviceScanDetailsDataItemBase& itemBase) :
BtDeviceScanDetailsDataItemBase(itemBase) {}
inline bool equals(const SystemStatusBtDeviceScanDetail& peer) {
return ((mApSrnRssi == peer.mApSrnRssi) &&
(0 == memcmp(mApSrnMacAddress, peer.mApSrnMacAddress, sizeof(mApSrnMacAddress))) &&
(mApSrnTimestamp == peer.mApSrnTimestamp) &&
(mRequestTimestamp == peer.mRequestTimestamp) &&
(mReceiveTimestamp == peer.mReceiveTimestamp));
}
};
class SystemStatusBtleDeviceScanDetail : public SystemStatusItemBase {
class SystemStatusBtleDeviceScanDetail : public SystemStatusItemBase,
public BtLeDeviceScanDetailsDataItemBase
{
public:
BtLeDeviceScanDetailsDataItem mDataItem;
inline SystemStatusBtleDeviceScanDetail(): mDataItem() {}
inline SystemStatusBtleDeviceScanDetail(const BtLeDeviceScanDetailsDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mApSrnRssi ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mApSrnRssi &&
memcmp(mDataItem.mApSrnMacAddress,
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mApSrnMacAddress,
sizeof(mDataItem.mApSrnMacAddress)) == 0 &&
mDataItem.mApSrnTimestamp ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mApSrnTimestamp &&
mDataItem.mRequestTimestamp ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mRequestTimestamp &&
mDataItem.mReceiveTimestamp ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mReceiveTimestamp;
}
};
class SystemStatusLocFeatureStatus : public SystemStatusItemBase {
public:
LocFeatureStatusDataItem mDataItem;
inline SystemStatusLocFeatureStatus(std::unordered_set<int> fids) : mDataItem(fids) {}
inline SystemStatusLocFeatureStatus(const LocFeatureStatusDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mFids ==
((const SystemStatusLocFeatureStatus&)peer).mDataItem.mFids;
}
inline void dump(void) override {
string str;
mDataItem.stringify(str);
LOC_LOGd("Location feature qwes status: %s", str.c_str());
}
};
class SystemStatusInEmergencyCall : public SystemStatusItemBase {
public:
InEmergencyCallDataItem mDataItem;
inline SystemStatusInEmergencyCall(bool value = false): mDataItem(value) {}
inline SystemStatusInEmergencyCall(const InEmergencyCallDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mIsEmergency ==
((const SystemStatusInEmergencyCall&)peer).mDataItem.mIsEmergency;
}
inline void dump(void) override {
LOC_LOGd("In Emergency Call: %d", mDataItem.mIsEmergency);
inline SystemStatusBtleDeviceScanDetail() :
BtLeDeviceScanDetailsDataItemBase() {}
inline SystemStatusBtleDeviceScanDetail(const BtLeDeviceScanDetailsDataItemBase& itemBase) :
BtLeDeviceScanDetailsDataItemBase(itemBase) {}
inline bool equals(const SystemStatusBtleDeviceScanDetail& peer) {
return ((mApSrnRssi == peer.mApSrnRssi) &&
(0 == memcmp(mApSrnMacAddress, peer.mApSrnMacAddress, sizeof(mApSrnMacAddress))) &&
(mApSrnTimestamp == peer.mApSrnTimestamp) &&
(mRequestTimestamp == peer.mRequestTimestamp) &&
(mReceiveTimestamp == peer.mReceiveTimestamp));
}
};
@@ -895,7 +862,6 @@ public:
std::vector<SystemStatusServiceStatus> mServiceStatus;
std::vector<SystemStatusModel> mModel;
std::vector<SystemStatusManufacturer> mManufacturer;
std::vector<SystemStatusInEmergencyCall> mInEmergencyCall;
std::vector<SystemStatusAssistedGps> mAssistedGps;
std::vector<SystemStatusScreenState> mScreenState;
std::vector<SystemStatusPowerConnectState> mPowerConnectState;
@@ -907,7 +873,6 @@ public:
std::vector<SystemStatusMccMnc> mMccMnc;
std::vector<SystemStatusBtDeviceScanDetail> mBtDeviceScanDetail;
std::vector<SystemStatusBtleDeviceScanDetail> mBtLeDeviceScanDetail;
std::vector<SystemStatusLocFeatureStatus> mLocFeatureStatus;
};
/******************************************************************************
@@ -953,10 +918,6 @@ public:
bool roaming, NetworkHandle networkHandle, string& apn);
bool updatePowerConnectState(bool charging);
void resetNetworkInfo();
bool eventOptInStatus(bool userConsent);
bool eventRegionStatus(bool region);
bool eventLocFeatureStatus(std::unordered_set<int> fids);
bool eventInEmergencyCall(bool isEmergency);
};
} // namespace loc_core

View File

@@ -46,6 +46,9 @@ COUT SystemStatusOsObserver::containerTransfer(CINT& inContainer) {
}
SystemStatusOsObserver::~SystemStatusOsObserver() {
// Close data-item library handle
DataItemsFactoryProxy::closeDataItemLibraryHandle();
// Destroy cache
for (auto each : mDataItemCache) {
if (nullptr != each.second) {
@@ -109,10 +112,10 @@ void SystemStatusOsObserver::subscribe(const list<DataItemId>& l, IDataItemObser
// Send subscription set to framework
if (nullptr != mParent->mContext.mSubscriptionObj) {
if (mToRequestData) {
LOC_LOGd("Request Data sent to framework for the following");
LOC_LOGD("Request Data sent to framework for the following");
mParent->mContext.mSubscriptionObj->requestData(diItemlist, mParent);
} else if (!dataItemsToSubscribe.empty()) {
LOC_LOGd("Subscribe Request sent to framework for the following");
LOC_LOGD("Subscribe Request sent to framework for the following");
mParent->logMe(dataItemsToSubscribe);
mParent->mContext.mSubscriptionObj->subscribe(
containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
@@ -174,7 +177,7 @@ void SystemStatusOsObserver::updateSubscription(
if (nullptr != mParent->mContext.mSubscriptionObj) {
// Send subscription set to framework
if (!dataItemsToSubscribe.empty()) {
LOC_LOGd("Subscribe Request sent to framework for the following");
LOC_LOGD("Subscribe Request sent to framework for the following");
mParent->logMe(dataItemsToSubscribe);
mParent->mContext.mSubscriptionObj->subscribe(
@@ -185,7 +188,7 @@ void SystemStatusOsObserver::updateSubscription(
// Send unsubscribe to framework
if (!dataItemsToUnsubscribe.empty()) {
LOC_LOGd("Unsubscribe Request sent to framework for the following");
LOC_LOGD("Unsubscribe Request sent to framework for the following");
mParent->logMe(dataItemsToUnsubscribe);
mParent->mContext.mSubscriptionObj->unsubscribe(
@@ -227,7 +230,7 @@ void SystemStatusOsObserver::unsubscribe(
&dataItemsToUnsubscribe, nullptr);
if (nullptr != mParent->mContext.mSubscriptionObj && !dataItemsToUnsubscribe.empty()) {
LOC_LOGd("Unsubscribe Request sent to framework for the following data items");
LOC_LOGD("Unsubscribe Request sent to framework for the following data items");
mParent->logMe(dataItemsToUnsubscribe);
// Send unsubscribe to framework
@@ -268,7 +271,7 @@ void SystemStatusOsObserver::unsubscribeAll(IDataItemObserver* client)
if (!dataItemsToUnsubscribe.empty() &&
nullptr != mParent->mContext.mSubscriptionObj) {
LOC_LOGd("Unsubscribe Request sent to framework for the following data items");
LOC_LOGD("Unsubscribe Request sent to framework for the following data items");
mParent->logMe(dataItemsToUnsubscribe);
// Send unsubscribe to framework
@@ -344,16 +347,19 @@ void SystemStatusOsObserver::notify(const list<IDataItemCore*>& dlist)
};
if (!dlist.empty()) {
vector<IDataItemCore*> dataItemVec;
vector<IDataItemCore*> dataItemVec(dlist.size());
for (auto each : dlist) {
IDataItemCore* di = DataItemsFactoryProxy::createNewDataItem(each);
IDataItemCore* di = DataItemsFactoryProxy::createNewDataItem(each->getId());
if (nullptr == di) {
LOC_LOGw("Unable to create dataitem:%d", each->getId());
continue;
}
// Copy contents into the newly created data item
di->copy(each);
// add this dataitem if updated from last one
dataItemVec.push_back(di);
IF_LOC_LOGD {
@@ -375,7 +381,7 @@ void SystemStatusOsObserver::notify(const list<IDataItemCore*>& dlist)
void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
{
if (nullptr == mContext.mFrameworkActionReqObj) {
LOC_LOGe("Framework action request object is NULL");
LOC_LOGE("%s:%d]: Framework action request object is NULL", __func__, __LINE__);
return;
}
@@ -386,7 +392,7 @@ void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
// Add reference count as 1 and add dataitem to map
pair<DataItemId, int> cpair(dit, 1);
mActiveRequestCount.insert(cpair);
LOC_LOGd("Sending turnOn request");
LOC_LOGD("Sending turnOn request");
// Send action turn on to framework
struct HandleTurnOnMsg : public LocMsg {
@@ -407,14 +413,14 @@ void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
else {
// Found in map, update reference count
citer->second++;
LOC_LOGd("turnOn - Data item:%d Num_refs:%d", dit, citer->second);
LOC_LOGD("turnOn - Data item:%d Num_refs:%d", dit, citer->second);
}
}
void SystemStatusOsObserver::turnOff(DataItemId dit)
{
if (nullptr == mContext.mFrameworkActionReqObj) {
LOC_LOGe("Framework action request object is NULL");
LOC_LOGE("%s:%d]: Framework action request object is NULL", __func__, __LINE__);
return;
}
@@ -423,7 +429,7 @@ void SystemStatusOsObserver::turnOff(DataItemId dit)
if (citer != mActiveRequestCount.end()) {
// found
citer->second--;
LOC_LOGd("turnOff - Data item:%d Remaining:%d", dit, citer->second);
LOC_LOGD("turnOff - Data item:%d Remaining:%d", dit, citer->second);
if(citer->second == 0) {
// if this was last reference, remove item from map and turn off module
mActiveRequestCount.erase(citer);
@@ -536,7 +542,7 @@ void SystemStatusOsObserver::sendCachedDataItems(
if (citer != mDataItemCache.end()) {
string dv;
citer->second->stringify(dv);
LOC_LOGi("DataItem: %s >> %s", dv.c_str(), clientName.c_str());
LOC_LOGI("DataItem: %s >> %s", dv.c_str(), clientName.c_str());
dataItems.push_front(citer->second);
}
}
@@ -558,22 +564,27 @@ bool SystemStatusOsObserver::updateCache(IDataItemCore* d)
// handling it, so SystemStatusOsObserver also doesn't.
// So it has to be true to proceed.
if (nullptr != d && mSystemStatus->eventDataItemNotify(d)) {
dataItemUpdated = true;
auto citer = mDataItemCache.find(d->getId());
if (citer == mDataItemCache.end()) {
// New data item; not found in cache
IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(d);
IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(d->getId());
if (nullptr != dataitem) {
// Copy the contents of the data item
dataitem->copy(d);
// Insert in mDataItemCache
mDataItemCache.insert(std::make_pair(d->getId(), dataitem));
dataItemUpdated = true;
}
} else {
// Found in cache; Update cache if necessary
citer->second->copyFrom(d);
citer->second->copy(d, &dataItemUpdated);
}
if (dataItemUpdated) {
LOC_LOGV("DataItem:%d updated:%d", d->getId(), dataItemUpdated);
}
}
LOC_LOGd("DataItem:%d updated:%d", d->getId(), dataItemUpdated);
return dataItemUpdated;
}

View File

@@ -1,983 +0,0 @@
/* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation, nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#include "DataItemConcreteTypes.h"
#include <inttypes.h>
#include <log_util.h>
#define ENH_FIELD_ENABLED "IS_QUALCOMM_ENHANCED_PROVIDER_ENABLED"
#define AIRPLANEMODE_FIELD_MODE "IS_AIRPLANE_MODE_ON"
#define ENH_FIELD_ENABLED "IS_QUALCOMM_ENHANCED_PROVIDER_ENABLED"
#define GPSSTATE_FIELD_ENABLED "IS_GPS_PROVIDER_ENABLED"
#define NLPSTATUS_FIELD_ENABLED "IS_NETWORK_PROVIDER_ENABLED"
#define WIFIHARDWARESTATE_FIELD_ENABLED "IS_WIFI_HARDWARE_ON"
#define SCREENSTATE_FIELD_ENABLED "IS_SCREEN_ON"
#define POWERCONNECTSTATE_FIELD_ENABLED "IS_POWER_CONNECTED"
#define TIMEZONECHANGE_FIELD_ENABLED "IS_TIMEZONE_CHANGED"
#define TIMECHANGE_FIELD_ENABLED "IS_TIME_CHANGED"
#define TIMECHANGE_FIELD_CURRENT_TIME_MILLIS "CURR_TIME_MILLIS"
#define TIMECHANGE_FIELD_RAW_OFFSET_TZ "RAW_OFFSET_TZ"
#define TIMECHANGE_FIELD_DST_OFFSET_TZ "DST_OFFSET_TZ"
#define SHUTDOWN_FIELD_ENABLED "IS_SHUTDOWN"
#define ASSISTEDGPS_FIELD_ENABLED "IS_ASSISTED_GPS_ENABLED"
#define NETWORKINFO_CARD "ACTIVE_NETWORK_INFO"
#define NETWORKINFO_FIELD_TYPE "TYPE"
#define NETWORKINFO_FIELD_TYPENAME "TYPE_NAME"
#define NETWORKINFO_FIELD_SUBTYPENAME "SUB_TYPE_NAME"
#define NETWORKINFO_FIELD_AVAILABLE "IS_AVAILABLE"
#define NETWORKINFO_FIELD_CONNECTED "IS_CONNECTED"
#define NETWORKINFO_FIELD_ROAMING "IS_ROAMING"
#define NETWORKINFO_FIELD_NETWORKHANDLE_0 "NETWORK_HANDLE_0"
#define NETWORKINFO_FIELD_NETWORKHANDLE_1 "NETWORK_HANDLE_1"
#define NETWORKINFO_FIELD_NETWORKHANDLE_2 "NETWORK_HANDLE_2"
#define NETWORKINFO_FIELD_NETWORKHANDLE_3 "NETWORK_HANDLE_3"
#define NETWORKINFO_FIELD_NETWORKHANDLE_4 "NETWORK_HANDLE_4"
#define NETWORKINFO_FIELD_NETWORKHANDLE_5 "NETWORK_HANDLE_5"
#define NETWORKINFO_FIELD_NETWORKHANDLE_6 "NETWORK_HANDLE_6"
#define NETWORKINFO_FIELD_NETWORKHANDLE_7 "NETWORK_HANDLE_7"
#define NETWORKINFO_FIELD_NETWORKHANDLE_8 "NETWORK_HANDLE_8"
#define NETWORKINFO_FIELD_NETWORKHANDLE_9 "NETWORK_HANDLE_9"
#define SERVICESTATUS_FIELD_STATE "CELL_NETWORK_STATUS"
#define MODEL_FIELD_NAME "MODEL"
#define MANUFACTURER_FIELD_NAME "MANUFACTURER"
#define OSSTATUS_CARD "ACTIVE_NETWORK_INFO"
#define RILSERVICEINFO_CARD "RIL-SERVICE-INFO"
#define RILSERVICEINFO_FIELD_ARIF_TYPE_MASK "SUPPORTED-AIRINTERFACE-TYPE-MASK"
#define RILSERVICEINFO_FIELD_CARRIER_ARIF_TYPE "CARRIER-AIRINTERFACE-TYPE"
#define RILSERVICEINFO_FIELD_CARRIER_MCC "MOBILE-COUNTRY-CODE"
#define RILSERVICEINFO_FIELD_CARRIER_MNC "MOBILE-NETWORK-CODE"
#define RILSERVICEINFO_FIELD_CARRIER_NAME "HOME-CARRIER-NAME"
#define RILCELLINFO_CARD "RIL-CELL-UPDATE"
#define RILCELLINFO_FIELD_NETWORK_STATUS "NETWORK-STATUS"
#define RILCELLINFO_FIELD_RIL_TECH_TYPE "RIL-TECH-TYPE"
#define RILLCELLINFO_FIELD_MCC "MOBILE-COUNTRY-CODE"
#define RILLCELLINFO_FIELD_MNC "MOBILE-NETWORK-CODE"
#define RILLCELLINFO_FIELD_LAC "LOCATION-AREA-CODE"
#define RILLCELLINFO_FIELD_CID "CELL-ID"
#define RILLCELLINFO_FIELD_SID "SYSTEM-ID"
#define RILLCELLINFO_FIELD_NID "NETWORK-ID"
#define RILLCELLINFO_FIELD_BSID "BASE-STATION-ID"
#define RILLCELLINFO_FIELD_BSLAT "BASE-STATION-LATITUDE"
#define RILLCELLINFO_FIELD_BSLON "BASE-STATION-LONGITUDE"
#define RILLCELLINFO_FIELD_UTC_TIME_OFFSET "TIME-ZONE-OFFSET"
#define RILLCELLINFO_FIELD_DAYLIGHT_TIMEZONE "IN-DAY-LIGHT-SAVING"
#define RILLCELLINFO_FIELD_TAC "TRACKING-AREA-CODE"
#define RILLCELLINFO_FIELD_PCI "PHYSICAL-CELL-ID"
#define RILLCELLINFO_FIELD_NB_MODE "NB-MODE"
#define RILLCELLINFO_FIELD_NB_EARFCN_OFFSET "NB-EARFCN-OFFSET"
#define WIFI_SUPPLICANT_FIELD_STATE "WIFI-SUPPLICANT-STATE"
#define TAC_FIELD_NAME "TAC"
#define MCCMNC_FIELD_NAME "MCCMNC"
#define BTLESCANDETAILS_FIELD_VALID "BTLE_VALID_DEV"
#define BTLESCANDETAILS_FIELD_RSSI "BTLE_DEV_RSSI"
#define BTLESCANDETAILS_FIELD_MAC "BTLE_DEV_MAC"
#define BTLESCANDETAILS_FIELD_SCANREQ "BTLE_SCAN_REQ_TIME"
#define BTLESCANDETAILS_FIELD_SCANSTART "BTLE_SCAN_START_TIME"
#define BTLESCANDETAILS_FIELD_SCANRECV "BTLE_SCAN_RECV_TIME"
#define BTLESCANDETAILS_FIELD_SCANERROR "BTLE_SCAN_ERR"
#define BTSCANDETAILS_FIELD_VALID "BT_VALID_DEV"
#define BTSCANDETAILS_FIELD_RSSI "BT_DEV_RSSI"
#define BTSCANDETAILS_FIELD_MAC "BT_DEV_MAC"
#define BTSCANDETAILS_FIELD_SCANREQ "BT_SCAN_REQ_TIME"
#define BTSCANDETAILS_FIELD_SCANSTART "BT_SCAN_START_TIME"
#define BTSCANDETAILS_FIELD_SCANRECV "BT_SCAN_RECV_TIME"
#define BTSCANDETAILS_FIELD_SCANERROR "BT_SCAN_ERR"
#define OEM_GTP_UPLAOD_TRIGGER_READY_FIELD_NAME "OEM-GTP-UPLOAD-TRIGGER-READY"
#define BATTERYLEVEL_FIELD_BATTERY_PCT "BATTERY_PCT"
#define IN_EMERGENCY_CALL_FIELD_NAME "IS_EMERGENCY"
#define LOC_FEATURE_STATUS_FIELD_NAME "LOC_FEATURE_STATUS"
namespace loc_core
{
// stringify
void AirplaneModeDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(AirplaneModeDataItem, AIRPLANEMODE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = AIRPLANEMODE_FIELD_MODE;
valueStr += ": ";
valueStr += (d->mMode) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ENHDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ENHDataItem, ENH_DATA_ITEM_ID);
valueStr.clear ();
valueStr = ENH_FIELD_ENABLED;
if (!d->isEnabled()) {
Fields field = FIELD_MAX;
switch (mFieldUpdate) {
case FIELD_CONSENT:
valueStr += "_FIELD_CONSENT";
field = FIELD_CONSENT;
break;
case FIELD_REGION:
valueStr += "_FIELD_REGION";
field = FIELD_REGION;
break;
default:
break;
}
valueStr += ": ";
valueStr += (((1 << field) & d->mEnhFields) != 0) ? "true" : "false";
} else {
valueStr += ": ";
valueStr += "true";
}
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void GPSStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(GPSStateDataItem, GPSSTATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = GPSSTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void NLPStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(NLPStatusDataItem, NLPSTATUS_DATA_ITEM_ID);
valueStr.clear ();
valueStr = NLPSTATUS_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void WifiHardwareStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(WifiHardwareStateDataItem,
WIFIHARDWARESTATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = WIFIHARDWARESTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ScreenStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ScreenStateDataItem, SCREEN_STATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = SCREENSTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mState) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void PowerConnectStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(PowerConnectStateDataItem,
POWER_CONNECTED_STATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = POWERCONNECTSTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mState) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void BatteryLevelDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(BatteryLevelDataItem, BATTERY_LEVEL_DATA_ITEM_ID);
valueStr.clear ();
valueStr += BATTERYLEVEL_FIELD_BATTERY_PCT;
valueStr += ": ";
char state [12];
snprintf (state, 12, "%d", d->mBatteryPct);
valueStr += string (state);
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void TimeZoneChangeDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(TimeZoneChangeDataItem, TIMEZONE_CHANGE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = TIMEZONECHANGE_FIELD_ENABLED;
valueStr += ": ";
valueStr += "true";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void TimeChangeDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(TimeChangeDataItem, TIME_CHANGE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = TIMECHANGE_FIELD_ENABLED;
valueStr += ": ";
valueStr += "true";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ShutdownStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ShutdownStateDataItem, SHUTDOWN_STATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = SHUTDOWN_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mState) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void AssistedGpsDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(AssistedGpsDataItem, ASSISTED_GPS_DATA_ITEM_ID);
valueStr.clear ();
valueStr = ASSISTEDGPS_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void NetworkInfoDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(NetworkInfoDataItem, NETWORKINFO_DATA_ITEM_ID);
valueStr.clear ();
valueStr = NETWORKINFO_CARD;
valueStr += "::";
valueStr += NETWORKINFO_FIELD_TYPE;
valueStr += "s_MASK: ";
char type [12];
snprintf (type, 12, "%" PRIu64, mAllTypes);
valueStr += string (type);
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_TYPENAME;
valueStr += ": ";
valueStr += d->mTypeName;
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_SUBTYPENAME;
valueStr += ": ";
valueStr += d->mSubTypeName;
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_AVAILABLE;
valueStr += ": ";
valueStr += (d->mAvailable) ? ("true") : ("false");
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_CONNECTED;
valueStr += ": ";
valueStr += (d->mConnected) ? ("true") : ("false");
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_ROAMING;
valueStr += ": ";
valueStr += (d->mRoaming) ? ("true") : ("false");
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_0;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[0].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_1;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[1].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_2;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[2].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_3;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[3].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_4;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[4].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_5;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[5].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_6;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[6].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_7;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[7].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_8;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[8].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_9;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[9].toString();
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ServiceStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ServiceStatusDataItem, SERVICESTATUS_DATA_ITEM_ID);
valueStr.clear ();
valueStr += SERVICESTATUS_FIELD_STATE;
valueStr += ": ";
char state [12];
snprintf (state, 12, "%d", d->mServiceState);
valueStr += string (state);
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ModelDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ModelDataItem, MODEL_DATA_ITEM_ID);
valueStr.clear ();
valueStr += MODEL_FIELD_NAME;
valueStr += ": ";
valueStr += d->mModel;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ManufacturerDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ManufacturerDataItem, MANUFACTURER_DATA_ITEM_ID);
valueStr.clear ();
valueStr += MANUFACTURER_FIELD_NAME;
valueStr += ": ";
valueStr += d->mManufacturer;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void WifiSupplicantStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(WifiSupplicantStatusDataItem,
WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID);
valueStr += "Attach state: ";
char t[50];
memset (t, '\0', 50);
snprintf (t, 50, "%d", d->mState);
valueStr += t;
valueStr += ", Mac address valid: ";
valueStr += (d->mApMacAddressValid) ? ("true") : ("false");
valueStr += ", AP MAC address: ";
memset (t, '\0', 50);
snprintf(t, 50, "[%02x:%02x:%02x:%02x:%02x:%02x]", d->mApMacAddress[0], d->mApMacAddress[1],
d->mApMacAddress[2], d->mApMacAddress[3], d->mApMacAddress[4], d->mApMacAddress[5]);
valueStr += t;
valueStr += ", Wifi-Ap SSID Valid: ";
valueStr += (d->mWifiApSsidValid) ? ("true") : ("false");
valueStr += ", SSID: ";
valueStr += d->mWifiApSsid;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void TacDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(TacDataItem, TAC_DATA_ITEM_ID);
valueStr.clear ();
valueStr += TAC_FIELD_NAME;
valueStr += ": ";
valueStr += d->mValue;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void MccmncDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(MccmncDataItem, MCCMNC_DATA_ITEM_ID);
valueStr.clear ();
valueStr += MCCMNC_FIELD_NAME;
valueStr += ": ";
valueStr += d->mValue;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void BtLeDeviceScanDetailsDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(BtLeDeviceScanDetailsDataItem, BTLE_SCAN_DATA_ITEM_ID);
valueStr.clear ();
valueStr += BTLESCANDETAILS_FIELD_VALID;
valueStr += ": ";
valueStr += d->mValidSrnData;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_RSSI;
valueStr += ": ";
valueStr += d->mApSrnRssi;
valueStr += ", ";
char t[20];
memset (t, '\0', 20);
valueStr += BTLESCANDETAILS_FIELD_MAC;
valueStr += ": ";
snprintf(t, 20, "[%02x:%02x:%02x:%02x:%02x:%02x]", d->mApSrnMacAddress[0],
d->mApSrnMacAddress[1], d->mApSrnMacAddress[2], d->mApSrnMacAddress[3],
d->mApSrnMacAddress[4], d->mApSrnMacAddress[5]);
valueStr += t;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANREQ;
valueStr += ": ";
valueStr += d->mApSrnTimestamp;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANSTART;
valueStr += ": ";
valueStr += d->mRequestTimestamp;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANRECV;
valueStr += ": ";
valueStr += d->mReceiveTimestamp;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANERROR;
valueStr += ": ";
valueStr += d->mErrorCause;
valueStr += ", ";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void BtDeviceScanDetailsDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(BtDeviceScanDetailsDataItem, BT_SCAN_DATA_ITEM_ID);
valueStr.clear ();
valueStr += BTSCANDETAILS_FIELD_VALID;
valueStr += ": ";
valueStr += d->mValidSrnData;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_RSSI;
valueStr += ": ";
valueStr += d->mApSrnRssi;
valueStr += ", ";
char t[20];
memset (t, '\0', 20);
valueStr += BTSCANDETAILS_FIELD_MAC;
valueStr += ": ";
snprintf(t, 20, "[%02x:%02x:%02x:%02x:%02x:%02x]", d->mApSrnMacAddress[0],
d->mApSrnMacAddress[1], d->mApSrnMacAddress[2], d->mApSrnMacAddress[3],
d->mApSrnMacAddress[4], d->mApSrnMacAddress[5]);
valueStr += t;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANREQ;
valueStr += ": ";
valueStr += d->mApSrnTimestamp;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANSTART;
valueStr += ": ";
valueStr += d->mRequestTimestamp;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANRECV;
valueStr += ": ";
valueStr += d->mReceiveTimestamp;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANERROR;
valueStr += ": ";
valueStr += d->mErrorCause;
valueStr += ", ";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
// copy
int32_t AirplaneModeDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(AirplaneModeDataItem, AIRPLANEMODE_DATA_ITEM_ID);
if (s->mMode == d->mMode) { result = 0; break; }
s->mMode = d->mMode;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
void InEmergencyCallDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(
InEmergencyCallDataItem, IN_EMERGENCY_CALL_DATA_ITEM_ID);
valueStr.clear ();
valueStr += IN_EMERGENCY_CALL_FIELD_NAME;
valueStr += ": ";
valueStr += (d->mIsEmergency) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
int32_t ENHDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ENHDataItem, ENH_DATA_ITEM_ID);
if (s->mEnhFields == d->mEnhFields) { result = true; break; }
switch (d->mAction) {
case SET:
s->mEnhFields |= (1 << d->mFieldUpdate);
break;
case CLEAR:
s->mEnhFields &= ~(1 << d->mFieldUpdate);
break;
default:
break;
}
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t GPSStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(GPSStateDataItem, GPSSTATE_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t NLPStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(NLPStatusDataItem, NLPSTATUS_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t WifiHardwareStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(WifiHardwareStateDataItem, WIFIHARDWARESTATE_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ScreenStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ScreenStateDataItem, SCREEN_STATE_DATA_ITEM_ID);
if (s->mState == d->mState) { result = 0; break; }
s->mState = d->mState;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t PowerConnectStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(PowerConnectStateDataItem,
POWER_CONNECTED_STATE_DATA_ITEM_ID);
if (s->mState == d->mState) { result = 0; break; }
s->mState = d->mState;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t BatteryLevelDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(BatteryLevelDataItem, BATTERY_LEVEL_DATA_ITEM_ID);
if (s->mBatteryPct == d->mBatteryPct) { result = 0; break; }
s->mBatteryPct = d->mBatteryPct;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t TimeZoneChangeDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(TimeZoneChangeDataItem, TIMEZONE_CHANGE_DATA_ITEM_ID);
if (s->mCurrTimeMillis == d->mCurrTimeMillis &&
s->mRawOffsetTZ == d->mRawOffsetTZ &&
s->mDstOffsetTZ == d->mDstOffsetTZ) {
result = 0;
break;
}
s->mCurrTimeMillis = d->mCurrTimeMillis;
s->mRawOffsetTZ = d->mRawOffsetTZ;
s->mDstOffsetTZ = d->mDstOffsetTZ;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t TimeChangeDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(TimeChangeDataItem, TIME_CHANGE_DATA_ITEM_ID);
if (s->mCurrTimeMillis == d->mCurrTimeMillis &&
s->mRawOffsetTZ == d->mRawOffsetTZ &&
s->mDstOffsetTZ == d->mDstOffsetTZ) {
result = 0;
break;
}
s->mCurrTimeMillis = d->mCurrTimeMillis;
s->mRawOffsetTZ = d->mRawOffsetTZ;
s->mDstOffsetTZ = d->mDstOffsetTZ;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ShutdownStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ShutdownStateDataItem, SHUTDOWN_STATE_DATA_ITEM_ID);
if (s->mState == d->mState) { result = 0; break; }
s->mState = d->mState;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t AssistedGpsDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(AssistedGpsDataItem, ASSISTED_GPS_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t NetworkInfoDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(NetworkInfoDataItem, NETWORKINFO_DATA_ITEM_ID);
NetworkType type = ((NetworkInfoDataItem*)d)->getType();
if ( (s->mAllTypes == d->mAllTypes) &&
(s->getType() == type) && (0 == s->mTypeName.compare(d->mTypeName)) &&
(0 == s->mSubTypeName.compare(d->mSubTypeName)) &&
(s->mAvailable == d->mAvailable) &&
(s->mConnected == d->mConnected) &&
(s->mRoaming == d->mRoaming) &&
(memcmp(s->mAllNetworkHandles, d->mAllNetworkHandles,
sizeof(s->mAllNetworkHandles)) == 0) &&
(s->mNetworkHandle == d->mNetworkHandle) ) {
result = 0;
break;
}
s->mAllTypes = (d->mAllTypes == 0) ? typeToAllTypes(type) : d->mAllTypes;
if (s->getType() != type) { s->setType(type);}
if (0 != s->mTypeName.compare(d->mTypeName)) { s->mTypeName = d->mTypeName;}
if (0 != s->mSubTypeName.compare(d->mSubTypeName)) {s->mSubTypeName = d->mSubTypeName;}
if (s->mAvailable != d->mAvailable) {s->mAvailable = d->mAvailable;}
if (s->mConnected != d->mConnected) {s->mConnected = d->mConnected;}
if (s->mRoaming != d->mRoaming) {s->mRoaming = d->mRoaming;}
if (memcmp(s->mAllNetworkHandles, d->mAllNetworkHandles,
sizeof(s->mAllNetworkHandles)) != 0) {
memcpy(static_cast<void*>(s->mAllNetworkHandles),
static_cast<void *>(d->mAllNetworkHandles), sizeof(s->mAllNetworkHandles));
}
if (s->mNetworkHandle != d->mNetworkHandle) {s->mNetworkHandle = d->mNetworkHandle;}
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ServiceStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ServiceStatusDataItem, SERVICESTATUS_DATA_ITEM_ID);
if (s->mServiceState == d->mServiceState) { result = 0; break; }
s->mServiceState = d->mServiceState;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t ModelDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ModelDataItem, MODEL_DATA_ITEM_ID);
if (0 == s->mModel.compare(d->mModel)) { result = 0; break; }
s->mModel = d->mModel;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ManufacturerDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ManufacturerDataItem, MANUFACTURER_DATA_ITEM_ID);
if (0 == s->mManufacturer.compare(d->mManufacturer)) { result = 0; break; }
s->mManufacturer = d->mManufacturer;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t WifiSupplicantStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(WifiSupplicantStatusDataItem,
WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID);
if ( (s->mState == d->mState) &&
(s->mApMacAddressValid == d->mApMacAddressValid) &&
(s->mWifiApSsidValid == d->mWifiApSsidValid)) {
// compare mac address
if (memcmp(s->mApMacAddress, d->mApMacAddress, sizeof(s->mApMacAddress)) == 0) {
// compare ssid
if (s->mWifiApSsid.compare(d->mWifiApSsid) == 0) {
result = 0;
break;
}
}
}
if (s->mState != d->mState) { s->mState = d->mState;}
if (s->mApMacAddressValid != d->mApMacAddressValid) {
s->mApMacAddressValid = d->mApMacAddressValid;
}
if (s->mWifiApSsidValid != d->mWifiApSsidValid) {s->mWifiApSsidValid = d->mWifiApSsidValid;}
if (memcmp(s->mApMacAddress, d->mApMacAddress, sizeof(s->mApMacAddress)) != 0) {
memcpy(static_cast<void*>(s->mApMacAddress), static_cast<void *>(d->mApMacAddress),
sizeof(s->mApMacAddress));
}
if (s->mWifiApSsid.compare(d->mWifiApSsid) != 0) {
s->mWifiApSsid = d->mWifiApSsid;
}
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t TacDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(TacDataItem, TAC_DATA_ITEM_ID);
if (0 == s->mValue.compare(d->mValue)) { result = 0; break; }
s->mValue = d->mValue;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t MccmncDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(MccmncDataItem, MCCMNC_DATA_ITEM_ID);
if (0 == s->mValue.compare(d->mValue)) { result = 0; break; }
s->mValue= d->mValue;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t BtLeDeviceScanDetailsDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(BtLeDeviceScanDetailsDataItem, BTLE_SCAN_DATA_ITEM_ID);
if (s->mValidSrnData != d->mValidSrnData) { s->mValidSrnData = d->mValidSrnData;}
if (s->mApSrnRssi != d->mApSrnRssi) { s->mApSrnRssi = d->mApSrnRssi;}
if (memcmp(s->mApSrnMacAddress, d->mApSrnMacAddress, sizeof(s->mApSrnMacAddress)) != 0) {
memcpy(static_cast<void*>(s->mApSrnMacAddress), static_cast<void*>(d->mApSrnMacAddress),
sizeof(s->mApSrnMacAddress));
}
if (s->mApSrnTimestamp != d->mApSrnTimestamp) {s->mApSrnTimestamp = d->mApSrnTimestamp;}
if (s->mRequestTimestamp != d->mRequestTimestamp) {
s->mRequestTimestamp = d->mRequestTimestamp;
}
if (s->mReceiveTimestamp != d->mReceiveTimestamp) {
s->mReceiveTimestamp = d->mReceiveTimestamp;
}
if (s->mErrorCause != d->mErrorCause) {s->mErrorCause = d->mErrorCause;}
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t BtDeviceScanDetailsDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(BtDeviceScanDetailsDataItem, BT_SCAN_DATA_ITEM_ID);
if (s->mValidSrnData != d->mValidSrnData) { s->mValidSrnData = d->mValidSrnData;}
if (s->mApSrnRssi != d->mApSrnRssi) { s->mApSrnRssi = d->mApSrnRssi;}
if (memcmp(s->mApSrnMacAddress, d->mApSrnMacAddress, sizeof(s->mApSrnMacAddress)) != 0) {
memcpy(static_cast<void*>(s->mApSrnMacAddress), static_cast<void*>(d->mApSrnMacAddress),
sizeof(s->mApSrnMacAddress));
}
if (s->mApSrnTimestamp != d->mApSrnTimestamp) {s->mApSrnTimestamp = d->mApSrnTimestamp;}
if (s->mRequestTimestamp != d->mRequestTimestamp) {
s->mRequestTimestamp = d->mRequestTimestamp;
}
if (s->mReceiveTimestamp != d->mReceiveTimestamp) {
s->mReceiveTimestamp = d->mReceiveTimestamp;
}
if (s->mErrorCause != d->mErrorCause) {s->mErrorCause = d->mErrorCause;}
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
void LocFeatureStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(
LocFeatureStatusDataItem, LOC_FEATURE_STATUS_DATA_ITEM_ID);
valueStr.clear ();
valueStr += LOC_FEATURE_STATUS_FIELD_NAME;
valueStr += ": {";
for (int item : d->mFids) {
valueStr += std::to_string(item) + ", ";
}
valueStr += "}";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
int32_t LocFeatureStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(
LocFeatureStatusDataItem, LOC_FEATURE_STATUS_DATA_ITEM_ID);
s->mFids = d->mFids;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t InEmergencyCallDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(
InEmergencyCallDataItem, IN_EMERGENCY_CALL_DATA_ITEM_ID);
s->mIsEmergency = d->mIsEmergency;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
} //namespace loc_core

View File

@@ -1,656 +0,0 @@
/* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation, nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#ifndef DATAITEM_CONCRETETYPES_H
#define DATAITEM_CONCRETETYPES_H
#include <string>
#include <cstring>
#include <sstream>
#include <DataItemId.h>
#include <IDataItemCore.h>
#include <gps_extended_c.h>
#include <inttypes.h>
#include <unordered_set>
#define MAC_ADDRESS_LENGTH 6
// MAC address length in bytes
// QMI_LOC_SRN_MAC_ADDR_LENGTH_V02
#define SRN_MAC_ADDRESS_LENGTH 6
#define WIFI_SUPPLICANT_DEFAULT_STATE 0
#define TIME_DEFAULT_CURRTIME 0
#define TIMEZONE_DEFAULT_RAWOFFSET 0
#define TIMEZONE_DEFAULT_DSTOFFSET 0
#define NETWORKINFO_DEFAULT_TYPE 300
#define SERVICESTATUS_DEFAULT_STATE 3 /// OOO
#define BATTERY_PCT_DEFAULT 50
#define STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(T, ID) \
if (getId() != ID) { result = 1; break; } \
T * d = static_cast<T *>(this);
// macro for copier
#define COPIER_ERROR_CHECK_AND_DOWN_CAST(T, ID) \
if (src == NULL) { result = 1; break; } \
if (getId() != src->getId()) { result = 2; break; } \
if (getId() != ID) { result = 3; break; } \
T * s = static_cast<T *>(this); \
T * d = static_cast<T *>(src);
static constexpr char sDelimit = ':';
namespace loc_core {
using namespace std;
enum NetworkType {
TYPE_MOBILE = 0,
TYPE_WIFI,
TYPE_ETHERNET,
TYPE_BLUETOOTH,
TYPE_MMS,
TYPE_SUPL,
TYPE_DUN,
TYPE_HIPRI,
TYPE_WIMAX,
TYPE_PROXY,
TYPE_UNKNOWN,
};
typedef struct NetworkInfoType {
// Unique network handle ID
uint64_t networkHandle;
// Type of network for corresponding network handle
NetworkType networkType;
NetworkInfoType() : networkHandle(NETWORK_HANDLE_UNKNOWN), networkType(TYPE_UNKNOWN) {}
NetworkInfoType(string strObj) {
size_t posDelimit = strObj.find(sDelimit);
if ( posDelimit != string::npos) {
int32_t type = TYPE_UNKNOWN;
string handleStr = strObj.substr(0, posDelimit);
string typeStr = strObj.substr(posDelimit + 1, strObj.length() - posDelimit - 1);
stringstream(handleStr) >> networkHandle;
stringstream(typeStr) >> type;
networkType = (NetworkType) type;
} else {
networkHandle = NETWORK_HANDLE_UNKNOWN;
networkType = TYPE_UNKNOWN;
}
}
bool operator== (const NetworkInfoType& other) {
return ((networkHandle == other.networkHandle) && (networkType == other.networkType));
}
string toString() {
string valueStr;
valueStr.clear ();
char nethandle [32];
memset (nethandle, 0, 32);
snprintf(nethandle, sizeof(nethandle), "%" PRIu64, networkHandle);
valueStr += string(nethandle);
valueStr += sDelimit;
char type [12];
memset (type, 0, 12);
snprintf (type, 12, "%u", networkType);
valueStr += string (type);
return valueStr;
}
} NetworkInfoType;
class AirplaneModeDataItem: public IDataItemCore {
public:
AirplaneModeDataItem(IDataItemCore* di):
AirplaneModeDataItem(((AirplaneModeDataItem*)di)->mMode) {}
AirplaneModeDataItem(bool mode = false):
mMode(mode) {mId = AIRPLANEMODE_DATA_ITEM_ID;}
virtual ~AirplaneModeDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mMode;
};
class ENHDataItem: public IDataItemCore {
public:
enum Fields { FIELD_CONSENT, FIELD_REGION, FIELD_MAX };
enum Actions { NO_OP, SET, CLEAR };
ENHDataItem(bool enabled = false, Fields updateBit = FIELD_MAX) :
mEnhFields(0), mFieldUpdate(updateBit) {
mId = ENH_DATA_ITEM_ID;
setAction(enabled ? SET : CLEAR);
}
virtual ~ENHDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
inline bool isEnabled() const {
uint8_t combinedBits = (1 << FIELD_MAX) - 1;
return (combinedBits == (mEnhFields & combinedBits));
}
void setAction(Actions action = NO_OP) {
mAction = action;
if (NO_OP != mAction) {
updateFields();
}
}
void updateFields() {
if (FIELD_MAX > mFieldUpdate) {
switch (mAction) {
case SET:
mEnhFields |= (1 << mFieldUpdate);
break;
case CLEAR:
mEnhFields &= ~(1 << mFieldUpdate);
break;
case NO_OP:
default:
break;
}
}
}
// Data members
uint32_t mEnhFields;
private:
Actions mAction;
Fields mFieldUpdate;
};
class GPSStateDataItem: public IDataItemCore {
public:
GPSStateDataItem(bool enabled = false) :
mEnabled(enabled) {mId = GPSSTATE_DATA_ITEM_ID;}
virtual ~GPSStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class NLPStatusDataItem: public IDataItemCore {
public:
NLPStatusDataItem(bool enabled = false) :
mEnabled(enabled) {mId = NLPSTATUS_DATA_ITEM_ID;}
virtual ~NLPStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class WifiHardwareStateDataItem: public IDataItemCore {
public:
WifiHardwareStateDataItem(bool enabled = false) :
mEnabled(enabled) {mId = WIFIHARDWARESTATE_DATA_ITEM_ID;}
virtual ~WifiHardwareStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class ScreenStateDataItem: public IDataItemCore {
public:
ScreenStateDataItem(bool state = false) :
mState(state) {mId = SCREEN_STATE_DATA_ITEM_ID;}
virtual ~ScreenStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mState;
};
class PowerConnectStateDataItem: public IDataItemCore {
public:
PowerConnectStateDataItem(bool state = false) :
mState(state) {mId = POWER_CONNECTED_STATE_DATA_ITEM_ID;}
virtual ~PowerConnectStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mState;
};
class TimeZoneChangeDataItem: public IDataItemCore {
public:
TimeZoneChangeDataItem(int64_t currTimeMillis = TIME_DEFAULT_CURRTIME,
int32_t rawOffset = TIMEZONE_DEFAULT_RAWOFFSET,
int32_t dstOffset = TIMEZONE_DEFAULT_DSTOFFSET) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset) {mId = TIMEZONE_CHANGE_DATA_ITEM_ID;}
virtual ~TimeZoneChangeDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
};
class TimeChangeDataItem: public IDataItemCore {
public:
TimeChangeDataItem(int64_t currTimeMillis = TIME_DEFAULT_CURRTIME,
int32_t rawOffset = TIMEZONE_DEFAULT_RAWOFFSET,
int32_t dstOffset = TIMEZONE_DEFAULT_DSTOFFSET) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset) {mId = TIME_CHANGE_DATA_ITEM_ID;}
virtual ~TimeChangeDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
};
class ShutdownStateDataItem: public IDataItemCore {
public:
ShutdownStateDataItem(bool state = false) :
mState (state) {mId = SHUTDOWN_STATE_DATA_ITEM_ID;}
virtual ~ShutdownStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mState;
};
class AssistedGpsDataItem: public IDataItemCore {
public:
AssistedGpsDataItem(bool enabled = false) :
mEnabled(enabled) {mId = ASSISTED_GPS_DATA_ITEM_ID;}
virtual ~AssistedGpsDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class NetworkInfoDataItem: public IDataItemCore {
public:
NetworkInfoDataItem(
int32_t type = NETWORKINFO_DEFAULT_TYPE,
std::string typeName = "",
std::string subTypeName = "",
bool available = false,
bool connected = false,
bool roaming = false,
uint64_t networkHandle = NETWORK_HANDLE_UNKNOWN, string apn __unused = ""):
NetworkInfoDataItem(getNormalizedType(type), type, typeName, subTypeName, available,
connected, roaming, networkHandle, "") {}
NetworkInfoDataItem(NetworkType initialType, int32_t type, string typeName,
string subTypeName, bool available, bool connected, bool roaming,
uint64_t networkHandle, string apn):
mAllTypes(typeToAllTypes(initialType)),
mType(type),
mTypeName(typeName),
mSubTypeName(subTypeName),
mAvailable(available),
mConnected(connected),
mRoaming(roaming),
mNetworkHandle(networkHandle), mApn(apn) {
mId = NETWORKINFO_DATA_ITEM_ID;
mAllNetworkHandles[0].networkHandle = networkHandle;
mAllNetworkHandles[0].networkType = initialType;
}
virtual ~NetworkInfoDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
inline uint64_t getAllTypes() { return mAllTypes; }
inline NetworkInfoType* getNetworkHandle() {
return &mAllNetworkHandles[0];
}
inline virtual NetworkType getType(void) const {
return getNormalizedType(mType);
}
inline static NetworkType getNormalizedType(int32_t type) {
NetworkType typeout = TYPE_UNKNOWN;
switch (type) {
case 100:
typeout = TYPE_WIFI;
break;
case 101:
typeout = TYPE_ETHERNET;
break;
case 102:
typeout = TYPE_BLUETOOTH;
break;
case 201:
typeout = TYPE_MOBILE;
break;
case 202:
typeout = TYPE_DUN;
break;
case 203:
typeout = TYPE_HIPRI;
break;
case 204:
typeout = TYPE_MMS;
break;
case 205:
typeout = TYPE_SUPL;
break;
case 220:
typeout = TYPE_WIMAX;
break;
case 300:
default:
typeout = TYPE_UNKNOWN;
break;
}
return typeout;
}
// Data members
uint64_t mAllTypes;
int32_t mType;
string mTypeName;
string mSubTypeName;
bool mAvailable;
bool mConnected;
bool mRoaming;
NetworkInfoType mAllNetworkHandles[MAX_NETWORK_HANDLES];
uint64_t mNetworkHandle;
string mApn;
protected:
inline uint64_t typeToAllTypes(NetworkType type) {
return (type >= TYPE_UNKNOWN || type < TYPE_MOBILE) ? 0 : (1<<type);
}
private:
inline void setType(NetworkType type) {
switch (type) {
case TYPE_WIFI:
mType = 100;
break;
case TYPE_ETHERNET:
mType = 101;
break;
case TYPE_BLUETOOTH:
mType = 102;
break;
case TYPE_MOBILE:
mType = 201;
break;
case TYPE_DUN:
mType = 202;
break;
case TYPE_HIPRI:
mType = 203;
break;
case TYPE_MMS:
mType = 204;
break;
case TYPE_SUPL:
mType = 205;
break;
case TYPE_WIMAX:
mType = 220;
break;
default:
mType = 300;
break;
}
}
};
class ServiceStatusDataItem: public IDataItemCore {
public:
ServiceStatusDataItem(int32_t serviceState = SERVICESTATUS_DEFAULT_STATE) :
mServiceState (serviceState) {mId = SERVICESTATUS_DATA_ITEM_ID;}
virtual ~ServiceStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
int32_t mServiceState;
};
class ModelDataItem: public IDataItemCore {
public:
ModelDataItem(const string & name = "") :
mModel (name) {mId = MODEL_DATA_ITEM_ID;}
virtual ~ModelDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mModel;
};
class ManufacturerDataItem: public IDataItemCore {
public:
ManufacturerDataItem(const string & name = "") :
mManufacturer (name) {mId = MANUFACTURER_DATA_ITEM_ID;}
virtual ~ManufacturerDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mManufacturer;
};
class RilServiceInfoDataItem : public IDataItemCore {
public:
inline RilServiceInfoDataItem() :
mData(nullptr) {mId = RILSERVICEINFO_DATA_ITEM_ID;}
inline virtual ~RilServiceInfoDataItem() { if (nullptr != mData) free(mData); }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copyFrom(IDataItemCore* src) {
memcpy(mData, ((RilServiceInfoDataItem*)src)->mData, mLength);
return 0;
}
inline RilServiceInfoDataItem(const RilServiceInfoDataItem& peer) :
RilServiceInfoDataItem() {
mLength = peer.mLength;
mData = malloc(mLength);
memcpy(mData, peer.mData, mLength);
peer.setPeerData(*this);
}
inline virtual bool operator==(const RilServiceInfoDataItem& other) const {
return other.mData == mData;
}
inline virtual void setPeerData(RilServiceInfoDataItem& /*peer*/) const {}
void* mData;
int mLength;
};
class RilCellInfoDataItem : public IDataItemCore {
public:
inline RilCellInfoDataItem() :
mData(nullptr) {mId = RILCELLINFO_DATA_ITEM_ID;}
inline virtual ~RilCellInfoDataItem() { if (nullptr != mData) free(mData); }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copyFrom(IDataItemCore* src) {
memcpy(mData, ((RilCellInfoDataItem*)src)->mData, mLength);
return 0;
}
inline RilCellInfoDataItem(const RilCellInfoDataItem& peer) :
RilCellInfoDataItem() {
mLength = peer.mLength;
mData = malloc(mLength);
memcpy(mData, peer.mData, mLength);
peer.setPeerData(*this);
}
inline virtual bool operator==(const RilCellInfoDataItem& other) const {
return other.mData == mData;
}
inline virtual void setPeerData(RilCellInfoDataItem& /*peer*/) const {}
void* mData;
int mLength;
};
class WifiSupplicantStatusDataItem: public IDataItemCore {
public:
WifiSupplicantStatusDataItem() :
mState((WifiSupplicantState)WIFI_SUPPLICANT_DEFAULT_STATE),
mApMacAddressValid(false),
mWifiApSsidValid(false) {
mId = WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID;
memset (mApMacAddress, 0, sizeof (mApMacAddress));
mWifiApSsid.clear();
}
virtual ~WifiSupplicantStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
typedef enum WifiSupplicantState {
DISCONNECTED,
INTERFACE_DISABLED,
INACTIVE,
SCANNING,
AUTHENTICATING,
ASSOCIATING,
ASSOCIATED,
FOUR_WAY_HANDSHAKE,
GROUP_HANDSHAKE,
COMPLETED,
DORMANT,
UNINITIALIZED,
INVALID
} WifiSupplicantState;
/* Represents whether access point attach state*/
WifiSupplicantState mState;
/* Represents info on whether ap mac address is valid */
bool mApMacAddressValid;
/* Represents mac address of the wifi access point*/
uint8_t mApMacAddress[MAC_ADDRESS_LENGTH];
/* Represents info on whether ap SSID is valid */
bool mWifiApSsidValid;
/* Represents Wifi SSID string*/
string mWifiApSsid;
};
class TacDataItem: public IDataItemCore {
public:
TacDataItem(const string & name = "") :
mValue (name) {mId = TAC_DATA_ITEM_ID;}
virtual ~TacDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mValue;
};
class MccmncDataItem: public IDataItemCore {
public:
MccmncDataItem(const string & name = "") :
mValue(name) {mId = MCCMNC_DATA_ITEM_ID;}
virtual ~MccmncDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mValue;
};
class SrnDeviceScanDetailsDataItem: public IDataItemCore {
public:
SrnDeviceScanDetailsDataItem(DataItemId Id) :
mValidSrnData(false),
mApSrnRssi(-1),
mApSrnTimestamp(0),
mRequestTimestamp(0),
mReceiveTimestamp(0),
mErrorCause(-1) {mId = Id;}
virtual ~SrnDeviceScanDetailsDataItem() {}
// Data members common to all SRN tech types
/* Represents info on whether SRN data is valid (no error)*/
bool mValidSrnData;
/* SRN device RSSI reported */
int32_t mApSrnRssi;
/* MAC adress of SRN device */
uint8_t mApSrnMacAddress[SRN_MAC_ADDRESS_LENGTH];
/* UTC timestamp at which the scan was requested.for this SRN device*/
int64_t mApSrnTimestamp;
/* UTC timestamp at which the scan was started. */
int64_t mRequestTimestamp;
/* UTC timestamp at which the scan was received.*/
int64_t mReceiveTimestamp;
/* Reason for the error/failure if SRN details are not valid */
int32_t mErrorCause;
};
class BtDeviceScanDetailsDataItem: public SrnDeviceScanDetailsDataItem {
public:
BtDeviceScanDetailsDataItem() :
SrnDeviceScanDetailsDataItem(BT_SCAN_DATA_ITEM_ID) {}
virtual ~BtDeviceScanDetailsDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
};
class BtLeDeviceScanDetailsDataItem: public SrnDeviceScanDetailsDataItem {
public:
BtLeDeviceScanDetailsDataItem() :
SrnDeviceScanDetailsDataItem(BTLE_SCAN_DATA_ITEM_ID) {}
virtual ~BtLeDeviceScanDetailsDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
};
class BatteryLevelDataItem: public IDataItemCore {
public:
inline BatteryLevelDataItem(uint8_t batteryPct = BATTERY_PCT_DEFAULT) :
mBatteryPct(batteryPct) {mId = BATTERY_LEVEL_DATA_ITEM_ID;}
inline ~BatteryLevelDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
uint8_t mBatteryPct;
};
class LocFeatureStatusDataItem: public IDataItemCore {
public:
LocFeatureStatusDataItem(std::unordered_set<int> fids) :
mFids(fids) {mId = LOC_FEATURE_STATUS_DATA_ITEM_ID;}
virtual ~LocFeatureStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
std::unordered_set<int> mFids;
};
class InEmergencyCallDataItem: public IDataItemCore {
public:
InEmergencyCallDataItem(bool isEmergency = false) :
mIsEmergency(isEmergency) {mId = IN_EMERGENCY_CALL_DATA_ITEM_ID;}
virtual ~InEmergencyCallDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mIsEmergency;
};
} // namespace loc_core
#endif //DATAITEM_CONCRETETYPES_H

View File

@@ -0,0 +1,555 @@
/* Copyright (c) 2015-2017, 2020, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation, nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef __DATAITEMCONCRETEBASETYPES__
#define __DATAITEMCONCRETEBASETYPES__
#include <string>
#include <cstring>
#include <sstream>
#include <DataItemId.h>
#include <IDataItemCore.h>
#include <gps_extended_c.h>
#include <inttypes.h>
#define MAC_ADDRESS_LENGTH 6
// MAC address length in bytes
// QMI_LOC_SRN_MAC_ADDR_LENGTH_V02
#define SRN_MAC_ADDRESS_LENGTH 6
#define WIFI_SUPPLICANT_DEFAULT_STATE 0
static constexpr char sDelimit = ':';
namespace loc_core
{
using namespace std;
enum NetworkType {
TYPE_MOBILE = 0,
TYPE_WIFI,
TYPE_ETHERNET,
TYPE_BLUETOOTH,
TYPE_MMS,
TYPE_SUPL,
TYPE_DUN,
TYPE_HIPRI,
TYPE_WIMAX,
TYPE_PROXY,
TYPE_UNKNOWN,
};
typedef struct NetworkInfoType
{
// Unique network handle ID
uint64_t networkHandle;
// Type of network for corresponding network handle
NetworkType networkType;
NetworkInfoType() : networkHandle(NETWORK_HANDLE_UNKNOWN), networkType(TYPE_UNKNOWN) {}
NetworkInfoType(string strObj) {
size_t posDelimit = strObj.find(sDelimit);
if ( posDelimit != string::npos) {
int32_t type = TYPE_UNKNOWN;
string handleStr = strObj.substr(0, posDelimit);
string typeStr = strObj.substr(posDelimit + 1, strObj.length() - posDelimit - 1);
stringstream(handleStr) >> networkHandle;
stringstream(typeStr) >> type;
networkType = (NetworkType) type;
} else {
networkHandle = NETWORK_HANDLE_UNKNOWN;
networkType = TYPE_UNKNOWN;
}
}
bool operator== (const NetworkInfoType& other) {
return ((networkHandle == other.networkHandle) && (networkType == other.networkType));
}
string toString() {
string valueStr;
valueStr.clear ();
char nethandle [32];
memset (nethandle, 0, 32);
snprintf(nethandle, sizeof(nethandle), "%" PRIu64, networkHandle);
valueStr += string(nethandle);
valueStr += sDelimit;
char type [12];
memset (type, 0, 12);
snprintf (type, 12, "%u", networkType);
valueStr += string (type);
return valueStr;
}
} NetworkInfoType;
class AirplaneModeDataItemBase : public IDataItemCore {
public:
AirplaneModeDataItemBase(bool mode):
mMode(mode),
mId(AIRPLANEMODE_DATA_ITEM_ID) {}
virtual ~AirplaneModeDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mMode;
protected:
DataItemId mId;
};
class ENHDataItemBase : public IDataItemCore {
public:
ENHDataItemBase(bool enabled) :
mEnabled(enabled),
mId(ENH_DATA_ITEM_ID) {}
virtual ~ENHDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class GPSStateDataItemBase : public IDataItemCore {
public:
GPSStateDataItemBase(bool enabled) :
mEnabled(enabled),
mId(GPSSTATE_DATA_ITEM_ID) {}
virtual ~GPSStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class NLPStatusDataItemBase : public IDataItemCore {
public:
NLPStatusDataItemBase(bool enabled) :
mEnabled(enabled),
mId(NLPSTATUS_DATA_ITEM_ID) {}
virtual ~NLPStatusDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class WifiHardwareStateDataItemBase : public IDataItemCore {
public:
WifiHardwareStateDataItemBase(bool enabled) :
mEnabled(enabled),
mId(WIFIHARDWARESTATE_DATA_ITEM_ID) {}
virtual ~WifiHardwareStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class ScreenStateDataItemBase : public IDataItemCore {
public:
ScreenStateDataItemBase(bool state) :
mState(state),
mId(SCREEN_STATE_DATA_ITEM_ID) {}
virtual ~ScreenStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mState;
protected:
DataItemId mId;
};
class PowerConnectStateDataItemBase : public IDataItemCore {
public:
PowerConnectStateDataItemBase(bool state) :
mState(state),
mId(POWER_CONNECTED_STATE_DATA_ITEM_ID) {}
virtual ~PowerConnectStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mState;
protected:
DataItemId mId;
};
class TimeZoneChangeDataItemBase : public IDataItemCore {
public:
TimeZoneChangeDataItemBase(int64_t currTimeMillis, int32_t rawOffset, int32_t dstOffset) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset),
mId(TIMEZONE_CHANGE_DATA_ITEM_ID) {}
virtual ~TimeZoneChangeDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
protected:
DataItemId mId;
};
class TimeChangeDataItemBase : public IDataItemCore {
public:
TimeChangeDataItemBase(int64_t currTimeMillis, int32_t rawOffset, int32_t dstOffset) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset),
mId(TIME_CHANGE_DATA_ITEM_ID) {}
virtual ~TimeChangeDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
protected:
DataItemId mId;
};
class ShutdownStateDataItemBase : public IDataItemCore {
public:
ShutdownStateDataItemBase(bool state) :
mState (state),
mId(SHUTDOWN_STATE_DATA_ITEM_ID) {}
virtual ~ShutdownStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mState;
protected:
DataItemId mId;
};
class AssistedGpsDataItemBase : public IDataItemCore {
public:
AssistedGpsDataItemBase(bool enabled) :
mEnabled(enabled),
mId(ASSISTED_GPS_DATA_ITEM_ID) {}
virtual ~AssistedGpsDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class NetworkInfoDataItemBase : public IDataItemCore {
public:
NetworkInfoDataItemBase(
NetworkType initialType, int32_t type, string typeName, string subTypeName,
bool available, bool connected, bool roaming, uint64_t networkHandle, string apn):
mAllTypes(typeToAllTypes(initialType)),
mType(type),
mTypeName(typeName),
mSubTypeName(subTypeName),
mAvailable(available),
mConnected(connected),
mRoaming(roaming),
mNetworkHandle(networkHandle),
mApn(apn), mId(NETWORKINFO_DATA_ITEM_ID) {
mAllNetworkHandles[0].networkHandle = networkHandle;
mAllNetworkHandles[0].networkType = initialType;
}
virtual ~NetworkInfoDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
inline virtual NetworkType getType(void) const {
return (NetworkType)mType;
}
inline uint64_t getAllTypes() { return mAllTypes; }
inline NetworkInfoType* getNetworkHandle() {
return &mAllNetworkHandles[0];
}
// Data members
uint64_t mAllTypes;
int32_t mType;
string mTypeName;
string mSubTypeName;
bool mAvailable;
bool mConnected;
bool mRoaming;
NetworkInfoType mAllNetworkHandles[MAX_NETWORK_HANDLES];
uint64_t mNetworkHandle;
string mApn;
protected:
DataItemId mId;
inline uint64_t typeToAllTypes(NetworkType type) {
return (type >= TYPE_UNKNOWN || type < TYPE_MOBILE) ? 0 : (1<<type);
}
};
class ServiceStatusDataItemBase : public IDataItemCore {
public:
ServiceStatusDataItemBase(int32_t serviceState) :
mServiceState (serviceState),
mId(SERVICESTATUS_DATA_ITEM_ID) {}
virtual ~ServiceStatusDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
int32_t mServiceState;
protected:
DataItemId mId;
};
class ModelDataItemBase : public IDataItemCore {
public:
ModelDataItemBase(const string & name) :
mModel (name),
mId(MODEL_DATA_ITEM_ID) {}
virtual ~ModelDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mModel;
protected:
DataItemId mId;
};
class ManufacturerDataItemBase : public IDataItemCore {
public:
ManufacturerDataItemBase(const string & name) :
mManufacturer (name),
mId(MANUFACTURER_DATA_ITEM_ID) {}
virtual ~ManufacturerDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mManufacturer;
protected:
DataItemId mId;
};
class RilServiceInfoDataItemBase : public IDataItemCore {
public:
inline RilServiceInfoDataItemBase() :
mData(nullptr), mId(RILSERVICEINFO_DATA_ITEM_ID) {}
inline virtual ~RilServiceInfoDataItemBase() { if (nullptr != mData) free(mData); }
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
inline RilServiceInfoDataItemBase(const RilServiceInfoDataItemBase& peer) :
RilServiceInfoDataItemBase() {
peer.setPeerData(*this);
}
inline virtual bool operator==(const RilServiceInfoDataItemBase& other) const {
return other.mData == mData;
}
inline virtual void setPeerData(RilServiceInfoDataItemBase& /*peer*/) const {}
void* mData;
protected:
DataItemId mId;
};
class RilCellInfoDataItemBase : public IDataItemCore {
public:
inline RilCellInfoDataItemBase() :
mData(nullptr), mId(RILCELLINFO_DATA_ITEM_ID) {}
inline virtual ~RilCellInfoDataItemBase() { if (nullptr != mData) free(mData); }
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
inline RilCellInfoDataItemBase(const RilCellInfoDataItemBase& peer) :
RilCellInfoDataItemBase() {
peer.setPeerData(*this);
}
inline virtual bool operator==(const RilCellInfoDataItemBase& other) const {
return other.mData == mData;
}
inline virtual void setPeerData(RilCellInfoDataItemBase& /*peer*/) const {}
void* mData;
protected:
DataItemId mId;
};
class WifiSupplicantStatusDataItemBase : public IDataItemCore {
public:
WifiSupplicantStatusDataItemBase() :
mState((WifiSupplicantState)WIFI_SUPPLICANT_DEFAULT_STATE),
mApMacAddressValid(false),
mWifiApSsidValid(false),
mId(WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID) {
memset (&mApMacAddress, 0, sizeof (mApMacAddress));
mWifiApSsid.clear();
}
virtual ~WifiSupplicantStatusDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
typedef enum WifiSupplicantState {
DISCONNECTED,
INTERFACE_DISABLED,
INACTIVE,
SCANNING,
AUTHENTICATING,
ASSOCIATING,
ASSOCIATED,
FOUR_WAY_HANDSHAKE,
GROUP_HANDSHAKE,
COMPLETED,
DORMANT,
UNINITIALIZED,
INVALID
} WifiSupplicantState;
/* Represents whether access point attach state*/
WifiSupplicantState mState;
/* Represents info on whether ap mac address is valid */
bool mApMacAddressValid;
/* Represents mac address of the wifi access point*/
uint8_t mApMacAddress[MAC_ADDRESS_LENGTH];
/* Represents info on whether ap SSID is valid */
bool mWifiApSsidValid;
/* Represents Wifi SSID string*/
string mWifiApSsid;
protected:
DataItemId mId;
};
class TacDataItemBase : public IDataItemCore {
public:
TacDataItemBase(const string & name) :
mValue (name),
mId(TAC_DATA_ITEM_ID) {}
virtual ~TacDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mValue;
protected:
DataItemId mId;
};
class MccmncDataItemBase : public IDataItemCore {
public:
MccmncDataItemBase(const string & name) :
mValue(name),
mId(MCCMNC_DATA_ITEM_ID) {}
virtual ~MccmncDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mValue;
protected:
DataItemId mId;
};
class SrnDeviceScanDetailsDataItemBase : public IDataItemCore {
public:
SrnDeviceScanDetailsDataItemBase(DataItemId Id) :
mValidSrnData(false),
mApSrnRssi(-1),
mApSrnTimestamp(0),
mRequestTimestamp(0),
mReceiveTimestamp(0),
mErrorCause(-1),
mId(Id) {}
virtual ~SrnDeviceScanDetailsDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
// Data members common to all SRN tech types
/* Represents info on whether SRN data is valid (no error)*/
bool mValidSrnData;
/* SRN device RSSI reported */
int32_t mApSrnRssi;
/* MAC adress of SRN device */
uint8_t mApSrnMacAddress[SRN_MAC_ADDRESS_LENGTH];
/* UTC timestamp at which the scan was requested.for this SRN device*/
int64_t mApSrnTimestamp;
/* UTC timestamp at which the scan was started. */
int64_t mRequestTimestamp;
/* UTC timestamp at which the scan was received.*/
int64_t mReceiveTimestamp;
/* Reason for the error/failure if SRN details are not valid */
int32_t mErrorCause;
protected:
DataItemId mId;
};
class BtDeviceScanDetailsDataItemBase : public SrnDeviceScanDetailsDataItemBase {
public:
BtDeviceScanDetailsDataItemBase() :
SrnDeviceScanDetailsDataItemBase(BT_SCAN_DATA_ITEM_ID) {}
virtual ~BtDeviceScanDetailsDataItemBase() {}
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
};
class BtLeDeviceScanDetailsDataItemBase : public SrnDeviceScanDetailsDataItemBase {
public:
BtLeDeviceScanDetailsDataItemBase() :
SrnDeviceScanDetailsDataItemBase(BTLE_SCAN_DATA_ITEM_ID) {}
virtual ~BtLeDeviceScanDetailsDataItemBase() {}
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
};
class BatteryLevelDataItemBase : public IDataItemCore {
public:
inline BatteryLevelDataItemBase(uint8_t batteryPct) :
mBatteryPct(batteryPct), mId(BATTERY_LEVEL_DATA_ITEM_ID) {}
inline ~BatteryLevelDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
// Data members
uint8_t mBatteryPct;
protected:
DataItemId mId;
};
} // namespace loc_core
#endif //__DATAITEMCONCRETEBASETYPES__

View File

@@ -72,8 +72,6 @@ typedef enum e_DataItemId {
// 26 -
BATTERY_LEVEL_DATA_ITEM_ID,
IN_EMERGENCY_CALL_DATA_ITEM_ID,
LOC_FEATURE_STATUS_DATA_ITEM_ID,
MAX_DATA_ITEM_ID_1_1,
} DataItemId;

View File

@@ -32,101 +32,50 @@
#include <DataItemId.h>
#include <IDataItemCore.h>
#include <DataItemsFactoryProxy.h>
#include <DataItemConcreteTypes.h>
#include <loc_pla.h>
#include <log_util.h>
#include "loc_misc_utils.h"
namespace loc_core
{
void* DataItemsFactoryProxy::dataItemLibHandle = NULL;
get_concrete_data_item_fn* DataItemsFactoryProxy::getConcreteDIFunc = NULL;
IDataItemCore* DataItemsFactoryProxy::createNewDataItem(IDataItemCore* dataItem) {
IDataItemCore* DataItemsFactoryProxy::createNewDataItem(DataItemId id)
{
IDataItemCore *mydi = nullptr;
switch (dataItem->getId()) {
case AIRPLANEMODE_DATA_ITEM_ID:
mydi = new AirplaneModeDataItem(*((AirplaneModeDataItem*)dataItem));
break;
case ENH_DATA_ITEM_ID:
mydi = new ENHDataItem(*((ENHDataItem*)dataItem));
break;
case GPSSTATE_DATA_ITEM_ID:
mydi = new GPSStateDataItem(*((GPSStateDataItem*)dataItem));
break;
case NLPSTATUS_DATA_ITEM_ID:
mydi = new NLPStatusDataItem(*((NLPStatusDataItem*)dataItem));
break;
case WIFIHARDWARESTATE_DATA_ITEM_ID:
mydi = new WifiHardwareStateDataItem(*((WifiHardwareStateDataItem*)dataItem));
break;
case NETWORKINFO_DATA_ITEM_ID:
mydi = new NetworkInfoDataItem(*((NetworkInfoDataItem*)dataItem));
break;
case SERVICESTATUS_DATA_ITEM_ID:
mydi = new ServiceStatusDataItem(*((ServiceStatusDataItem*)dataItem));
break;
case RILCELLINFO_DATA_ITEM_ID:
mydi = new RilCellInfoDataItem(*((RilCellInfoDataItem*)dataItem));
break;
case RILSERVICEINFO_DATA_ITEM_ID:
mydi = new RilServiceInfoDataItem(*((RilServiceInfoDataItem*)dataItem));
break;
case MODEL_DATA_ITEM_ID:
mydi = new ModelDataItem(*((ModelDataItem*)dataItem));
break;
case MANUFACTURER_DATA_ITEM_ID:
mydi = new ManufacturerDataItem(*((ManufacturerDataItem*)dataItem));
break;
case IN_EMERGENCY_CALL_DATA_ITEM_ID:
mydi = new InEmergencyCallDataItem(*((InEmergencyCallDataItem*)dataItem));
break;
case ASSISTED_GPS_DATA_ITEM_ID:
mydi = new AssistedGpsDataItem(*((AssistedGpsDataItem*)dataItem));
break;
case SCREEN_STATE_DATA_ITEM_ID:
mydi = new ScreenStateDataItem(*((ScreenStateDataItem*)dataItem));
break;
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
mydi = new PowerConnectStateDataItem(*((PowerConnectStateDataItem*)dataItem));
break;
case TIMEZONE_CHANGE_DATA_ITEM_ID:
mydi = new TimeZoneChangeDataItem(*((TimeZoneChangeDataItem*)dataItem));
break;
case TIME_CHANGE_DATA_ITEM_ID:
mydi = new TimeChangeDataItem(*((TimeChangeDataItem*)dataItem));
break;
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
mydi = new WifiSupplicantStatusDataItem(*((WifiSupplicantStatusDataItem*)dataItem));
break;
case SHUTDOWN_STATE_DATA_ITEM_ID:
mydi = new ShutdownStateDataItem(*((ShutdownStateDataItem*)dataItem));
break;
case TAC_DATA_ITEM_ID:
mydi = new TacDataItem(*((TacDataItem*)dataItem));
break;
case MCCMNC_DATA_ITEM_ID:
mydi = new MccmncDataItem(*((MccmncDataItem*)dataItem));
break;
case BTLE_SCAN_DATA_ITEM_ID:
mydi = new BtLeDeviceScanDetailsDataItem(*((BtLeDeviceScanDetailsDataItem*)dataItem));
break;
case BT_SCAN_DATA_ITEM_ID:
mydi = new BtDeviceScanDetailsDataItem(*((BtDeviceScanDetailsDataItem*)dataItem));
break;
case BATTERY_LEVEL_DATA_ITEM_ID:
mydi = new BatteryLevelDataItem(*((BatteryLevelDataItem*)dataItem));
break;
case LOC_FEATURE_STATUS_DATA_ITEM_ID:
mydi = new LocFeatureStatusDataItem(*((LocFeatureStatusDataItem*)dataItem));
break;
case INVALID_DATA_ITEM_ID:
case MAX_DATA_ITEM_ID:
default:
break;
};
if (NULL != getConcreteDIFunc) {
mydi = (*getConcreteDIFunc)(id);
}
else {
getConcreteDIFunc = (get_concrete_data_item_fn * )
dlGetSymFromLib(dataItemLibHandle, DATA_ITEMS_LIB_NAME, DATA_ITEMS_GET_CONCRETE_DI);
if (NULL != getConcreteDIFunc) {
LOC_LOGd("Loaded function %s : %p", DATA_ITEMS_GET_CONCRETE_DI, getConcreteDIFunc);
mydi = (*getConcreteDIFunc)(id);
}
else {
// dlysm failed.
const char * err = dlerror();
if (NULL == err)
{
err = "Unknown";
}
LOC_LOGe("failed to find symbol %s; error=%s", DATA_ITEMS_GET_CONCRETE_DI, err);
}
}
return mydi;
}
void DataItemsFactoryProxy::closeDataItemLibraryHandle()
{
if (NULL != dataItemLibHandle) {
dlclose(dataItemLibHandle);
dataItemLibHandle = NULL;
}
}
} // namespace loc_core

View File

@@ -1,4 +1,4 @@
/* Copyright (c) 2017, 2020, The Linux Foundation. All rights reserved.
/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -35,9 +35,18 @@
namespace loc_core
{
#define DATA_ITEMS_LIB_NAME "libdataitems.so"
#define DATA_ITEMS_GET_CONCRETE_DI "getConcreteDataItem"
typedef IDataItemCore * (get_concrete_data_item_fn)(DataItemId);
class DataItemsFactoryProxy {
public:
static IDataItemCore* createNewDataItem(IDataItemCore* di);
static IDataItemCore* createNewDataItem(DataItemId id);
static void closeDataItemLibraryHandle();
static void *dataItemLibHandle;
static get_concrete_data_item_fn *getConcreteDIFunc;
};
} // namespace loc_core

View File

@@ -1,4 +1,4 @@
/* Copyright (c) 2015, 2017, 2020 The Linux Foundation. All rights reserved.
/* Copyright (c) 2015, 2017 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -49,7 +49,7 @@ public:
* @details Gets Data item id.
* @return Data item id.
*/
inline DataItemId getId() { return mId; }
virtual DataItemId getId () = 0;
/**
* @brief Stringify.
@@ -68,15 +68,13 @@ public:
*
* @return Zero for success or non zero for failure.
*/
virtual int32_t copyFrom(IDataItemCore * src) = 0;
virtual int32_t copy (IDataItemCore * src, bool *dataItemCopied = nullptr) = 0;
/**
* @brief Destructor.
* @details Destructor.
*/
virtual ~IDataItemCore () {}
protected:
DataItemId mId = INVALID_DATA_ITEM_ID;
};
} // namespace loc_core

View File

@@ -123,7 +123,6 @@ GnssAdapter::GnssAdapter() :
mOdcpiRequestCb(nullptr),
mOdcpiRequestActive(false),
mCallbackPriority(OdcpiPrioritytype::ODCPI_HANDLER_PRIORITY_LOW),
mOdcpiStateMask(0),
mOdcpiTimer(this),
mOdcpiRequest(),
mLastDeleteAidingDataTime(0),
@@ -177,7 +176,8 @@ GnssAdapter::GnssAdapter() :
doneInit();
}
void GnssAdapter::setControlCallbacksCommand(LocationControlCallbacks& controlCallbacks)
void
GnssAdapter::setControlCallbacksCommand(LocationControlCallbacks& controlCallbacks)
{
struct MsgSetControlCallbacks : public LocMsg {
GnssAdapter& mAdapter;
@@ -2690,6 +2690,48 @@ void GnssAdapter::checkAndRestartTimeBasedSession()
}
}
LocationCapabilitiesMask
GnssAdapter::getCapabilities()
{
LocationCapabilitiesMask mask = 0;
uint32_t carrierCapabilities = ContextBase::getCarrierCapabilities();
// time based tracking always supported
mask |= LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT;
// geofence always supported
mask |= LOCATION_CAPABILITIES_GEOFENCE_BIT;
if (carrierCapabilities & LOC_GPS_CAPABILITY_MSB) {
mask |= LOCATION_CAPABILITIES_GNSS_MSB_BIT;
}
if (LOC_GPS_CAPABILITY_MSA & carrierCapabilities) {
mask |= LOCATION_CAPABILITIES_GNSS_MSA_BIT;
}
if (ContextBase::isMessageSupported(LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_LOCATION_BATCHING)) {
mask |= LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT |
LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT;
}
if (ContextBase::isMessageSupported(LOC_API_ADAPTER_MESSAGE_DISTANCE_BASE_TRACKING)) {
mask |= LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT;
}
if (ContextBase::isMessageSupported(LOC_API_ADAPTER_MESSAGE_OUTDOOR_TRIP_BATCHING)) {
mask |= LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT;
}
if (ContextBase::gnssConstellationConfig()) {
mask |= LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT;
}
if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_DEBUG_NMEA_V02)) {
mask |= LOCATION_CAPABILITIES_DEBUG_NMEA_BIT;
}
if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_CONSTELLATION_ENABLEMENT_V02)) {
mask |= LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT;
}
if (ContextBase::isFeatureSupported(LOC_SUPPORTED_FEATURE_AGPM_V02)) {
mask |= LOCATION_CAPABILITIES_AGPM_BIT;
}
//Get QWES feature status mask
mask |= ContextBase::getQwesFeatureStatus();
return mask;
}
void
GnssAdapter::notifyClientOfCachedLocationSystemInfo(
LocationAPI* client, const LocationCallbacks& callbacks) {
@@ -4780,7 +4822,6 @@ GnssAdapter::requestOdcpiEvent(OdcpiRequestInfo& request)
void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request)
{
if (nullptr != mOdcpiRequestCb) {
bool sendEmergencyCallStatusEvent = false;
LOC_LOGd("request: type %d, tbf %d, isEmergency %d"
" requestActive: %d timerActive: %d",
request.type, request.tbfMillis, request.isEmergencyMode,
@@ -4788,26 +4829,23 @@ void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request)
// ODCPI START and ODCPI STOP from modem can come in quick succession
// so the mOdcpiTimer helps avoid spamming the framework as well as
// extending the odcpi session past 30 seconds if needed
if (ODCPI_REQUEST_TYPE_START == request.type) {
if (!(mOdcpiStateMask & ODCPI_REQ_ACTIVE) && false == mOdcpiTimer.isActive()) {
fireOdcpiRequest(request);
mOdcpiStateMask |= ODCPI_REQ_ACTIVE;
if (false == mOdcpiRequestActive && false == mOdcpiTimer.isActive()) {
mOdcpiRequestCb(request);
mOdcpiRequestActive = true;
mOdcpiTimer.start();
sendEmergencyCallStatusEvent = true;
// if the current active odcpi session is non-emergency, and the new
// odcpi request is emergency, replace the odcpi request with new request
// and restart the timer
} else if (false == mOdcpiRequest.isEmergencyMode &&
true == request.isEmergencyMode) {
fireOdcpiRequest(request);
mOdcpiStateMask |= ODCPI_REQ_ACTIVE;
mOdcpiRequestCb(request);
mOdcpiRequestActive = true;
if (true == mOdcpiTimer.isActive()) {
mOdcpiTimer.restart();
} else {
mOdcpiTimer.start();
}
sendEmergencyCallStatusEvent = true;
// if ODCPI request is not active but the timer is active, then
// just update the active state and wait for timer to expire
// before requesting new ODCPI to avoid spamming ODCPI requests
@@ -4820,22 +4858,11 @@ void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request)
// to avoid spamming more odcpi requests to the framework
} else if (ODCPI_REQUEST_TYPE_STOP == request.type) {
LOC_LOGd("request: type %d, isEmergency %d", request.type, request.isEmergencyMode);
fireOdcpiRequest(request);
mOdcpiStateMask = 0;
sendEmergencyCallStatusEvent = true;
mOdcpiRequestCb(request);
mOdcpiRequestActive = false;
} else {
LOC_LOGE("Invalid ODCPI request type..");
}
// Raise InEmergencyCall event
if (sendEmergencyCallStatusEvent && request.isEmergencyMode) {
SystemStatus* systemstatus = getSystemStatus();
if (nullptr != systemstatus) {
systemstatus->eventInEmergencyCall(0 != mOdcpiStateMask);
} else {
LOC_LOGe("Failed to get system status instance.");
}
}
} else {
LOC_LOGw("ODCPI request not supported");
}
@@ -4875,6 +4902,9 @@ bool GnssAdapter::reportQwesCapabilities(
mAdapter(adapter),
mFeatureMap(std::move(featureMap)) {}
inline virtual void proc() const {
LOC_LOGi("ReportQwesFeatureStatus before caps %" PRIx64 " ",
mAdapter.getCapabilities());
ContextBase::setQwesFeatureStatus(mFeatureMap);
LOC_LOGi("ReportQwesFeatureStatus After caps %" PRIx64 " ",
mAdapter.getCapabilities());
mAdapter.broadcastCapabilities(mAdapter.getCapabilities());
@@ -4886,84 +4916,36 @@ bool GnssAdapter::reportQwesCapabilities(
}
void GnssAdapter::initOdcpiCommand(const OdcpiRequestCallback& callback,
OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask)
OdcpiPrioritytype priority)
{
struct MsgInitOdcpi : public LocMsg {
GnssAdapter& mAdapter;
OdcpiRequestCallback mOdcpiCb;
OdcpiPrioritytype mPriority;
OdcpiCallbackTypeMask mTypeMask;
inline MsgInitOdcpi(GnssAdapter& adapter,
const OdcpiRequestCallback& callback,
OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask) :
OdcpiPrioritytype priority) :
LocMsg(),
mAdapter(adapter),
mOdcpiCb(callback), mPriority(priority),
mTypeMask(typeMask) {}
mOdcpiCb(callback), mPriority(priority){}
inline virtual void proc() const {
mAdapter.initOdcpi(mOdcpiCb, mPriority, mTypeMask);
mAdapter.initOdcpi(mOdcpiCb, mPriority);
}
};
sendMsg(new MsgInitOdcpi(*this, callback, priority, typeMask));
}
void GnssAdapter::deRegisterOdcpiCommand(OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask) {
struct MsgDeRegisterNonEsOdcpi : public LocMsg {
GnssAdapter& mAdapter;
OdcpiPrioritytype mPriority;
OdcpiCallbackTypeMask mTypeMask;
inline MsgDeRegisterNonEsOdcpi(GnssAdapter& adapter,
OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask) :
LocMsg(),
mAdapter(adapter),
mPriority(priority),
mTypeMask(typeMask) {}
inline virtual void proc() const {
mAdapter.deRegisterOdcpi(mPriority, mTypeMask);
}
};
sendMsg(new MsgDeRegisterNonEsOdcpi(*this, priority, typeMask));
}
void GnssAdapter::fireOdcpiRequest(const OdcpiRequestInfo& request) {
if (request.isEmergencyMode) {
mOdcpiRequestCb(request);
} else {
std::unordered_map<OdcpiPrioritytype, OdcpiRequestCallback>::iterator iter;
for (int priority = ODCPI_HANDLER_PRIORITY_HIGH;
priority >= ODCPI_HANDLER_PRIORITY_LOW && iter == mNonEsOdcpiReqCbMap.end();
priority--) {
iter = mNonEsOdcpiReqCbMap.find((OdcpiPrioritytype)priority);
}
if (iter != mNonEsOdcpiReqCbMap.end()) {
iter->second(request);
}
}
sendMsg(new MsgInitOdcpi(*this, callback, priority));
}
void GnssAdapter::initOdcpi(const OdcpiRequestCallback& callback,
OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask) {
if (typeMask & EMERGENCY_ODCPI) {
LOC_LOGd("In priority: %d, Curr priority: %d", priority, mCallbackPriority);
if (priority >= mCallbackPriority) {
mOdcpiRequestCb = callback;
mCallbackPriority = priority;
/* Register for WIFI request */
updateEvtMask(LOC_API_ADAPTER_BIT_REQUEST_WIFI,
LOC_REGISTRATION_MASK_ENABLED);
}
}
if (typeMask & NON_EMERGENCY_ODCPI) {
//If this is for non emergency odcpi,
//Only set callback to mNonEsOdcpiReqCbMap according to its priority
//Will overwrite callback with same priority in this map
mNonEsOdcpiReqCbMap[priority] = callback;
OdcpiPrioritytype priority)
{
LOC_LOGd("In priority: %d, Curr priority: %d", priority, mCallbackPriority);
if (priority >= mCallbackPriority) {
mOdcpiRequestCb = callback;
mCallbackPriority = priority;
/* Register for WIFI request */
updateEvtMask(LOC_API_ADAPTER_BIT_REQUEST_WIFI,
LOC_REGISTRATION_MASK_ENABLED);
}
}
@@ -5023,8 +5005,8 @@ void GnssAdapter::odcpiTimerExpire()
// if ODCPI request is still active after timer
// expires, request again and restart timer
if (mOdcpiStateMask & ODCPI_REQ_ACTIVE) {
fireOdcpiRequest(mOdcpiRequest);
if (mOdcpiRequestActive) {
mOdcpiRequestCb(mOdcpiRequest);
mOdcpiTimer.restart();
} else {
mOdcpiTimer.stop();
@@ -5862,27 +5844,26 @@ GnssAdapter::nfwControlCommand(bool enable) {
mApi(api),
mEnable(enable) {}
inline virtual void proc() const {
GnssConfigGpsLock gpsLock;
if (mAdapter.mSupportNfwControl) {
GnssConfigGpsLock gpsLock;
gpsLock = ContextBase::mGps_conf.GPS_LOCK;
if (mEnable) {
gpsLock &= ~GNSS_CONFIG_GPS_LOCK_NI;
} else {
gpsLock |= GNSS_CONFIG_GPS_LOCK_NI;
}
ContextBase::mGps_conf.GPS_LOCK = gpsLock;
mApi.sendMsg(new LocApiMsg([&mApi = mApi, gpsLock]() {
mApi.setGpsLockSync((GnssConfigGpsLock)gpsLock);
}));
gpsLock = ContextBase::mGps_conf.GPS_LOCK;
if (mEnable) {
gpsLock &= ~GNSS_CONFIG_GPS_LOCK_NI;
} else {
LOC_LOGw("NFW control is not supported, do not use this for NFW");
gpsLock |= GNSS_CONFIG_GPS_LOCK_NI;
}
ContextBase::mGps_conf.GPS_LOCK = gpsLock;
mApi.sendMsg(new LocApiMsg([&mApi = mApi, gpsLock]() {
mApi.setGpsLockSync((GnssConfigGpsLock)gpsLock);
}));
}
};
sendMsg(new MsgControlNfwLocationAccess(*this, *mLocApi, enable));
if (mSupportNfwControl) {
sendMsg(new MsgControlNfwLocationAccess(*this, *mLocApi, enable));
} else {
LOC_LOGw("NFW control is not supported, do not use this for NFW");
}
}
// Set tunc constrained mode, use 0 session id to indicate
@@ -6537,7 +6518,8 @@ GnssAdapter::initEngHubProxyCommand() {
sendMsg(new MsgInitEngHubProxy(this));
}
bool GnssAdapter::initEngHubProxy() {
bool
GnssAdapter::initEngHubProxy() {
static bool firstTime = true;
static bool engHubLoadSuccessful = false;
@@ -6634,19 +6616,16 @@ bool GnssAdapter::initEngHubProxy() {
GnssAdapterUpdateQwesFeatureStatusCb updateQwesFeatureStatusCb =
[this] (const std::unordered_map<LocationQwesFeatureType, bool> &featureMap) {
ContextBase::setQwesFeatureStatus(featureMap);
reportQwesCapabilities(featureMap);
};
getEngHubProxyFn* getter = (getEngHubProxyFn*) dlsym(handle, "getEngHubProxy");
if(getter != nullptr) {
// Wait for the script(rootdir/etc/init.qcom.rc) to create socket folder
EngineHubProxyBase* hubProxy = (*getter) (mMsgTask, mContext,
mSystemStatus->getOsObserver(),
reportPositionEventCb, reportSvEventCb, reqAidingDataCb,
updateNHzRequirementCb, updateQwesFeatureStatusCb);
EngineHubProxyBase* hubProxy = (*getter) (mMsgTask, mSystemStatus->getOsObserver(),
reportPositionEventCb,
reportSvEventCb, reqAidingDataCb,
updateNHzRequirementCb,
updateQwesFeatureStatusCb);
if (hubProxy != nullptr) {
mEngHubProxy = hubProxy;
engHubLoadSuccessful = true;

View File

@@ -42,7 +42,6 @@
#include <loc_misc_utils.h>
#include <queue>
#include <NativeAgpsHandler.h>
#include <unordered_map>
#define MAX_URL_LEN 256
#define NMEA_SENTENCE_MAX_LENGTH 200
@@ -259,17 +258,10 @@ class GnssAdapter : public LocAdapterBase {
OdcpiRequestCallback mOdcpiRequestCb;
bool mOdcpiRequestActive;
OdcpiPrioritytype mCallbackPriority;
typedef uint8_t OdcpiStateMask;
OdcpiStateMask mOdcpiStateMask;
typedef enum {
ODCPI_REQ_ACTIVE = (1<<0),
CIVIC_ADDRESS_REQ_ACTIVE = (1<<1)
} OdcpiStateBits;
OdcpiTimer mOdcpiTimer;
OdcpiRequestInfo mOdcpiRequest;
std::unordered_map<OdcpiPrioritytype, OdcpiRequestCallback> mNonEsOdcpiReqCbMap;
void odcpiTimerExpire();
std::function<void(const Location&)> mAddressRequestCb;
/* ==== DELETEAIDINGDATA =============================================================== */
int64_t mLastDeleteAidingDataTime;
@@ -308,20 +300,8 @@ class GnssAdapter : public LocAdapterBase {
int totalSvCntInThisConstellation);
/* ======== UTILITIES ================================================================== */
inline void initOdcpi(const OdcpiRequestCallback& callback,
OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask);
inline void deRegisterOdcpi(OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask) {
if (typeMask & NON_EMERGENCY_ODCPI) {
mNonEsOdcpiReqCbMap.erase(priority);
}
}
inline void initOdcpi(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority);
inline void injectOdcpi(const Location& location);
void fireOdcpiRequest(const OdcpiRequestInfo& request);
//inline void setAddressRequestCb(const std::function<void(const Location&)>& addressRequestCb)
//{ mAddressRequestCb = addressRequestCb;}
//inline void injectLocationAndAddr(const Location& location, const GnssCivicAddress& addr)
//{ mLocApi->injectPositionAndCivicAddress(location, addr);}
static bool isFlpClient(LocationCallbacks& locationCallbacks);
/*==== DGnss Ntrip Source ==========================================================*/
@@ -488,12 +468,8 @@ public:
LocEngineRunState engState);
/* ========= ODCPI ===================================================================== */
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
void initOdcpiCommand(const OdcpiRequestCallback& callback,
OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask);
void deRegisterOdcpiCommand(OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask);
void initOdcpiCommand(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority);
void injectOdcpiCommand(const Location& location);
/* ======== RESPONSES ================================================================== */
void reportResponse(LocationError err, uint32_t sessionId);
@@ -652,6 +628,7 @@ public:
void setSuplHostServer(const char* server, int port, LocServerType type);
void notifyClientOfCachedLocationSystemInfo(LocationAPI* client,
const LocationCallbacks& callbacks);
LocationCapabilitiesMask getCapabilities();
void updateSystemPowerStateCommand(PowerStateType systemPowerState);
/*==== DGnss Usable Report Flag ====================================================*/

View File

@@ -32,7 +32,7 @@
#include <SystemStatus.h>
#include <DataItemId.h>
#include <DataItemsFactoryProxy.h>
#include <DataItemConcreteTypes.h>
#include <DataItemConcreteTypesBase.h>
#include <loc_log.h>
#include <NativeAgpsHandler.h>
#include <GnssAdapter.h>
@@ -48,8 +48,8 @@ void NativeAgpsHandler::notify(const list<IDataItemCore*>& dlist) {
for (auto each : dlist) {
switch (each->getId()) {
case NETWORKINFO_DATA_ITEM_ID: {
NetworkInfoDataItem* networkInfo =
static_cast<NetworkInfoDataItem*>(each);
NetworkInfoDataItemBase* networkInfo =
static_cast<NetworkInfoDataItemBase*>(each);
uint64_t mobileBit = (uint64_t )1 << loc_core::TYPE_MOBILE;
uint64_t allTypes = networkInfo->mAllTypes;
mConnected = ((networkInfo->mAllTypes & mobileBit) == mobileBit);

View File

@@ -47,7 +47,7 @@
#include <LocAdapterBase.h>
#include <DataItemId.h>
#include <DataItemsFactoryProxy.h>
#include <DataItemConcreteTypes.h>
#include <DataItemConcreteTypesBase.h>
using namespace loc_util;
using namespace loc_core;
@@ -322,10 +322,13 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
const list<IDataItemCore*>& dataItemList) :
mXtraSysStatObj(xtraSysStatObs) {
for (auto eachItem : dataItemList) {
IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(eachItem);
IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(
eachItem->getId());
if (NULL == dataitem) {
break;
}
// Copy the contents of the data item
dataitem->copy(eachItem);
mDataItemList.push_back(dataitem);
}
@@ -346,7 +349,8 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
{
case NETWORKINFO_DATA_ITEM_ID:
{
NetworkInfoDataItem* networkInfo = static_cast<NetworkInfoDataItem*>(each);
NetworkInfoDataItemBase* networkInfo =
static_cast<NetworkInfoDataItemBase*>(each);
NetworkInfoType* networkHandleInfo =
static_cast<NetworkInfoType*>(networkInfo->getNetworkHandle());
mXtraSysStatObj->updateConnections(networkInfo->getAllTypes(),
@@ -356,14 +360,16 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
case TAC_DATA_ITEM_ID:
{
TacDataItem* tac = static_cast<TacDataItem*>(each);
TacDataItemBase* tac =
static_cast<TacDataItemBase*>(each);
mXtraSysStatObj->updateTac(tac->mValue);
}
break;
case MCCMNC_DATA_ITEM_ID:
{
MccmncDataItem* mccmnc = static_cast<MccmncDataItem*>(each);
MccmncDataItemBase* mccmnc =
static_cast<MccmncDataItemBase*>(each);
mXtraSysStatObj->updateMccMnc(mccmnc->mValue);
}
break;

View File

@@ -27,42 +27,6 @@
*
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "GnssAdapter.h"
#include "location_interface.h"
@@ -109,9 +73,7 @@ static void enableNfwLocationAccess(bool enable);
static void nfwInit(const NfwCbInfo& cbInfo);
static void getPowerStateChanges(std::function<void(bool)> powerStateCb);
static void odcpiInit(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask);
static void deRegisterOdcpi(OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask);
static void odcpiInit(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority);
static void odcpiInject(const Location& location);
static void blockCPI(double latitude, double longitude, float accuracy,
@@ -173,7 +135,6 @@ static const GnssInterface gGnssInterface = {
getDebugReport,
updateConnectionStatus,
odcpiInit,
deRegisterOdcpi,
odcpiInject,
blockCPI,
getGnssEnergyConsumed,
@@ -418,17 +379,10 @@ static void updateConnectionStatus(bool connected, int8_t type,
}
}
static void odcpiInit(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask)
static void odcpiInit(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority)
{
if (NULL != gGnssAdapter) {
gGnssAdapter->initOdcpiCommand(callback, priority, typeMask);
}
}
static void deRegisterOdcpi(OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask) {
if (NULL != gGnssAdapter) {
gGnssAdapter->deRegisterOdcpiCommand(priority, typeMask);
gGnssAdapter->initOdcpiCommand(callback, priority);
}
}

View File

@@ -30,6 +30,7 @@ PRODUCT_PACKAGES += gnss_antenna_info.conf
PRODUCT_PACKAGES += gnss@2.0-base.policy
PRODUCT_PACKAGES += gnss@2.0-xtra-daemon.policy
PRODUCT_PACKAGES += gnss@2.0-xtwifi-client.policy
PRODUCT_PACKAGES += gnss@2.0-xtwifi-inet-agent.policy
PRODUCT_PACKAGES += libloc_pla_headers
PRODUCT_PACKAGES += liblocation_api_headers
PRODUCT_PACKAGES += libgps.utils_headers

View File

@@ -25,42 +25,6 @@
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_LocationAPI"

View File

@@ -26,11 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_APIClientBase"
@@ -362,8 +357,7 @@ uint32_t LocationAPIClientBase::locAPIStartTracking(TrackingOptions& options)
pthread_mutex_lock(&mMutex);
if (mLocationAPI) {
if (mTracking) {
pthread_mutex_unlock(&mMutex);
locAPIUpdateTrackingOptions(options);
LOC_LOGW("%s:%d] Existing tracking session present", __FUNCTION__, __LINE__);
} else {
uint32_t session = mLocationAPI->startTracking(options);
LOC_LOGI("%s:%d] start new session: %d", __FUNCTION__, __LINE__, session);
@@ -373,13 +367,11 @@ uint32_t LocationAPIClientBase::locAPIStartTracking(TrackingOptions& options)
mRequestQueues[REQUEST_TRACKING].reset(session);
mRequestQueues[REQUEST_TRACKING].push(new StartTrackingRequest(*this));
mTracking = true;
pthread_mutex_unlock(&mMutex);
}
retVal = LOCATION_ERROR_SUCCESS;
} else {
pthread_mutex_unlock(&mMutex);
}
pthread_mutex_unlock(&mMutex);
return retVal;
}

View File

@@ -26,40 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LOCATIONDATATYPES_H
#define LOCATIONDATATYPES_H
@@ -272,91 +238,77 @@ typedef enum {
// Set of masks for Modem and QWES capabilities.
typedef uint64_t LocationCapabilitiesMask;
// supports startTracking API with minInterval param
#define LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT (1<<0)
// supports startBatching API with minInterval param
#define LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT (1<<1)
// supports startTracking API with minDistance param
#define LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT (1<<2)
// supports startBatching API with minDistance param
#define LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT (1<<3)
// supports addGeofences API
#define LOCATION_CAPABILITIES_GEOFENCE_BIT (1<<4)
// supports GnssMeasurementsCallback
#define LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT (1<<5)
// supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
#define LOCATION_CAPABILITIES_GNSS_MSB_BIT (1<<6)
// supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
#define LOCATION_CAPABILITIES_GNSS_MSA_BIT (1<<7)
// supports debug nmea sentences in the debugNmeaCallback
#define LOCATION_CAPABILITIES_DEBUG_NMEA_BIT (1<<8)
// support outdoor trip batching
#define LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT (1<<9)
// support constellation enablement
#define LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT (1<<10)
// support agpm
#define LOCATION_CAPABILITIES_AGPM_BIT (1<<11)
// support location privacy
#define LOCATION_CAPABILITIES_PRIVACY_BIT (1<<12)
// support measurement corrections
#define LOCATION_CAPABILITIES_MEASUREMENTS_CORRECTION_BIT (1<<13)
// support Robust Location
#define LOCATION_CAPABILITIES_CONFORMITY_INDEX_BIT (1<<14)
// support precise location edgnss
#define LOCATION_CAPABILITIES_EDGNSS_BIT (1<<15)
// Modem supports Carrier Phase for Precise Positioning
// Measurement Engine (PPME).
#define LOCATION_CAPABILITIES_QWES_CARRIER_PHASE_BIT (1<<16)
// Modem supports SV Polynomial for tightly coupled external
// DR support. This is a Standalone Feature.
#define LOCATION_CAPABILITIES_QWES_SV_POLYNOMIAL_BIT (1<<17)
// Modem supports SV Ephemeris for tightly coupled external
// PPE engines. This is a Standalone Feature.
#define LOCATION_CAPABILITIES_QWES_SV_EPHEMERIS_BIT (1<<18)
// Modem supports GNSS Single Frequency feature. This is a
// Standalone Feature.
#define LOCATION_CAPABILITIES_QWES_GNSS_SINGLE_FREQUENCY (1<<19)
// Modem supports GNSS Multi Frequency feature. Multi Frequency
// enables Single frequency also.
#define LOCATION_CAPABILITIES_QWES_GNSS_MULTI_FREQUENCY (1<<20)
// This mask indicates VPe license bundle is enabled. VEPP
// bundle include Carrier Phase and SV Polynomial features.
#define LOCATION_CAPABILITIES_QWES_VPE (1<<21)
// This mask indicates support for CV2X Location basic features.
// This bundle includes features for GTS Time & Freq, C-TUNC
// (Constrained Time uncertainity.
#define LOCATION_CAPABILITIES_QWES_CV2X_LOCATION_BASIC (1<<22)
// This mask indicates support for CV2X Location premium features.
// This bundle includes features for CV2X Location Basic features,
// QDR3 feature, and PACE. (Position Assisted Clock Estimator.
#define LOCATION_CAPABILITIES_QWES_CV2X_LOCATION_PREMIUM (1<<23)
// This mask indicates that PPE (Precise Positioning Engine)
// library is enabled or Precise Positioning Framework (PPF)
// is available. This bundle includes features for Carrier
// Phase and SV Ephermeris.
#define LOCATION_CAPABILITIES_QWES_PPE (1<<24)
// This mask indicates QDR2_C license bundle is enabled. This
// bundle includes features for SV Polynomial.
#define LOCATION_CAPABILITIES_QWES_QDR2 (1<<25)
// This mask indicates QDR3_C license bundle is enabled. This
// bundle includes features for SV Polynomial.
#define LOCATION_CAPABILITIES_QWES_QDR3 (1<<26)
// This mask indicates DGNSS license bundle is enabled.
#define LOCATION_CAPABILITIES_QWES_DGNSS (1<<27)
// This mask indicates Antenna info is enabled.
#define LOCATION_CAPABILITIES_ANTENNA_INFO (1<<28)
// This mask indicates qppe or qfe library is presented.
#define LOCATION_CAPABILITIES_PRECISE_LIB_PRESENT (1<<29)
// This mask indicates wifi RSSI positioning is
// enabled by QWES license.
#define LOCATION_CAPABILITIES_QWES_WIFI_RSSI_POSITIONING (1ULL<<30)
// This mask indicates wifi RTT positioning is
// enabled by QWES license.
#define LOCATION_CAPABILITIES_QWES_WIFI_RTT_POSITIONING (1ULL<<31)
// This mask indicates wifi RSSI positioning is supported.
#define LOCATION_CAPABILITIES_WIFI_RSSI_POSITIONING (1ULL<<32)
// This mask indicates wifi RTT positioning is supported.
#define LOCATION_CAPABILITIES_WIFI_RTT_POSITIONING (1ULL<<33)
typedef enum {
// supports startTracking API with minInterval param
LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT = (1<<0),
// supports startBatching API with minInterval param
LOCATION_CAPABILITIES_TIME_BASED_BATCHING_BIT = (1<<1),
// supports startTracking API with minDistance param
LOCATION_CAPABILITIES_DISTANCE_BASED_TRACKING_BIT = (1<<2),
// supports startBatching API with minDistance param
LOCATION_CAPABILITIES_DISTANCE_BASED_BATCHING_BIT = (1<<3),
// supports addGeofences API
LOCATION_CAPABILITIES_GEOFENCE_BIT = (1<<4),
// supports GnssMeasurementsCallback
LOCATION_CAPABILITIES_GNSS_MEASUREMENTS_BIT = (1<<5),
// supports startTracking/startBatching API with LocationOptions.mode of MSB (Ms Based)
LOCATION_CAPABILITIES_GNSS_MSB_BIT = (1<<6),
// supports startTracking/startBatching API with LocationOptions.mode of MSA (MS Assisted)
LOCATION_CAPABILITIES_GNSS_MSA_BIT = (1<<7),
// supports debug nmea sentences in the debugNmeaCallback
LOCATION_CAPABILITIES_DEBUG_NMEA_BIT = (1<<8),
// support outdoor trip batching
LOCATION_CAPABILITIES_OUTDOOR_TRIP_BATCHING_BIT = (1<<9),
// support constellation enablement
LOCATION_CAPABILITIES_CONSTELLATION_ENABLEMENT_BIT = (1<<10),
// support agpm
LOCATION_CAPABILITIES_AGPM_BIT = (1<<11),
// support location privacy
LOCATION_CAPABILITIES_PRIVACY_BIT = (1<<12),
// support measurement corrections
LOCATION_CAPABILITIES_MEASUREMENTS_CORRECTION_BIT = (1<<13),
// support Robust Location
LOCATION_CAPABILITIES_CONFORMITY_INDEX_BIT = (1<<14),
// support precise location edgnss
LOCATION_CAPABILITIES_EDGNSS_BIT = (1<<15),
// Modem supports Carrier Phase for Precise Positioning
// Measurement Engine (PPME).
LOCATION_CAPABILITIES_QWES_CARRIER_PHASE_BIT = (1<<16),
// Modem supports SV Polynomial for tightly coupled external
// DR support. This is a Standalone Feature.
LOCATION_CAPABILITIES_QWES_SV_POLYNOMIAL_BIT = (1<<17),
// Modem supports SV Ephemeris for tightly coupled external
// PPE engines. This is a Standalone Feature.
LOCATION_CAPABILITIES_QWES_SV_EPHEMERIS_BIT = (1<<18),
// Modem supports GNSS Single Frequency feature. This is a
// Standalone Feature.
LOCATION_CAPABILITIES_QWES_GNSS_SINGLE_FREQUENCY = (1<<19),
// Modem supports GNSS Multi Frequency feature. Multi Frequency
// enables Single frequency also.
LOCATION_CAPABILITIES_QWES_GNSS_MULTI_FREQUENCY = (1<<20),
// This mask indicates VPe license bundle is enabled. VEPP
// bundle include Carrier Phase and SV Polynomial features.
LOCATION_CAPABILITIES_QWES_VPE = (1<<21),
// This mask indicates support for CV2X Location basic features.
// This bundle includes features for GTS Time & Freq, C-TUNC
// (Constrained Time uncertainity.
LOCATION_CAPABILITIES_QWES_CV2X_LOCATION_BASIC = (1<<22),
// This mask indicates support for CV2X Location premium features.
// This bundle includes features for CV2X Location Basic features,
// QDR3 feature, and PACE. (Position Assisted Clock Estimator.
LOCATION_CAPABILITIES_QWES_CV2X_LOCATION_PREMIUM = (1<<23),
// This mask indicates that PPE (Precise Positioning Engine)
// library is enabled or Precise Positioning Framework (PPF)
// is available. This bundle includes features for Carrier
// Phase and SV Ephermeris.
LOCATION_CAPABILITIES_QWES_PPE = (1<<24),
// This mask indicates QDR2_C license bundle is enabled. This
// bundle includes features for SV Polynomial.
LOCATION_CAPABILITIES_QWES_QDR2 = (1<<25),
// This mask indicates QDR3_C license bundle is enabled. This
// bundle includes features for SV Polynomial.
LOCATION_CAPABILITIES_QWES_QDR3 = (1<<26),
} LocationCapabilitiesBits;
typedef uint8_t LocationQwesFeatureType;
typedef enum {
@@ -395,29 +347,10 @@ typedef enum {
// This indicates VEPP license bundle is enabled. VEPP
// bundle include Carrier Phase and SV Polynomial features.
LOCATION_QWES_FEATURE_TYPE_VPE,
// This indicates DGNSS license is enabled.
LOCATION_QWES_FEATURE_TYPE_DGNSS,
// This indicates DLP feature is enabled by QESDK APP
// license
LOCATION_QWES_FEATURE_TYPE_DLP_QESDK,
// This indicates wifi RSSI positioning is
// enabled by QWES license.
LOCATION_QWES_FEATURE_TYPE_RSSI_POSITIONING,
// This indicates wifi RTT positioning is
// enabled by QWES license.
LOCATION_QWES_FEATURE_TYPE_RTT_POSITIONING,
// Max value
LOCATION_QWES_FEATURE_TYPE_MAX
} LocationQwesFeatureTypes;
typedef uint64_t LocationHwCapabilitiesMask;
typedef enum {
// This indicates wifi HW has RSSI capability.
LOCATION_WIFI_CAPABILITY_RSSI = (1<<0),
// This indicates wifi HW has RTT capability.
LOCATION_WIFI_CAPABILITY_RTT = (1<<1)
} LocationHwCapabilitiesBits;
typedef enum {
LOCATION_TECHNOLOGY_TYPE_GNSS = 0,
} LocationTechnologyType;
@@ -2134,11 +2067,4 @@ typedef struct {
uint64_t hlosQtimer5;
} GnssLatencyInfo;
enum {
NON_EMERGENCY_ODCPI = (1<<0),
EMERGENCY_ODCPI = (1<<1)
} OdcpiCallbackTypeMaskBits;
typedef uint16_t OdcpiCallbackTypeMask;
#endif /* LOCATIONDATATYPES_H */

View File

@@ -26,41 +26,6 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
Changes from Qualcomm Innovation Center are provided under the following license:
Copyright (c) 2022, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the
disclaimer below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Qualcomm Innovation Center, Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LOCATION_INTERFACE_H
#define LOCATION_INTERFACE_H
@@ -114,9 +79,7 @@ struct GnssInterface {
void (*getDebugReport)(GnssDebugReport& report);
void (*updateConnectionStatus)(bool connected, int8_t type, bool roaming,
NetworkHandle networkHandle, std::string& apn);
void (*odcpiInit)(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority,
OdcpiCallbackTypeMask typeMask);
void (*deRegisterOdcpi)(OdcpiPrioritytype priority, OdcpiCallbackTypeMask typeMask);
void (*odcpiInit)(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority);
void (*odcpiInject)(const Location& location);
void (*blockCPI)(double latitude, double longitude, float accuracy,
int blockDurationMsec, double latLonDiffThreshold);

View File

@@ -141,11 +141,8 @@ public:
unordered_set<KEY>* goneKeys, unordered_set<VAL>* goneVals) {
for (auto key : keys) {
auto iter = mMap.find(key);
if (iter != mMap.end()) {
KEY goneKey = iter->first;
if (trimOrRemove(iter, rVals, goneVals) && nullptr != goneKeys) {
goneKeys->insert(goneKey);
}
if (iter != mMap.end() && trimOrRemove(iter, rVals, goneVals) && nullptr != goneKeys) {
goneKeys->insert(iter->first);
}
}
}

View File

@@ -2341,17 +2341,10 @@ typedef std::function<void(const OdcpiRequestInfo& request)> OdcpiRequestCallbac
/* ODCPI callback priorities*/
enum OdcpiPrioritytype {
//ODCPI callback registered by AFW via IGNSS AIDL has LOW priority
ODCPI_HANDLER_PRIORITY_LOW,
ODCPI_HANDLER_PRIORITY_DEFAULT = ODCPI_HANDLER_PRIORITY_LOW,
//ODCPI callback registered by IzatProvider on LE/KaiOS has medium priority
ODCPI_HANDLER_PRIORITY_MEDIUM,
//Non emergency ODCPI callback registered by IzatManager for RTT position injection
//has high priority
ODCPI_HANDLER_PRIORITY_HIGH
};
/*
* Callback with AGNSS(IpV4) status information.
*
@@ -2429,13 +2422,6 @@ typedef uint64_t NetworkHandle;
#define NETWORK_HANDLE_UNKNOWN ~0
#define MAX_NETWORK_HANDLES 10
typedef enum {
LOC_FEATURE_STATUS_UNKNOWN = 0,
LOC_FEATURE_STATUS_NONE = 1,
LOC_FEATURE_STATUS_OK = 2,
LOC_FEATURE_STATUS_EXPIRED = 3
} LocFeatureStatus;
#ifdef __cplusplus
}
#endif /* __cplusplus */

41
gpt-utils/Android.bp Normal file
View File

@@ -0,0 +1,41 @@
//
// 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.
//
cc_library {
name: "libgptutils.xiaomi_sm8350",
vendor: true,
recovery_available: true,
shared_libs: [
"libcutils",
"liblog",
"libz",
],
cflags: [
"-Wall",
"-Werror",
"-D_BSG_FRAMEWORK_KERNEL_HEADERS",
],
srcs: [
"gpt-utils.cpp",
"recovery-ufs-bsg.cpp",
],
owner: "qti",
header_libs: [
"generated_kernel_headers",
],
export_include_dirs: ["."],
}

1520
gpt-utils/gpt-utils.cpp Normal file

File diff suppressed because it is too large Load Diff

195
gpt-utils/gpt-utils.h Normal file
View File

@@ -0,0 +1,195 @@
/*
* Copyright (c) 2013,2016,2020 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __GPT_UTILS_H__
#define __GPT_UTILS_H__
#include <vector>
#include <string>
#include <map>
#ifdef __cplusplus
extern "C" {
#endif
#include <unistd.h>
#include <stdlib.h>
/******************************************************************************
* GPT HEADER DEFINES
******************************************************************************/
#define GPT_SIGNATURE "EFI PART"
#define HEADER_SIZE_OFFSET 12
#define HEADER_CRC_OFFSET 16
#define PRIMARY_HEADER_OFFSET 24
#define BACKUP_HEADER_OFFSET 32
#define FIRST_USABLE_LBA_OFFSET 40
#define LAST_USABLE_LBA_OFFSET 48
#define PENTRIES_OFFSET 72
#define PARTITION_COUNT_OFFSET 80
#define PENTRY_SIZE_OFFSET 84
#define PARTITION_CRC_OFFSET 88
#define TYPE_GUID_OFFSET 0
#define TYPE_GUID_SIZE 16
#define PTN_ENTRY_SIZE 128
#define UNIQUE_GUID_OFFSET 16
#define FIRST_LBA_OFFSET 32
#define LAST_LBA_OFFSET 40
#define ATTRIBUTE_FLAG_OFFSET 48
#define PARTITION_NAME_OFFSET 56
#define MAX_GPT_NAME_SIZE 72
/******************************************************************************
* AB RELATED DEFINES
******************************************************************************/
//Bit 48 onwords in the attribute field are the ones where we are allowed to
//store our AB attributes.
#define AB_FLAG_OFFSET (ATTRIBUTE_FLAG_OFFSET + 6)
#define GPT_DISK_INIT_MAGIC 0xABCD
#define AB_PARTITION_ATTR_SLOT_ACTIVE (0x1<<2)
#define AB_PARTITION_ATTR_BOOT_SUCCESSFUL (0x1<<6)
#define AB_PARTITION_ATTR_UNBOOTABLE (0x1<<7)
#define AB_SLOT_ACTIVE_VAL 0x3F
#define AB_SLOT_INACTIVE_VAL 0x0
#define AB_SLOT_ACTIVE 1
#define AB_SLOT_INACTIVE 0
#define AB_SLOT_A_SUFFIX "_a"
#define AB_SLOT_B_SUFFIX "_b"
#define PTN_XBL "xbl"
#define PTN_XBL_CFG "xbl_config"
#define PTN_MULTIIMGOEM "multiimgoem"
#define PTN_MULTIIMGQTI "multiimgqti"
#define PTN_SWAP_LIST PTN_XBL, PTN_XBL_CFG, PTN_MULTIIMGOEM, PTN_MULTIIMGQTI, "sbl1", "rpm", "tz", "aboot", "abl", "hyp", "lksecapp", "keymaster", "cmnlib", "cmnlib32", "cmnlib64", "pmic", "apdp", "devcfg", "hosd", "keystore", "msadp", "mdtp", "mdtpsecapp", "dsp", "aop", "qupfw", "vbmeta", "dtbo", "imagefv", "ImageFv", "uefisecapp", "vm-bootsys", "shrm", "cpucp", "featenabler", "vbmeta_system"
#define AB_PTN_LIST PTN_SWAP_LIST, "boot", "vendor_boot", "system", "system_ext", "product", "vendor", "vendor_dlkm", "odm", "modem", "bluetooth"
#define BOOT_DEV_DIR "/dev/block/bootdevice/by-name"
/******************************************************************************
* HELPER MACROS
******************************************************************************/
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
/******************************************************************************
* TYPES
******************************************************************************/
enum boot_update_stage {
UPDATE_MAIN = 1,
UPDATE_BACKUP,
UPDATE_FINALIZE
};
enum gpt_instance {
PRIMARY_GPT = 0,
SECONDARY_GPT
};
enum boot_chain {
NORMAL_BOOT = 0,
BACKUP_BOOT
};
struct gpt_disk {
//GPT primary header
uint8_t *hdr;
//primary header crc
uint32_t hdr_crc;
//GPT backup header
uint8_t *hdr_bak;
//backup header crc
uint32_t hdr_bak_crc;
//Partition entries array
uint8_t *pentry_arr;
//Partition entries array for backup table
uint8_t *pentry_arr_bak;
//Size of the pentry array
uint32_t pentry_arr_size;
//Size of each element in the pentry array
uint32_t pentry_size;
//CRC of the partition entry array
uint32_t pentry_arr_crc;
//CRC of the backup partition entry array
uint32_t pentry_arr_bak_crc;
//Path to block dev representing the disk
char devpath[PATH_MAX];
//Block size of disk
uint32_t block_size;
uint32_t is_initialized;
};
/******************************************************************************
* FUNCTION PROTOTYPES
******************************************************************************/
int prepare_boot_update(enum boot_update_stage stage);
//GPT disk methods
struct gpt_disk* gpt_disk_alloc();
//Free previously allocated gpt_disk struct
void gpt_disk_free(struct gpt_disk *disk);
//Get the details of the disk holding the partition whose name
//is passed in via dev
int gpt_disk_get_disk_info(const char *dev, struct gpt_disk *disk);
//Get pointer to partition entry from a allocated gpt_disk structure
uint8_t* gpt_disk_get_pentry(struct gpt_disk *disk,
const char *partname,
enum gpt_instance instance);
//Update the crc fields of the modified disk structure
int gpt_disk_update_crc(struct gpt_disk *disk);
//Write the contents of struct gpt_disk back to the actual disk
int gpt_disk_commit(struct gpt_disk *disk);
//Return if the current device is UFS based or not
int gpt_utils_is_ufs_device();
//Swtich betwieen using either the primary or the backup
//boot LUN for boot. This is required since UFS boot partitions
//cannot have a backup GPT which is what we use for failsafe
//updates of the other 'critical' partitions. This function will
//not be invoked for emmc targets and on UFS targets is only required
//to be invoked for XBL.
//
//The algorithm to do this is as follows:
//- Find the real block device(eg: /dev/block/sdb) that corresponds
// to the /dev/block/bootdevice/by-name/xbl(bak) symlink
//
//- Once we have the block device 'node' name(sdb in the above example)
// use this node to to locate the scsi generic device that represents
// it by checking the file /sys/block/sdb/device/scsi_generic/sgY
//
//- Once we locate sgY we call the query ioctl on /dev/sgy to switch
//the boot lun to either LUNA or LUNB
int gpt_utils_set_xbl_boot_partition(enum boot_chain chain);
//Given a vector of partition names as a input and a reference to a map,
//populate the map to indicate which physical disk each of the partitions
//sits on. The key in the map is the path to the block device where the
//partiton lies and the value is a vector of strings indicating which of
//the passed in partiton names sits on that device.
int gpt_utils_get_partition_map(std::vector<std::string>& partition_list,
std::map<std::string,std::vector<std::string>>& partition_map);
#ifdef __cplusplus
}
#endif
#endif /* __GPT_UTILS_H__ */

View File

@@ -0,0 +1,255 @@
/*
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#define LOG_TAG "recovery_ufs"
#include "recovery-ufs-bsg.h"
#ifndef _BSG_FRAMEWORK_KERNEL_HEADERS
#ifndef _GENERIC_KERNEL_HEADERS
#include <scsi/ufs/ioctl.h>
#include <scsi/ufs/ufs.h>
#endif
#endif
//Size of the buffer that needs to be passed to the UFS ioctl
#define UFS_ATTR_DATA_SIZE 32
#ifdef _BSG_FRAMEWORK_KERNEL_HEADERS
static int get_ufs_bsg_dev(void)
{
DIR *dir;
struct dirent *ent;
int ret = -ENODEV;
if ((dir = opendir ("/dev")) != NULL) {
/* read all the files and directories within directory */
while ((ent = readdir(dir)) != NULL) {
if (!strcmp(ent->d_name, "ufs-bsg") ||
!strcmp(ent->d_name, "ufs-bsg0")) {
snprintf(ufs_bsg_dev, FNAME_SZ, "/dev/%s", ent->d_name);
ret = 0;
break;
}
}
if (ret)
ALOGE("could not find the ufs-bsg dev\n");
closedir (dir);
} else {
/* could not open directory */
ALOGE("could not open /dev (error no: %d)\n", errno);
ret = -EINVAL;
}
return ret;
}
int ufs_bsg_dev_open(void)
{
int ret;
if (!fd_ufs_bsg) {
fd_ufs_bsg = open(ufs_bsg_dev, O_RDWR);
ret = errno;
if (fd_ufs_bsg < 0) {
ALOGE("Unable to open %s (error no: %d)",
ufs_bsg_dev, errno);
fd_ufs_bsg = 0;
return ret;
}
}
return 0;
}
void ufs_bsg_dev_close(void)
{
if (fd_ufs_bsg) {
close(fd_ufs_bsg);
fd_ufs_bsg = 0;
}
}
static int ufs_bsg_ioctl(int fd, struct ufs_bsg_request *req,
struct ufs_bsg_reply *rsp, __u8 *buf, __u32 buf_len,
enum bsg_ioctl_dir dir)
{
int ret;
struct sg_io_v4 sg_io{};
sg_io.guard = 'Q';
sg_io.protocol = BSG_PROTOCOL_SCSI;
sg_io.subprotocol = BSG_SUB_PROTOCOL_SCSI_TRANSPORT;
sg_io.request_len = sizeof(*req);
sg_io.request = (__u64)req;
sg_io.response = (__u64)rsp;
sg_io.max_response_len = sizeof(*rsp);
if (dir == BSG_IOCTL_DIR_FROM_DEV) {
sg_io.din_xfer_len = buf_len;
sg_io.din_xferp = (__u64)(buf);
} else {
sg_io.dout_xfer_len = buf_len;
sg_io.dout_xferp = (__u64)(buf);
}
ret = ioctl(fd, SG_IO, &sg_io);
if (ret)
ALOGE("%s: Error from sg_io ioctl (return value: %d, error no: %d, reply result from LLD: %d\n)",
__func__, ret, errno, rsp->result);
if (sg_io.info || rsp->result) {
ALOGE("%s: Error from sg_io info (check sg info: device_status: 0x%x, transport_status: 0x%x, driver_status: 0x%x, reply result from LLD: %d\n)",
__func__, sg_io.device_status, sg_io.transport_status,
sg_io.driver_status, rsp->result);
ret = -EAGAIN;
}
return ret;
}
static void compose_ufs_bsg_query_req(struct ufs_bsg_request *req, __u8 func,
__u8 opcode, __u8 idn, __u8 index, __u8 sel,
__u16 length)
{
struct utp_upiu_header *hdr = &req->upiu_req.header;
struct utp_upiu_query *qr = &req->upiu_req.qr;
req->msgcode = UTP_UPIU_QUERY_REQ;
hdr->dword_0 = DWORD(UTP_UPIU_QUERY_REQ, 0, 0, 0);
hdr->dword_1 = DWORD(0, func, 0, 0);
hdr->dword_2 = DWORD(0, 0, length >> 8, (__u8)length);
qr->opcode = opcode;
qr->idn = idn;
qr->index = index;
qr->selector = sel;
qr->length = htobe16(length);
}
static int ufs_query_attr(int fd, __u32 value,
__u8 func, __u8 opcode, __u8 idn,
__u8 index, __u8 sel)
{
struct ufs_bsg_request req{};
struct ufs_bsg_reply rsp{};
enum bsg_ioctl_dir dir = BSG_IOCTL_DIR_FROM_DEV;
int ret = 0;
if (opcode == QUERY_REQ_OP_WRITE_DESC || opcode == QUERY_REQ_OP_WRITE_ATTR)
dir = BSG_IOCTL_DIR_TO_DEV;
req.upiu_req.qr.value = htobe32(value);
compose_ufs_bsg_query_req(&req, func, opcode, idn, index, sel, 0);
ret = ufs_bsg_ioctl(fd, &req, &rsp, 0, 0, dir);
if (ret)
ALOGE("%s: Error from ufs_bsg_ioctl (return value: %d, error no: %d\n)",
__func__, ret, errno);
return ret;
}
int32_t set_boot_lun(char *sg_dev __unused,uint8_t lun_id)
{
int32_t ret;
__u32 boot_lun_id = lun_id;
ret = get_ufs_bsg_dev();
if (ret)
return ret;
ALOGV("Found the ufs bsg dev: %s\n", ufs_bsg_dev);
ret = ufs_bsg_dev_open();
if (ret)
return ret;
ALOGV("Opened ufs bsg dev: %s\n", ufs_bsg_dev);
ret = ufs_query_attr(fd_ufs_bsg, boot_lun_id, QUERY_REQ_FUNC_STD_WRITE,
QUERY_REQ_OP_WRITE_ATTR, QUERY_ATTR_IDN_BOOT_LU_EN, 0, 0);
if (ret) {
ALOGE("Error requesting ufs attr idn %d via query ioctl (return value: %d, error no: %d)",
QUERY_ATTR_IDN_BOOT_LU_EN, ret, errno);
goto out;
}
out:
ufs_bsg_dev_close();
return ret;
}
#endif
#ifndef _BSG_FRAMEWORK_KERNEL_HEADERS
int32_t set_boot_lun(char *sg_dev, uint8_t boot_lun_id)
{
#ifndef _GENERIC_KERNEL_HEADERS
int fd = -1;
int rc;
struct ufs_ioctl_query_data *data = NULL;
size_t ioctl_data_size = sizeof(struct ufs_ioctl_query_data) + UFS_ATTR_DATA_SIZE;
data = (struct ufs_ioctl_query_data*)malloc(ioctl_data_size);
if (!data) {
fprintf(stderr, "%s: Failed to alloc query data struct\n",
__func__);
goto error;
}
memset(data, 0, ioctl_data_size);
data->opcode = UPIU_QUERY_OPCODE_WRITE_ATTR;
data->idn = QUERY_ATTR_IDN_BOOT_LU_EN;
data->buf_size = UFS_ATTR_DATA_SIZE;
data->buffer[0] = boot_lun_id;
fd = open(sg_dev, O_RDWR);
if (fd < 0) {
fprintf(stderr, "%s: Failed to open %s(%s)\n",
__func__,
sg_dev,
strerror(errno));
goto error;
}
rc = ioctl(fd, UFS_IOCTL_QUERY, data);
if (rc) {
fprintf(stderr, "%s: UFS query ioctl failed(%s)\n",
__func__,
strerror(errno));
goto error;
}
close(fd);
free(data);
return 0;
error:
if (fd >= 0)
close(fd);
if (data)
free(data);
return -1;
#else
return 0;
#endif
}
#endif

View File

@@ -0,0 +1,131 @@
#ifndef __RECOVERY_UFS_BSG_H__
#define __RECOVERY_UFS_BSG_H__
/*
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <linux/bsg.h>
#include <scsi/scsi_bsg_ufs.h>
#include <endian.h>
#include <dirent.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#ifdef ANDROID
#include "cutils/log.h"
#endif
#ifdef OE
#include <syslog.h>
#define LOGI(...) syslog(LOG_NOTICE, "INFO:" __VA_ARGS__)
#define LOGV(...) syslog(LOG_NOTICE,"VERB:" __VA_ARGS__)
#define LOGD(...) syslog(LOG_DEBUG,"DBG:" __VA_ARGS__)
#define LOGE(...) syslog(LOG_ERR,"ERR:" __VA_ARGS__)
#define LOGW(...) syslog(LOG_WARNING,"WRN:" __VA_ARGS__)
#define strlcat(d,s,l) snprintf(d+strlen(d),l,"%s",s)
#endif
#define FNAME_SZ 64
#define SG_IO 0x2285
#define DWORD(b3, b2, b1, b0) htobe32((b3 << 24) | (b2 << 16) |\
(b1 << 8) | b0)
/* UFS BSG device nodes */
char ufs_bsg_dev[FNAME_SZ] = "/dev/ufs-bsg";
int fd_ufs_bsg;
int32_t set_ufs_lun(uint8_t lun_id);
#ifdef _BSG_FRAMEWORK_KERNEL_HEADERS
/* UPIU Transaction Codes */
enum {
UTP_UPIU_NOP_OUT = 0x00,
UTP_UPIU_COMMAND = 0x01,
UTP_UPIU_DATA_OUT = 0x02,
UTP_UPIU_TASK_REQ = 0x04,
UTP_UPIU_QUERY_REQ = 0x16,
};
/* UPIU Query Function field */
enum {
QUERY_REQ_FUNC_STD_READ = 0x01,
QUERY_REQ_FUNC_STD_WRITE = 0x81,
};
enum query_req_opcode {
QUERY_REQ_OP_READ_DESC = 0x1,
QUERY_REQ_OP_WRITE_DESC = 0x2,
QUERY_REQ_OP_READ_ATTR = 0x3,
QUERY_REQ_OP_WRITE_ATTR = 0x4,
QUERY_REQ_OP_READ_FLAG = 0x5,
QUERY_REQ_OP_SET_FLAG = 0x6,
QUERY_REQ_OP_CLEAR_FLAG = 0x7,
QUERY_REQ_OP_TOGGLE_FLAG = 0x8,
};
enum query_desc_idn {
QUERY_DESC_IDN_DEVICE = 0x0,
QUERY_DESC_IDN_UNIT = 0x2,
QUERY_DESC_IDN_GEOMETRY = 0x7,
};
enum query_desc_size {
QUERY_DESC_SIZE_DEVICE = 0x40,
QUERY_DESC_SIZE_GEOMETRY = 0x48,
QUERY_DESC_SIZE_UNIT = 0x23,
};
enum bsg_ioctl_dir {
BSG_IOCTL_DIR_TO_DEV,
BSG_IOCTL_DIR_FROM_DEV,
};
enum query_attr_idn {
QUERY_ATTR_IDN_BOOT_LU_EN = 0x00,
QUERY_ATTR_IDN_RESERVED = 0x01,
QUERY_ATTR_IDN_POWER_MODE = 0x02,
QUERY_ATTR_IDN_ACTIVE_ICC_LVL = 0x03,
};
#endif /* _BSG_FRAMEWORK_KERNEL_HEADERS */
#endif /* __RECOVERY_UFS_BSG_H__ */

View File

@@ -0,0 +1,103 @@
<!-- Copyright (c) 2017, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of The Linux Foundation nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<compatibility-matrix version="1.0" type="device">
<hal format="hidl" optional="false">
<name>android.frameworks.schedulerservice</name>
<version>1.0</version>
<interface>
<name>ISchedulingPolicyService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="false">
<name>android.frameworks.sensorservice</name>
<version>1.0</version>
<interface>
<name>ISensorManager</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="false">
<name>android.hidl.allocator</name>
<version>1.0</version>
<interface>
<name>IAllocator</name>
<instance>ashmem</instance>
</interface>
</hal>
<hal format="hidl" optional="false">
<name>android.hidl.manager</name>
<version>1.0</version>
<interface>
<name>IServiceManager</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="false">
<name>android.hidl.memory</name>
<version>1.0</version>
<interface>
<name>IMapper</name>
<instance>ashmem</instance>
</interface>
</hal>
<hal format="hidl" optional="false">
<name>android.hidl.token</name>
<version>1.0</version>
<interface>
<name>ITokenManager</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="false">
<name>android.system.wifi.keystore</name>
<version>1.0</version>
<interface>
<name>IKeystore</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.qti.hardware.sigma_miracast</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>Isigma_miracast</name>
<instance>sigmahal</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.qti.hardware.qccsyshal</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>IQccsyshal</name>
<instance>qccsyshal</instance>
</interface>
</hal>
</compatibility-matrix>

View File

@@ -25,7 +25,8 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<manifest version="1.0" type="device" target-level="6">
<manifest version="1.0" type="device" target-level="5">
<kernel target-level="5"/>
<!-- CapabilityConfigStore HAL Service -->
<hal format="hidl">
<name>vendor.qti.hardware.capabilityconfigstore</name>
@@ -57,12 +58,29 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<hal format="hidl">
<name>android.hardware.soundtrigger</name>
<transport>hwbinder</transport>
<version>2.0</version>
<version>2.1</version>
<version>2.2</version>
<version>2.3</version>
<interface>
<name>ISoundTriggerHw</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>android.hardware.media.omx</name>
<transport>hwbinder</transport>
<impl level="generic"></impl>
<version>1.0</version>
<interface>
<name>IOmx</name>
<instance>default</instance>
</interface>
<interface>
<name>IOmxStore</name>
<instance>default</instance>
</interface>
</hal>
<!-- VPP Service -->
<hal format="hidl">
<name>vendor.qti.hardware.vpp</name>
@@ -386,7 +404,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<hal format="hidl">
<name>android.hardware.tetheroffload.control</name>
<transport>hwbinder</transport>
<version>1.1</version>
<version>1.0</version>
<interface>
<name>IOffloadControl</name>
<instance>default</instance>
@@ -431,6 +449,16 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<instance>default</instance>
</interface>
</hal>
<!-- Perf HAL service -->
<hal format="hidl">
<name>vendor.qti.hardware.perf</name>
<transport>hwbinder</transport>
<version>2.2</version>
<interface>
<name>IPerf</name>
<instance>default</instance>
</interface>
</hal>
<!-- bluetooth -->
<hal format="hidl">
<name>android.hardware.bluetooth</name>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,73 @@
<compatibility-matrix version="1.0" type="framework">
<hal format="hidl" optional="true">
<name>com.fingerprints.extension</name>
<version>3.0</version>
<interface>
<name>IFingerprintNavigation</name>
<instance>default</instance>
</interface>
<interface>
<name>IFingerprintSensorTest</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.cameraperf</name>
<version>1.0</version>
<interface>
<name>IMiCameraPerfService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.campostproc</name>
<version>1.0</version>
<interface>
<name>IMiPostProcService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl">
<name>vendor.xiaomi.hardware.citsensorservice</name>
<transport>hwbinder</transport>
<version>1.1</version>
<interface>
<name>ICitSensorService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.dtool</name>
<version>1.0</version>
<interface>
<name>IDtool</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.fingerprintextension</name>
<version>1.0</version>
<interface>
<name>IXiaomiFingerprint</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.fx.tunnel</name>
<version>1.0</version>
<interface>
<name>IMiFxTunnel</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.mlipay</name>
<version>1.1</version>
<interface>
<name>IMlipayService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true">
<name>vendor.xiaomi.hardware.misys</name>
<transport>hwbinder</transport>

10
lineage.dependencies Normal file
View File

@@ -0,0 +1,10 @@
[
{
"repository": "android_kernel_xiaomi_sm8350",
"target_path": "kernel/xiaomi/sm8350"
},
{
"repository": "android_hardware_xiaomi",
"target_path": "hardware/xiaomi"
}
]

View File

@@ -103,8 +103,8 @@
-->
<MediaCodecs>
<Include href="media_codecs_c2_audio.xml" />
<Settings>
<Domain name="telephony" enabled="true" />
<Setting name="max-video-encoder-input-buffers" value="11" />
</Settings>
<Decoders>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018-2021 crDroid Android Project
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright (C) 2015-2020 The Linux Foundation. All rights reserved.
Not a contribution.
Copyright (C) 2012 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.
@@ -14,12 +15,9 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0" >
<path
android:fillColor="?android:attr/colorControlNormal"
android:pathData="M19,13H5V11H19V13Z" />
</vector>
<Included>
<Decoders>
<MediaCodec name="OMX.google.opus.decoder" type="audio/opus" update="true" rank="100"/>
<!-- SimpleOMXComponet based software decoder-->
</Decoders>
</Included>

View File

@@ -84,7 +84,6 @@
<MediaCodecs>
<Settings>
<Domain name="telephony" enabled="true" />
<Setting name="max-video-encoder-input-buffers" value="11" />
</Settings>
<Decoders>

View File

@@ -76,7 +76,6 @@
<MediaCodecs>
<Settings>
<Domain name="telephony" enabled="true" />
<Setting name="max-video-encoder-input-buffers" value="11" />
</Settings>
<Decoders>

View File

@@ -21,6 +21,15 @@
<!-- The restoring is handled by modem if it is true-->
<bool name="skip_restoring_network_selection">true</bool>
<!-- Set to true to add links to Cell Broadcast app from Settings and MMS app. -->
<bool name="config_cellBroadcastAppLinks">true</bool>
<!-- M user agent string -->
<string name="config_mms_user_agent">Android-Mms/2.0</string>
<!-- MMS user agent prolfile url -->
<string name="config_mms_user_agent_profile_url">http://www.google.com/oha/rdf/ua-profile-kila.xml</string>
<!-- This string array should be overridden by the device to present a list of network
attributes. This is used by the connectivity manager to decide which networks can coexist
based on the hardware -->
@@ -120,11 +129,6 @@
<!-- Flag specifying whether VoLTE is available on device -->
<bool name="config_device_vt_available">true</bool>
<!-- Flag specifying whether VT should be available for carrier: independent of
carrier provisioning. If false: hard disabled. If true: then depends on carrier
provisioning, availability etc -->
<bool name="config_carrier_vt_available">true</bool>
<!-- Flag specifying whether WFC over IMS is available on device -->
<bool name="config_device_wfc_ims_available">true</bool>
@@ -138,11 +142,6 @@
provisioning, availability etc -->
<bool name="config_carrier_wfc_ims_available">true</bool>
<!-- When true, indicates that the vendor's IMS implementation requires a workaround when
sending a request to enable or disable the camera while the video session is also
paused. -->
<bool name="config_useVideoPauseWorkaround">true</bool>
<!-- IWLAN data service package name to bind to by default. If none is specified in an overlay, an
empty string is passed in -->
<string name="config_wlan_data_service_package">vendor.qti.iwlan</string>
@@ -210,9 +209,6 @@
<!-- Should the pinner service pin the Home application? -->
<bool name="config_pinnerHomeApp">true</bool>
<!-- True if camera app should be pinned via Pinner Service -->
<bool name="config_pinnerCameraApp">false</bool>
<!-- Enable doze mode
ComponentName of a dream to show whenever the system would otherwise have gone to sleep. -->
<string translatable="false" name="config_dozeComponent">com.android.systemui/com.android.systemui.doze.DozeService</string>
@@ -288,6 +284,12 @@
<!-- Whether the new Auto Selection Network UI should be shown -->
<bool name="config_enableNewAutoSelectNetworkUI">true</bool>
<!-- Disables pocket mode lock -->
<bool name="config_pocketModeSupported">false</bool>
<!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
<bool name="config_unplugTurnsOnScreen">true</bool>
<!-- Whether devices suports in-display fingerprint when screen is off -->
<bool name="config_supportScreenOffUdfps">true</bool>
@@ -296,25 +298,4 @@
<!-- Path to fast charging status file to detect whether an oem fast charger is active -->
<string name="config_oemFastChargerStatusPath" translatable="false">/sys/class/qcom-battery/fastchg_mode</string>
<!-- Control whether the pickup gesture is enabled by default. This value will be used
during initialization when the setting is still null. -->
<bool name="config_dozePickupGestureEnabled">false</bool>
<!-- Determines whether the shell features all run on another thread. -->
<bool name="config_enableShellMainThread">true</bool>
<!-- SQLite -->
<string name="db_default_journal_mode">MEMORY</string>
<string name="db_default_sync_mode">OFF</string>
<string name="db_wal_sync_mode">OFF</string>
<!-- Smart 5G -->
<bool name="config_supportSmart5G">true</bool>
<!-- Whether the device supports Smart Pixels -->
<bool name="config_supportSmartPixels">true</bool>
<!-- PowerOffAlarmService -->
<bool name="config_powerOffAlarmEnabled">true</bool>
</resources>

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* Copyright (c) 2015, 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.
*/
-->
<resources>
<!-- Set the automatic brightness mode on by default -->
<bool name="def_screen_brightness_automatic_mode">true</bool>
<!-- Speed up the animations -->
<fraction name="def_window_animation_scale">80%</fraction>
<fraction name="def_window_transition_scale">80%</fraction>
</resources>

View File

@@ -64,6 +64,9 @@
<!-- If not zero, limits the internal screen recorder's framerate to the set value. -->
<integer name="config_screenRecorderMaxFramerate">120</integer>
<!-- The CPU temperature divider, if needed -->
<integer name="config_cpuTempDivider" translatable="false">1000</integer>
<!-- FPSInfoService FPS node file path -->
<string name="config_fpsInfoSysNode" translatable="false">/sys/class/drm/sde-crtc-0/measured_fps</string>
<!-- Whether show refresh rate QS tile -->
<bool name="config_showRefreshRateQsTile">true</bool>
</resources>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2023-24 Paranoid Android
SPDX-License-Identifier: Apache-2.0
-->
<resources>
<!-- Dolby Atmos -->
<string-array name="dolby_profile_entries">
<item>@string/dolby_profile_dynamic</item>
<item>@string/dolby_profile_video</item>
<item>@string/dolby_profile_music</item>
<item>@string/dolby_profile_game</item>
<item>@string/dolby_profile_voice</item>
</string-array>
<string-array name="dolby_profile_values">
<item>0</item>
<item>1</item>
<item>2</item>
<item>8</item>
<item>9</item>
</string-array>
</resources>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2023-24 Paranoid Android
SPDX-License-Identifier: Apache-2.0
-->
<resources>
<!-- Dolby profiles -->
<string name="dolby_profile_dynamic">Dynamic</string>
<string name="dolby_profile_video">Movie/Video</string>
<string name="dolby_profile_music">Music</string>
<string name="dolby_profile_game">Game</string>
<string name="dolby_profile_voice">Voice</string>
</resources>

View File

@@ -35,19 +35,28 @@
here. If this settings supports only 2 levels, for example, then the default intensity
should be either LOW (1) or HIGH (3).
-->
<integer name="config_vibration_supported_intensity_levels">2</integer>
<integer name="config_vibration_supported_intensity_levels">3</integer>
<!-- Show battery cycle count -->
<bool name="config_show_battery_cycle_count" translatable="false">true</bool>
<!-- Whether to show custom screen resolution settings -->
<bool name="config_show_custom_screen_resolution_switch">true</bool>
<!-- Max network scan search time in seconds -->
<integer name="config_network_scan_helper_max_search_time_sec">254</integer>
<!-- Show Force LTE_CA toggle -->
<bool name="config_showForceLteCaToggle" translatable="false">true</bool>
<!-- Whether to show peak refresh rate in display settings -->
<bool name="config_show_peak_refresh_rate_switch">true</bool>
<!-- Whether to show min refresh rate in display settings -->
<bool name="config_show_min_refresh_rate_switch">true</bool>
<!-- Show Force LTE_CA toggle -->
<bool name="config_showForceLteCaToggle" translatable="false">true</bool>
<!-- Whether to show double tap ambient settings -->
<bool name="config_supports_double_tap_ambient" translatable="false">true</bool>
<!-- Whether to show volume steps settings -->
<bool name="config_supports_volume_steps" translatable="false">true</bool>

View File

@@ -19,42 +19,4 @@
<!-- String indicating the package name of the device ImsService implementation for RCS. -->
<string name="config_ims_rcs_package" translatable="false">org.codeaurora.ims</string>
<!-- Dynamic routing of emergency calls: trying normal routing if it's available.
Otherwise, emergency routing. -->
<bool name="dynamic_routing_emergency_enabled">true</bool>
<!-- Array of countries that the dynamic routing is supported.
Values should be ISO3166 country codes in lowercase. -->
<string-array name="config_countries_dynamic_routing_emergency_enabled"
translatable="false">
<item>in</item>
<item>il</item>
<item>tw</item>
<item>sg</item>
<item>ch</item>
<item>sk</item>
<item>pl</item>
<item>si</item>
<item>ba</item>
</string-array>
<!-- Array of emergency numbers for dynamic routing.
Values are the tuples of Country ISO, MNC, and numbers. -->
<string-array name="config_dynamic_routing_emergency_numbers"
translatable="false">
<item>in,,101,102,103,108</item>
<item>il,,101,102</item>
<item>tw,,110,119</item>
<item>sg,,995</item>
<item>ch,,1414</item>
<item>gp,,115,119,191,196,197,116000,116111,116117</item>
<item>sk,,159</item>
<item>pl,01,984,985,997,998,999</item>
<item>pl,06,984,985,997,998,999</item>
<item>pl,,986,987,989,991,992,993,994,995,996</item>
<item>re,,115,119,191,196,197,116000,116111,116117</item>
<item>si,,113</item>
<item>ba,,122,123,124</item>
</string-array>
</resources>

View File

@@ -73,74 +73,6 @@
android:permission="ThermalService">
</service>
<activity
android:name=".zram.ZramActivity"
android:label="@string/zram_size_title">
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.battery" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/zram_summary" />
</activity>
<activity
android:name=".charge.ChargeActivity"
android:label="@string/charge_bypass_title">
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.battery" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/charge_bypass_summary" />
</activity>
<activity
android:name=".corecontrol.CoreControlActivity"
android:label="@string/core_control_title">
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.battery" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/core_control_summary" />
</activity>
<activity
android:name=".touchsampling.TouchSamplingSettingsActivity"
android:label="@string/htsr_enable_title"
android:theme="@style/Theme.SubSettingsBase"
android:exported="false">
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.display" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/htsr_enable_summary" />
</activity>
<service
android:name=".touchsampling.TouchSamplingTileService"
android:icon="@drawable/ic_htsr"
android:label="@string/htsr_enable_title"
android:exported="true"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
<activity
android:name=".speaker.ClearSpeakerActivity"
android:label="@string/clear_speaker_title">
@@ -176,74 +108,5 @@
android:permission="RefreshService">
</service>
<service
android:name=".thermal.ThermalTileService"
android:icon="@drawable/ic_thermal"
android:label="@string/thermal_title"
android:exported="true"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action
android:name="android.service.quicksettings.action.QS_TILE"/>
</intent-filter>
</service>
<service
android:name=".display.DcDimmingTileService"
android:exported="true"
android:icon="@drawable/ic_dc_tile"
android:label="@string/dc_dimming_enable_title"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action
android:name="android.service.quicksettings.action.QS_TILE"/>
</intent-filter>
</service>
<activity
android:name=".display.DcDimmingSettingsActivity"
android:label="@string/dc_dimming_enable_title"
android:exported="true"
android:theme="@style/Theme.SubSettingsBase">
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.display" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/dc_dimming_enable_summary" />
</activity>
<activity
android:name=".hbm.HBMActivity"
android:label="@string/hbm_fragment_title"
android:exported="false"
android:theme="@style/Theme.SubSettingsBase">
<intent-filter>
<action android:name="com.android.settings.action.IA_SETTINGS" />
</intent-filter>
<meta-data
android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.display" />
<meta-data
android:name="com.android.settings.summary"
android:resource="@string/hbm_fragment_summary" />
</activity>
<activity
android:name=".hbm.HBMFragment" />
<service
android:name=".hbm.AutoHBMService"
android:exported="false" />
<service
android:name=".hbm.HBMModeTileService"
android:icon="@drawable/ic_hbm_tile"
android:label="@string/hbm_mode_title"
android:exported="true"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
</application>
</manifest>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018-2021 crDroid Android 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="48.0"
android:viewportHeight="48.0" >
<path
android:fillColor="?android:attr/colorControlNormal"
android:pathData="M38.0,26.0L26.0,26.0l0.0,12.0l-4.0,0.0L22.0,26.0L10.0,26.0l0.0,-4.0l12.0,0.0L22.0,10.0l4.0,0.0l0.0,12.0l12.0,0.0l0.0,4.0z" />
</vector>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018-2021 crDroid Android 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24.0dp"
android:height="24.0dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0" >
<path
android:fillColor="?android:attr/colorControlNormal"
android:pathData="M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z" />
</vector>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#fff" android:pathData="M14,8.5A1.5,1.5 0 0,0 12.5,10A1.5,1.5 0 0,0 14,11.5A1.5,1.5 0 0,0 15.5,10A1.5,1.5 0 0,0 14,8.5M14,12.5A1.5,1.5 0 0,0 12.5,14A1.5,1.5 0 0,0 14,15.5A1.5,1.5 0 0,0 15.5,14A1.5,1.5 0 0,0 14,12.5M10,17A1,1 0 0,0 9,18A1,1 0 0,0 10,19A1,1 0 0,0 11,18A1,1 0 0,0 10,17M10,8.5A1.5,1.5 0 0,0 8.5,10A1.5,1.5 0 0,0 10,11.5A1.5,1.5 0 0,0 11.5,10A1.5,1.5 0 0,0 10,8.5M14,20.5A0.5,0.5 0 0,0 13.5,21A0.5,0.5 0 0,0 14,21.5A0.5,0.5 0 0,0 14.5,21A0.5,0.5 0 0,0 14,20.5M14,17A1,1 0 0,0 13,18A1,1 0 0,0 14,19A1,1 0 0,0 15,18A1,1 0 0,0 14,17M21,13.5A0.5,0.5 0 0,0 20.5,14A0.5,0.5 0 0,0 21,14.5A0.5,0.5 0 0,0 21.5,14A0.5,0.5 0 0,0 21,13.5M18,5A1,1 0 0,0 17,6A1,1 0 0,0 18,7A1,1 0 0,0 19,6A1,1 0 0,0 18,5M18,9A1,1 0 0,0 17,10A1,1 0 0,0 18,11A1,1 0 0,0 19,10A1,1 0 0,0 18,9M18,17A1,1 0 0,0 17,18A1,1 0 0,0 18,19A1,1 0 0,0 19,18A1,1 0 0,0 18,17M18,13A1,1 0 0,0 17,14A1,1 0 0,0 18,15A1,1 0 0,0 19,14A1,1 0 0,0 18,13M10,12.5A1.5,1.5 0 0,0 8.5,14A1.5,1.5 0 0,0 10,15.5A1.5,1.5 0 0,0 11.5,14A1.5,1.5 0 0,0 10,12.5M10,7A1,1 0 0,0 11,6A1,1 0 0,0 10,5A1,1 0 0,0 9,6A1,1 0 0,0 10,7M10,3.5A0.5,0.5 0 0,0 10.5,3A0.5,0.5 0 0,0 10,2.5A0.5,0.5 0 0,0 9.5,3A0.5,0.5 0 0,0 10,3.5M10,20.5A0.5,0.5 0 0,0 9.5,21A0.5,0.5 0 0,0 10,21.5A0.5,0.5 0 0,0 10.5,21A0.5,0.5 0 0,0 10,20.5M3,13.5A0.5,0.5 0 0,0 2.5,14A0.5,0.5 0 0,0 3,14.5A0.5,0.5 0 0,0 3.5,14A0.5,0.5 0 0,0 3,13.5M14,3.5A0.5,0.5 0 0,0 14.5,3A0.5,0.5 0 0,0 14,2.5A0.5,0.5 0 0,0 13.5,3A0.5,0.5 0 0,0 14,3.5M14,7A1,1 0 0,0 15,6A1,1 0 0,0 14,5A1,1 0 0,0 13,6A1,1 0 0,0 14,7M21,10.5A0.5,0.5 0 0,0 21.5,10A0.5,0.5 0 0,0 21,9.5A0.5,0.5 0 0,0 20.5,10A0.5,0.5 0 0,0 21,10.5M6,5A1,1 0 0,0 5,6A1,1 0 0,0 6,7A1,1 0 0,0 7,6A1,1 0 0,0 6,5M3,9.5A0.5,0.5 0 0,0 2.5,10A0.5,0.5 0 0,0 3,10.5A0.5,0.5 0 0,0 3.5,10A0.5,0.5 0 0,0 3,9.5M6,9A1,1 0 0,0 5,10A1,1 0 0,0 6,11A1,1 0 0,0 7,10A1,1 0 0,0 6,9M6,17A1,1 0 0,0 5,18A1,1 0 0,0 6,19A1,1 0 0,0 7,18A1,1 0 0,0 6,17M6,13A1,1 0 0,0 5,14A1,1 0 0,0 6,15A1,1 0 0,0 7,14A1,1 0 0,0 6,13Z" />
</vector>

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:tint="?android:attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M23.5,17L18.5,22L15,18.5L16.5,17L18.5,19L22,15.5L23.5,17M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9M12,4.5C17,4.5 21.27,7.61 23,12C22.75,12.65 22.44,13.26 22.08,13.85C21.5,13.5 20.86,13.25 20.18,13.12L20.82,12C19.17,8.64 15.76,6.5 12,6.5C8.24,6.5 4.83,8.64 3.18,12C4.83,15.36 8.24,17.5 12,17.5L13.21,17.43C13.07,17.93 13,18.46 13,19V19.46L12,19.5C7,19.5 2.73,16.39 1,12C2.73,7.61 7,4.5 12,4.5Z" />
</vector>

View File

@@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#000"
android:pathData="M11,4V1H13V4ZM11,23V20H13V23ZM20,13V11H23V13ZM1,13V11H4V13ZM18.7,6.7 L17.3,5.3 19.05,3.5 20.5,4.95ZM4.95,20.5 L3.5,19.05 5.3,17.3 6.7,18.7ZM19.05,20.5 L17.3,18.7 18.7,17.3 20.5,19.05ZM5.3,6.7 L3.5,4.95 4.95,3.5 6.7,5.3ZM12,18Q9.5,18 7.75,16.25Q6,14.5 6,12Q6,9.5 7.75,7.75Q9.5,6 12,6Q14.5,6 16.25,7.75Q18,9.5 18,12Q18,14.5 16.25,16.25Q14.5,18 12,18ZM12,16Q13.675,16 14.838,14.837Q16,13.675 16,12Q16,10.325 14.838,9.162Q13.675,8 12,8Q10.325,8 9.163,9.162Q8,10.325 8,12Q8,13.675 9.163,14.837Q10.325,16 12,16ZM12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Q12,12 12,12Z"/>
</vector>

View File

@@ -1,11 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#000"
android:pathData="M20.22,10l-4.15,0.01c-0.16,-0.01 -0.31,0.02 -0.45,0.08l-0.59,0.26L13.2,6.25c-0.56,-1.26 -2.04,-1.83 -3.3,-1.27s-1.83,2.04 -1.27,3.3l3.3,7.45l-1.87,0.39c-0.19,0.05 -0.99,0.27 -1.36,1.21L8,19.19l6.78,2.67c0.49,0.19 1.05,0.18 1.53,-0.04l5.99,-2.65c0.89,-0.4 1.37,-1.38 1.13,-2.32l-1.36,-5.34C21.85,10.65 21.1,10.04 20.22,10zM21.49,17.34L15.5,20l-4.92,-1.96l4.18,-0.88l-4.3,-9.7c-0.11,-0.25 0,-0.55 0.25,-0.66c0.25,-0.11 0.55,0 0.66,0.25l2.5,5.65l1.61,-0.71L20.13,12L21.49,17.34zM2.06,5.56L1,4.5L4.5,1L8,4.5L6.94,5.56L5.32,3.94C5.11,4.76 5,5.62 5,6.5c0,2.42 0.82,4.65 2.2,6.43L6.13,14C4.49,11.95 3.5,9.34 3.5,6.5c0,-0.92 0.1,-1.82 0.3,-2.68L2.06,5.56z"/>
</vector>

View File

@@ -1,11 +0,0 @@
<!-- drawable/ic_info_outline.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="#000"
android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z" />
</vector>

View File

@@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?android:attr/colorControlNormal"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M17 3H21V5H17V3M17 7H21V9H17V7M17 11H21V13H17.75L17 12.1V11M21 15V17H19C19 16.31 18.9 15.63 18.71 15H21M7 3V5H3V3H7M7 7V9H3V7H7M7 11V12.1L6.25 13H3V11H7M3 15H5.29C5.1 15.63 5 16.31 5 17H3V15M15 13V5C15 3.34 13.66 2 12 2S9 3.34 9 5V13C6.79 14.66 6.34 17.79 8 20S12.79 22.66 15 21 17.66 16.21 16 14C15.72 13.62 15.38 13.28 15 13M12 4C12.55 4 13 4.45 13 5V8H11V5C11 4.45 11.45 4 12 4Z" />
</vector>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/colorAccent"
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"
android:strokeWidth="1"/>
</vector>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?android:attr/colorAccent"
android:pathData="M18,4l2,4h-3l-2,-4h-2l2,4h-3l-2,-4H8l2,4H7L5,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V4h-4z"
android:strokeWidth="1"/>
</vector>

View File

@@ -1,125 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-2021 crDroid Android 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.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/activatedBackgroundIndicator"
android:clipToPadding="false">
<include layout="@layout/settingslib_icon_frame"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:ellipsize="marquee" />
<TextView
android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="10"
android:ellipsize="end" />
<RelativeLayout
android:id="@+id/value_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/summary"
android:layout_alignStart="@android:id/title" >
<TextView
android:id="@+id/value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="1"
android:ellipsize="end" />
<ImageView
android:id="@+id/reset"
android:src="@drawable/ic_custom_seekbar_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_toEndOf="@id/value"
android:layout_centerVertical="true" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/seekbar_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/value_frame"
android:layout_alignStart="@android:id/title" >
<ImageView
android:id="@+id/minus"
android:src="@drawable/ic_custom_seekbar_minus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
<ImageView
android:id="@+id/plus"
android:src="@drawable/ic_custom_seekbar_plus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true" />
<LinearLayout
android:id="@+id/seekbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_toEndOf="@id/minus"
android:layout_toStartOf="@id/plus"
android:layout_centerVertical="true" />
</RelativeLayout>
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="end|center_vertical"
android:paddingStart="16dp"
android:orientation="vertical" />
</LinearLayout>

View File

@@ -25,31 +25,4 @@
<item>1</item>
<item>2</item>
</string-array>
<string-array name="zram_size_entries">
<item>Disabled</item>
<item>2GB</item>
<item>4GB</item>
<item>8GB</item>
<item>Dynamic (default)</item>
</string-array>
<string-array name="zram_size_values">
<item>0</item>
<item>2</item>
<item>4</item>
<item>8</item>
<item>-1</item>
</string-array>
<string-array name="zram_compression_entries">
<item>lz4 (default)</item>
<item>lzo</item>
<item>lzo-rle</item>
<item>zstd</item>
</string-array>
<string-array name="zram_compression_values">
<item>lz4</item>
<item>lzo</item>
<item>lzo-rle</item>
<item>zstd</item>
</string-array>
</resources>

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2016-2021 crDroid Android 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.
-->
<resources>
<!-- Base attributes available to CustomSeekBarPreference. -->
<declare-styleable name="CustomSeekBarPreference">
<attr name="defaultValueText" format="string" />
<attr name="interval" format="integer" />
<attr name="showSign" format="boolean" />
<attr name="units" format="string|reference" />
<attr name="continuousUpdates" format="boolean" />
</declare-styleable>
</resources>

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="custom_seekbar_value">Value: <xliff:g id="v">%s</xliff:g></string>
<string name="custom_seekbar_default_value">by default</string>
<string name="custom_seekbar_default_value_to_set">Default value: <xliff:g id="v">%s</xliff:g>\nLong tap to set</string>
<string name="custom_seekbar_default_value_is_set">Default value is set</string>
</resources>

View File

@@ -25,9 +25,7 @@
<string name="thermal_camera">Camera</string>
<string name="thermal_dialer">Dialer</string>
<string name="thermal_gaming">Gaming</string>
<string name="thermal_navigation">Navigation</string>
<string name="thermal_streaming">Streaming</string>
<string name="thermal_video">Video</string>
<!-- Per-app refresh rate -->
<string name="refresh_title">Per-app refresh rate</string>
@@ -35,7 +33,6 @@
<string name="refresh_default">Default</string>
<string name="refresh_standard">60Hz</string>
<string name="refresh_extreme">120Hz</string>
<string name="refresh_land">60Hz on Landscape</string>
<!-- Doze Strings -->
<string name="doze_brightness_low">Low brightness</string>
@@ -48,66 +45,5 @@
<string name="clear_speaker_title">Clear speaker</string>
<string name="clear_speaker_summary">Play a 30-second audio to clear the speaker</string>
<string name="clear_speaker_description">Run this feature once or twice if you find that your speaker is lightly blocked by dust. Set media volume to maximum.\n\nIf the speaker is blocked heavily, run this feature 2-5 times while shaking your device with the speaker facing downwards.</string>
<!-- HBM settings -->
<string name="hbm_fragment_title">High brightness mode</string>
<string name="hbm_fragment_summary">Settings for HBM</string>
<string name="hbm_mode_title">HBM</string>
<string name="hbm_mode_summary">Enable peak luminance</string>
<string name="auto_hbm_title">Automatic HBM</string>
<string name="auto_hbm_summary">Enable peak luminance based on sunlight</string>
<string name="auto_hbm_threshold_title"></string>
<string name="auto_hbm_threshold_summary">threshold (lux)</string>
<string name="hbm_disable_time_title"></string>
<string name="hbm_disable_time_summary">disable delay (seconds)</string>
<string name="hbm_mode_warning">Long time usage of High brightness mode may damage your display</string>
<!-- DC dimming settings -->
<string name="dc_dimming_enable_title">DC Dimming</string>
<string name="dc_dimming_enable_summary">Reduces eye strain in low light conditions</string>
<string name="dc_dimming_enable_summary_not_supported">DC Dimming is currently not supported by the kernel</string>
<!-- High Touch Polling -->
<string name="htsr_title">Touch Responsiveness</string>
<string name="htsr_enable_title">Increase Touch Responsiveness</string>
<string name="htsr_enable_summary">Increases touch polling rate to decrease latency</string>
<string name="htsr_enable_summary_not_supported">Increase Touch Responsiveness is currently not supported by the kernel</string>
<!-- Zram Settings -->
<string name="zram_size_title">ZRAM size</string>
<string name="zram_size_summary">Configure ZRAM swap size</string>
<string name="zram_disabled">Disabled</string>
<string name="zram_size_dynamic">Dynamic (default)</string>
<string name="zram_size_2gb">2GB</string>
<string name="zram_size_4gb">4GB</string>
<string name="zram_size_8gb">8GB</string>
<string name="zram_summary">Choose which ZRAM settings to apply</string>
<string name="zram_change_applied">ZRAM setting saved (will apply after reboot)</string>
<string name="zram_reboot_recommended">For changes to take effect, please reboot your device</string>
<string name="zram_compression_title">Compression algorithm</string>
<string name="zram_compression_summary">Choose ZRAM compression algorithm</string>
<string name="swappiness_title">Swappiness</string>
<string name="swappiness_summary">Adjust how aggressively the kernel swaps memory pages (default: 60)</string>
<string name="swappiness_value">%1$d</string>
<string name="zram_change_failed">Failed to apply ZRAM settings</string>
<string name="advanced_settings">Advanced settings</string>
<!-- Charge bypass strings -->
<string name="charge_bypass_title">Bypass charging</string>
<string name="charge_bypass_summary">Enable direct charging, bypassing battery</string>
<string name="charge_bypass_warning">Warning: Bypass charging may cause increased device temperature or battery damage. Use with caution.</string>
<string name="charge_bypass_unavailable">Bypass charging is not supported on this device</string>
<!-- Core Control -->
<string name="core_control_title">Core Control</string>
<string name="core_control_summary">Manually enable or disable individual CPU cores</string>
<string name="core_control_description">Advanced CPU control. Turning off cores may save battery or thermal load, but may affect performance and stability.\n\nAt least two little cores must remain online at all times.</string>
<string name="core_0">Core 0 (Little)</string>
<string name="core_1">Core 1 (Little)</string>
<string name="core_2">Core 2 (Little)</string>
<string name="core_3">Core 3 (Little)</string>
<string name="core_4">Core 4 (Big)</string>
<string name="core_5">Core 5 (Big)</string>
<string name="core_6">Core 6 (Big)</string>
<string name="core_7">Core 7 (Prime)</string>
</resources>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:key="bypass_charge"
android:title="@string/charge_bypass_title"
android:summary="@string/charge_bypass_summary"
android:defaultValue="false" />
</PreferenceScreen>

View File

@@ -1,41 +0,0 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/core_control_title">
<SwitchPreference
android:key="core_0"
android:title="@string/core_0" />
<SwitchPreference
android:key="core_1"
android:title="@string/core_1" />
<SwitchPreference
android:key="core_2"
android:title="@string/core_2" />
<SwitchPreference
android:key="core_3"
android:title="@string/core_3" />
<SwitchPreference
android:key="core_4"
android:title="@string/core_4" />
<SwitchPreference
android:key="core_5"
android:title="@string/core_5" />
<SwitchPreference
android:key="core_6"
android:title="@string/core_6" />
<SwitchPreference
android:key="core_7"
android:title="@string/core_7" />
<com.android.settingslib.widget.FooterPreference
android:key="footer"
android:title="@string/core_control_description"
android:selectable="false" />
</PreferenceScreen>

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 The CyanogenMod Project
2018-2019 The LineageOS 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/dc_dimming_enable_title">
<SwitchPreference
android:key="dc_dimming_enable"
android:defaultValue="false"
android:icon="@drawable/ic_dcdimming"
android:title="@string/dc_dimming_enable_title"
android:summary="@string/dc_dimming_enable_summary" />
</PreferenceScreen>

View File

@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2021 The Evolution X Project
Copyright (C) 2018-2021 crDroid Android 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.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/org.lineageos.settings.HBMFragment"
android.title="@string/hbm_fragment_title">
<PreferenceCategory>
<SwitchPreference
android:key="hbm"
android:title="@string/hbm_mode_title"
android:summary="@string/hbm_mode_summary"
android:defaultValue="false" />
<SwitchPreference
android:key="auto_hbm"
android:title="@string/auto_hbm_title"
android:summary="@string/auto_hbm_summary" />
<org.lineageos.settings.hbm.AutoHBMThresholdPreference
android:key="auto_hbm_threshold"
android:title="@string/auto_hbm_threshold_title"
android:summary="@string/auto_hbm_threshold_summary" />
<org.lineageos.settings.hbm.AutoHBMTimePreference
android:key="hbm_disable_time"
android:title="@string/hbm_disable_time_title"
android:summary="@string/hbm_disable_time_summary" />
<Preference
android:icon="@drawable/ic_info_outline"
android:summary="@string/hbm_mode_warning"
android:persistent="false" />
</PreferenceCategory>
</PreferenceScreen>

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 The CyanogenMod Project
2018-2019 The LineageOS 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/htsr_title">
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="htsr_enable"
android:summary="@string/htsr_enable_summary"
android:title="@string/htsr_enable_title" />
</PreferenceScreen>

Some files were not shown because too many files have changed in this diff Show More