Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f65149e69 | ||
|
|
6de8d07ec7 | ||
|
|
b0ae6670ac | ||
|
|
0e3acd128e | ||
|
|
a06227241f | ||
|
|
1000ca7cb5 | ||
|
|
56b8eea5a6 | ||
|
|
aed833523b | ||
|
|
32efcd3ce1 |
No files matched your search
@@ -0,0 +1,3 @@
|
||||
# iio-sensor-proxy with libssc: accelerometer mount matrix
|
||||
|
||||
SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{ACCEL_MOUNT_MATRIX}+="-1, 0, 0; 0, 1, 0; 0, 0, -1"
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
pkgname=device-oneplus-enchilada
|
||||
pkgdesc="OnePlus 6"
|
||||
pkgver=9
|
||||
pkgrel=1
|
||||
pkgver=10
|
||||
pkgrel=0
|
||||
url="https://postmarketos.org"
|
||||
license="MIT"
|
||||
arch="aarch64"
|
||||
@@ -23,6 +23,7 @@ source="
|
||||
deviceinfo
|
||||
phoc.ini
|
||||
q6voiced.conf
|
||||
81-libssc-oneplus-enchilada.rules
|
||||
"
|
||||
subpackages="$pkgname-nonfree-firmware:nonfree_firmware $pkgname-phosh"
|
||||
|
||||
@@ -36,11 +37,13 @@ package() {
|
||||
|
||||
nonfree_firmware() {
|
||||
pkgdesc="Modem, WiFi and GPU Firmware, also needed for osk-sdl"
|
||||
depends="firmware-oneplus-sdm845 firmware-oneplus-sdm845-initramfs
|
||||
soc-qcom-sdm845-nonfree-firmware soc-qcom-sdm845-modem"
|
||||
depends="firmware-oneplus-sdm845>=8 firmware-oneplus-sdm845-initramfs
|
||||
soc-qcom-sdm845-nonfree-firmware soc-qcom-sdm845-modem hexagonrpcd"
|
||||
install="$subpkgname.post-install $subpkgname.post-upgrade"
|
||||
mkdir "$subpkgdir"
|
||||
|
||||
install -Dm644 q6voiced.conf "$subpkgdir"/etc/conf.d/q6voiced
|
||||
install -Dm644 "$srcdir"/81-libssc-oneplus-enchilada.rules -t "$pkgdir"/usr/lib/udev/rules.d/
|
||||
}
|
||||
|
||||
phosh() {
|
||||
@@ -53,4 +56,5 @@ sha512sums="
|
||||
6dd8948f6c23b35c60aa82c4db40b3c2aa766aa2cc53c84d86028f54cc2303201a80d70fe8830cd746f01a8ea2459f55ebbc2412c2e222a7e9e9e1649d9505a5 deviceinfo
|
||||
65f74d29ab318b23f7ac8923a3661f2c4130049273a8c6be234ed2c8e00810b6a1254b54cf0932e42850a6d48f821dcd038900fbb836feeddfab2759afffae38 phoc.ini
|
||||
fe9871c325a38c0cadc9631870801ec15ab9f5b786ee854325b93eb3d23e7d8b1ac4f1075572ffcd225d8ec514dec09b986972ddff12a89260c0218af6de7887 q6voiced.conf
|
||||
f4961015c920c50182d35767de080f16ec348ff693a8cca91dd2593640cf19c31c1e6eac1e8a12a1d38946755eb21bdacad29c9e972adaec854500ab3a7ad3a0 81-libssc-oneplus-enchilada.rules
|
||||
"
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
rc-update add hexagonrpcd-sdsp
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
device-oneplus-enchilada-nonfree-firmware.post-install
|
||||
@@ -0,0 +1,4 @@
|
||||
# iio-sensor-proxy with libssc: accelerometer mount matrix
|
||||
|
||||
SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{ACCEL_MOUNT_MATRIX}+="-1, 0, 0; 0, -1, 0; 0, 0, -1"
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
pkgname=device-shift-axolotl
|
||||
pkgdesc="SHIFT6mq"
|
||||
pkgver=8
|
||||
pkgrel=1
|
||||
pkgver=10
|
||||
pkgrel=0
|
||||
url="https://postmarketos.org"
|
||||
license="MIT"
|
||||
arch="aarch64"
|
||||
@@ -26,6 +26,7 @@ source="
|
||||
deviceinfo
|
||||
phoc.ini
|
||||
q6voiced.conf
|
||||
81-libssc-shift-axolotl.rules
|
||||
"
|
||||
subpackages="
|
||||
$pkgname-nonfree-firmware:nonfree_firmware
|
||||
@@ -42,11 +43,13 @@ package() {
|
||||
|
||||
nonfree_firmware() {
|
||||
pkgdesc="Modem, GPU and WiFi Firmware, also needed for osk-sdl"
|
||||
depends="firmware-shift-sdm845 firmware-shift-sdm845-initramfs
|
||||
soc-qcom-sdm845-nonfree-firmware soc-qcom-sdm845-modem"
|
||||
depends="firmware-shift-sdm845>=0.4 firmware-shift-sdm845-initramfs
|
||||
soc-qcom-sdm845-nonfree-firmware soc-qcom-sdm845-modem hexagonrpcd"
|
||||
install="$subpkgname.post-install $subpkgname.post-upgrade"
|
||||
mkdir "$subpkgdir"
|
||||
|
||||
install -Dm644 q6voiced.conf "$subpkgdir"/etc/conf.d/q6voiced
|
||||
install -Dm644 "$srcdir"/81-libssc-shift-axolotl.rules -t "$pkgdir"/usr/lib/udev/rules.d/
|
||||
}
|
||||
|
||||
phosh() {
|
||||
@@ -59,4 +62,5 @@ sha512sums="
|
||||
a3e9ae292631233480b0fa60d90a7c0940162ea3876ae4bb8f2ad09ca4da94e9bcd6a0c690e8957ba4cd5d11ac50d3b32e7c89df5c44fd523aef6ea5e9c05c3d deviceinfo
|
||||
65f74d29ab318b23f7ac8923a3661f2c4130049273a8c6be234ed2c8e00810b6a1254b54cf0932e42850a6d48f821dcd038900fbb836feeddfab2759afffae38 phoc.ini
|
||||
2a3cbdad5aa91181d24a4e56e63986af6accf887c64fa4d1b6ddad1926e29050243c4b1e2fd892d38ca7c16e24dff8545a16552e5749ae31b6d01bf428468e51 q6voiced.conf
|
||||
3bd3a82b88a7aca4e2df2f5522cee7a98d017994f1dc1a965a7e386be9c17632b9cdbe013feb737dec12e99d74f54a9e4599144193bb57ec18e6d6a18c94cf1f 81-libssc-shift-axolotl.rules
|
||||
"
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
rc-update add hexagonrpcd-sdsp
|
||||
+1
@@ -0,0 +1 @@
|
||||
device-shift-axolotl-nonfree-firmware.post-install
|
||||
@@ -1,22 +1,24 @@
|
||||
# Maintainer: Caleb Connolly <caleb@connolly.tech>
|
||||
|
||||
pkgname=firmware-oneplus-sdm845
|
||||
pkgver=7
|
||||
pkgrel=1
|
||||
pkgver=8
|
||||
pkgrel=0
|
||||
pkgdesc="Firmware for OnePlus 6 / 6T"
|
||||
url="https://gitlab.com/sdm845-mainline/firmware-oneplus-sdm845"
|
||||
arch="aarch64"
|
||||
depends="linux-firmware-qcom linux-firmware-ath10k"
|
||||
license="proprietary"
|
||||
options="!check !strip !archcheck !tracedeps pmb:cross-native"
|
||||
options="!check !strip !archcheck !tracedeps textrels pmb:cross-native"
|
||||
|
||||
_version="895bb1c8dd0695635df354bbd713740af48e47ce"
|
||||
_version="dc9c77f220d104d7224c03fcbfc419a03a58765e"
|
||||
|
||||
source="$pkgname.tar.gz::$url/-/archive/$_version/$pkgname-$_version.tar.gz
|
||||
firmware.files
|
||||
sensor.files
|
||||
30-gpu-firmware.files"
|
||||
subpackages="
|
||||
$pkgname-initramfs:firmware_initramfs"
|
||||
$pkgname-initramfs:firmware_initramfs
|
||||
$pkgname-sensors:firmware_sensors"
|
||||
|
||||
package() {
|
||||
cd "$srcdir/$pkgname-$_version/"
|
||||
@@ -35,8 +37,23 @@ firmware_initramfs() {
|
||||
"$subpkgdir/usr/share/mkinitfs/files/30-gpu-firmware.files"
|
||||
}
|
||||
|
||||
firmware_sensors() {
|
||||
pkgdesc="Files to be included to add sensor support"
|
||||
depends="$pkgname"
|
||||
install_if="$pkgname-nonfree-firmware"
|
||||
mkdir "$subpkgdir"
|
||||
|
||||
cd "$srcdir/$pkgname-$_version/"
|
||||
while IFS="" read -r _i || [ -n "$_i" ]; do
|
||||
[ ! -d $(dirname $_i) ] && mkdir -p $(dirname $_i)
|
||||
echo $_i
|
||||
install -Dm644 $_i "$pkgdir/$_i"
|
||||
done < "$srcdir/sensor.files"
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
59091452f1d6363fab0474ebc2738ec8fca6903c64837c3b6228eefb2030b0b4d5f0694770ddadf81f59f2ace4fad548459ad7a6604498aaa08a9064fb1dc736 firmware-oneplus-sdm845.tar.gz
|
||||
d2295ba3346ded12e88bb1b27958418cb14ab6bb8f2c23e73a66168f53eac0cc8a10e4be28181724e92ff75ef8608c4483641e24bfd9f05c4ff7b351179ba784 firmware.files
|
||||
d14b22434016cb12b8c04a3e7ac186451d77b92284e926a2771d958960d4da8ffb10cb9db555a200babcedd7be3379d2840882d19c26edc88805eee943310c2f firmware-oneplus-sdm845.tar.gz
|
||||
2516cd2a3a9880fc5efd7f8e2dbdd6826531853068c3fe10eaeb8304d59c197e11744b1664a0e77a9907e9119344654e02264e224e15ab2347a1a858e3f93023 firmware.files
|
||||
4e5c4f55d4b084c6c21810b93a63a75ad86dd04cd1c079497bd2387f8bd0a411053ca1e894974af8bfda77ddc79c92a6669550be3a48fbef01cf797b54d6cb67 sensor.files
|
||||
bc6c329bf6bb9622320ab610f4f5fb944129e276855a4cf5646cb29a553f4c47cd9a4ef4305cbcd94a991471bc109b8f615cefd6871be99bf6a457fe0fa5aa19 30-gpu-firmware.files
|
||||
"
|
||||
@@ -8,6 +8,7 @@
|
||||
./lib/firmware/qcom/sdm845/oneplus6/modemuw.jsn
|
||||
./lib/firmware/qcom/sdm845/oneplus6/slpir.jsn
|
||||
./lib/firmware/qcom/sdm845/oneplus6/slpius.jsn
|
||||
./lib/firmware/qcom/sdm845/oneplus6/slpi.mbn
|
||||
./lib/firmware/qcom/sdm845/oneplus6/venus.mbn
|
||||
./lib/firmware/qcom/sdm845/oneplus6/wlanmdsp.mbn
|
||||
./lib/firmware/qcom/sdm845/oneplus6/a630_zap.mbn
|
||||
|
||||
@@ -0,0 +1,450 @@
|
||||
./etc/qcom/sensors.d/ak991x_dri_0.json
|
||||
./etc/qcom/sensors.d/ak991x_polling_0.json
|
||||
./etc/qcom/sensors.d/apds9251.json
|
||||
./etc/qcom/sensors.d/bmi160_0.json
|
||||
./etc/qcom/sensors.d/lsm6dsm_0_16g.json
|
||||
./etc/qcom/sensors.d/lsm6dsm_0_8g.json
|
||||
./etc/qcom/sensors.d/lsm6dso_0_16g.json
|
||||
./etc/qcom/sensors.d/lsm6dso_0_8g.json
|
||||
./etc/qcom/sensors.d/lsm6dst_0.json
|
||||
./etc/qcom/sensors.d/mmc3530kj_0.json
|
||||
./etc/qcom/sensors.d/mmc5603nj_0.json
|
||||
./etc/qcom/sensors.d/sdm845_ak991x_0.json
|
||||
./etc/qcom/sensors.d/sdm845_apds9251.json
|
||||
./etc/qcom/sensors.d/sdm845_bma2x2_0.json
|
||||
./etc/qcom/sensors.d/sdm845_bmg160_0.json
|
||||
./etc/qcom/sensors.d/sdm845_bmi160_0.json
|
||||
./etc/qcom/sensors.d/sdm845_bmm150_0.json
|
||||
./etc/qcom/sensors.d/sdm845_default_sensors.json
|
||||
./etc/qcom/sensors.d/sdm845_irq.json
|
||||
./etc/qcom/sensors.d/sdm845_lsm6ds3c_0.json
|
||||
./etc/qcom/sensors.d/sdm845_mmc3530kj_0.json
|
||||
./etc/qcom/sensors.d/sdm845_mmc5630nj_0.json
|
||||
./etc/qcom/sensors.d/sdm845_power_0.json
|
||||
./etc/qcom/sensors.d/sdm845_qrd_power_0.json
|
||||
./etc/qcom/sensors.d/sdm845_stk36xx_0.json
|
||||
./etc/qcom/sensors.d/sdm845_stk3x3x_0.json
|
||||
./etc/qcom/sensors.d/sdm845_svr_bma2x2_0.json
|
||||
./etc/qcom/sensors.d/sdm845_svr_bmg160_0.json
|
||||
./etc/qcom/sensors.d/sdm845_svr_rpr0521rs_0.json
|
||||
./etc/qcom/sensors.d/sdm845_sx932x_0.json
|
||||
./etc/qcom/sensors.d/sdm845_tcs3400.json
|
||||
./etc/qcom/sensors.d/sdm845_tmd3702.json
|
||||
./etc/qcom/sensors.d/sdm845_tmd3725.json
|
||||
./etc/qcom/sensors.d/sns_amd.json
|
||||
./etc/qcom/sensors.d/sns_amd_sw_disabled.json
|
||||
./etc/qcom/sensors.d/sns_amd_sw_enabled.json
|
||||
./etc/qcom/sensors.d/sns_aont.json
|
||||
./etc/qcom/sensors.d/sns_basic_gestures.json
|
||||
./etc/qcom/sensors.d/sns_bring_to_ear.json
|
||||
./etc/qcom/sensors.d/sns_ccd.json
|
||||
./etc/qcom/sensors.d/sns_ccd_v2_walk.json
|
||||
./etc/qcom/sensors.d/sns_ccd_v3_walk.json
|
||||
./etc/qcom/sensors.d/sns_cm.json
|
||||
./etc/qcom/sensors.d/sns_dae.json
|
||||
./etc/qcom/sensors.d/sns_device_orient.json
|
||||
./etc/qcom/sensors.d/sns_diag_filter.json
|
||||
./etc/qcom/sensors.d/sns_distance_bound.json
|
||||
./etc/qcom/sensors.d/sns_dpc.json
|
||||
./etc/qcom/sensors.d/sns_facing.json
|
||||
./etc/qcom/sensors.d/sns_fmv.json
|
||||
./etc/qcom/sensors.d/sns_geomag_rv.json
|
||||
./etc/qcom/sensors.d/sns_gyro_cal.json
|
||||
./etc/qcom/sensors.d/sns_heart_rate.json
|
||||
./etc/qcom/sensors.d/sns_mag_cal.json
|
||||
./etc/qcom/sensors.d/sns_mag_cal_legacy.json
|
||||
./etc/qcom/sensors.d/sns_multishake.json
|
||||
./etc/qcom/sensors.d/sns_pedometer.json
|
||||
./etc/qcom/sensors.d/sns_rmd.json
|
||||
./etc/qcom/sensors.d/sns_rotv.json
|
||||
./etc/qcom/sensors.d/sns_smd.json
|
||||
./etc/qcom/sensors.d/sns_tilt.json
|
||||
./etc/qcom/sensors.d/sns_tilt_sw_disabled.json
|
||||
./etc/qcom/sensors.d/sns_tilt_sw_enabled.json
|
||||
./etc/qcom/sensors.d/sns_tilt_to_wake.json
|
||||
./etc/qcom/sensors.d/sns_wrist_pedo.json
|
||||
./etc/qcom/sensors.d/stk36xx_0.json
|
||||
./etc/qcom/sensors.d/stk3x3x_0.json
|
||||
./etc/qcom/sensors.d/sx932x_0.json
|
||||
./etc/qcom/sensors.d/tcs3400.json
|
||||
./etc/qcom/sensors.d/tmd3702.json
|
||||
./etc/qcom/sensors.d/tmd3725.json
|
||||
./etc/qcom/sns_reg.conf
|
||||
./usr/lib/qcom/adsp/AlacDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/ApeDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/AudioContextDetection.so.1
|
||||
./usr/lib/qcom/adsp/AudioSphereModule.so.1
|
||||
./usr/lib/qcom/adsp/CFCMModule.so.1
|
||||
./usr/lib/qcom/adsp/EtsiAmrWbPlusDecModule.so.1
|
||||
./usr/lib/qcom/adsp/EtsiEaacPlusEncAndCmnModule.so.1
|
||||
./usr/lib/qcom/adsp/FlacDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/HeaacDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/LdacModule.so.1
|
||||
./usr/lib/qcom/adsp/SAPlusCmnModule.so.1
|
||||
./usr/lib/qcom/adsp/SVACmnModule.so.1
|
||||
./usr/lib/qcom/adsp/VoiceWakeup_V2_Module.so.1
|
||||
./usr/lib/qcom/adsp/VorbisDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/WmaProDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/WmaStdDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Bluetooth_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Codec_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_General_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Global_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Handset_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Hdmi_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Headset_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_Speaker_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/MTP/MTP_workspaceFile.qwsp
|
||||
./usr/lib/qcom/adsp/avs/acdbdata/adsp_avs_config.acdb
|
||||
./usr/lib/qcom/adsp/fastrpc_shell_0
|
||||
./usr/lib/qcom/adsp/fluence_voiceplus_module.so.1
|
||||
./usr/lib/qcom/adsp/libstabilitydomain_skel.so
|
||||
./usr/lib/qcom/adsp/libsysmon_skel.so
|
||||
./usr/lib/qcom/adsp/libsysmondomain_skel.so
|
||||
./usr/lib/qcom/adsp/map_AVS_SHARED_LIBS_845.adsp.prodQ.txt
|
||||
./usr/lib/qcom/adsp/map_SHARED_LIBS_845.adsp.prodQ.txt
|
||||
./usr/lib/qcom/adsp/mmecns_module.so.1
|
||||
./usr/lib/qcom/cdsp/fastrpc_shell_3
|
||||
./usr/lib/qcom/cdsp/libbenchmark_skel.so
|
||||
./usr/lib/qcom/cdsp/libc++.so.1
|
||||
./usr/lib/qcom/cdsp/libc++abi.so.1
|
||||
./usr/lib/qcom/cdsp/libhcp_rpc_skel.so
|
||||
./usr/lib/qcom/cdsp/libstabilitydomain_skel.so
|
||||
./usr/lib/qcom/cdsp/libsysmon_skel.so
|
||||
./usr/lib/qcom/cdsp/libsysmondomain_skel.so
|
||||
./usr/lib/qcom/cdsp/libvpp_aie.so
|
||||
./usr/lib/qcom/cdsp/libvpp_diagtools.so
|
||||
./usr/lib/qcom/cdsp/libvpp_frc.so
|
||||
./usr/lib/qcom/cdsp/libvpp_mvp.so
|
||||
./usr/lib/qcom/cdsp/libvpp_nr.so
|
||||
./usr/lib/qcom/cdsp/libvpp_qbr.so
|
||||
./usr/lib/qcom/cdsp/libvpp_svc_skel.so
|
||||
./usr/lib/qcom/cdsp/map_SHARED_LIBS_845.cdsp.prodQ.txt
|
||||
./usr/lib/qcom/cdsp/ubwcdma_dynlib.so
|
||||
./usr/lib/qcom/sdsp/cellinfo_tools.so
|
||||
./usr/lib/qcom/sdsp/chre_app_coverage.so
|
||||
./usr/lib/qcom/sdsp/chre_app_coverage2.so
|
||||
./usr/lib/qcom/sdsp/chre_app_oem.so
|
||||
./usr/lib/qcom/sdsp/chre_app_sensor_cfg.so
|
||||
./usr/lib/qcom/sdsp/chre_drv_bt.so
|
||||
./usr/lib/qcom/sdsp/chre_drv_gf.so
|
||||
./usr/lib/qcom/sdsp/chre_drv_loc.so
|
||||
./usr/lib/qcom/sdsp/chre_drv_modem.so
|
||||
./usr/lib/qcom/sdsp/chre_drv_wifi.so
|
||||
./usr/lib/qcom/sdsp/chre_pal.so
|
||||
./usr/lib/qcom/sdsp/fastrpc_shell_2
|
||||
./usr/lib/qcom/sdsp/libFastRPC_UTF_Forward_800s_sdm845_skel.so
|
||||
./usr/lib/qcom/sdsp/libchre_slpi_skel.so
|
||||
./usr/lib/qcom/sdsp/libstabilitydomain_skel.so
|
||||
./usr/lib/qcom/sdsp/libsysmon_skel.so
|
||||
./usr/lib/qcom/sdsp/libsysmondomain_skel.so
|
||||
./usr/lib/qcom/sdsp/lowi_client.so
|
||||
./usr/lib/qcom/sdsp/map_SHARED_LIBS_AAAAAAAAQ.txt
|
||||
./usr/lib/qcom/sdsp/map_SSC_SLPI_USER_AAAAAAAAQ.txt
|
||||
./usr/lib/qcom/sdsp/sensor_testapp_40.so
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0.mag
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0.mag.config
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0.mag.config_2
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.mag
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.mag.fac_cal
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.mag.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.mag.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.orient
|
||||
./var/lib/qcom/sensors/registry/ak0991x_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/apds9251
|
||||
./var/lib/qcom/sensors/registry/apds9251.ambient_light
|
||||
./var/lib/qcom/sensors/registry/apds9251.ambient_light.config
|
||||
./var/lib/qcom/sensors/registry/apds9251.ambient_temperature
|
||||
./var/lib/qcom/sensors/registry/apds9251.ambient_temperature.config
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform.ambient_light
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform.ambient_light.fac_cal
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform.ambient_temperature
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform.ambient_temperature.fac_cal
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform.config
|
||||
./var/lib/qcom/sensors/registry/apds9251_platform.placement
|
||||
./var/lib/qcom/sensors/registry/bmi160_0
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.accel
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.accel.config
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.gyro
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.gyro.config
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.md
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.md.config
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.temp
|
||||
./var/lib/qcom/sensors/registry/bmi160_0.temp.config
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.accel
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.accel.fac_cal
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.accel.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.accel.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.gyro
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.gyro.fac_cal
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.gyro.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.gyro.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.md
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.md.config
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.orient
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.temp
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.temp.fac_cal
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.temp.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/bmi160_0_platform.temp.fac_cal.scale
|
||||
./var/lib/qcom/sensors/registry/default_sensors
|
||||
./var/lib/qcom/sensors/registry/default_sensors.accel
|
||||
./var/lib/qcom/sensors/registry/default_sensors.accel.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.accel_cal
|
||||
./var/lib/qcom/sensors/registry/default_sensors.accel_cal.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.ambient_light
|
||||
./var/lib/qcom/sensors/registry/default_sensors.ambient_light.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.amd
|
||||
./var/lib/qcom/sensors/registry/default_sensors.amd.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.fmv
|
||||
./var/lib/qcom/sensors/registry/default_sensors.fmv.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.game_rv
|
||||
./var/lib/qcom/sensors/registry/default_sensors.game_rv.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.geomag_rv
|
||||
./var/lib/qcom/sensors/registry/default_sensors.geomag_rv.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gravity
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gravity.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gyro
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gyro.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gyro_cal
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gyro_cal.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gyro_rot_matrix
|
||||
./var/lib/qcom/sensors/registry/default_sensors.gyro_rot_matrix.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.mag
|
||||
./var/lib/qcom/sensors/registry/default_sensors.mag.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.mag_cal
|
||||
./var/lib/qcom/sensors/registry/default_sensors.mag_cal.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.motion_detect
|
||||
./var/lib/qcom/sensors/registry/default_sensors.motion_detect.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.proximity
|
||||
./var/lib/qcom/sensors/registry/default_sensors.proximity.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.rotv
|
||||
./var/lib/qcom/sensors/registry/default_sensors.rotv.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.sensor_temperature
|
||||
./var/lib/qcom/sensors/registry/default_sensors.sensor_temperature.attr_0
|
||||
./var/lib/qcom/sensors/registry/default_sensors.tilt
|
||||
./var/lib/qcom/sensors/registry/default_sensors.tilt.attr_0
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.accel
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.accel.config
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.gyro
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.gyro.config
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.md
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.md.config
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.temp
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0.temp.config
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.accel
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.accel.fac_cal
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.accel.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.accel.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.gyro
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.gyro.fac_cal
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.gyro.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.gyro.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.md
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.md.config
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.orient
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.temp
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.temp.fac_cal
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.temp.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/lsm6ds3c_0_platform.temp.fac_cal.scale
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.accel
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.accel.config
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.gyro
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.gyro.config
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.md
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.md.config
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.temp
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0.temp.config
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.accel
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.accel.fac_cal
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.accel.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.accel.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.gyro
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.gyro.fac_cal
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.gyro.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.gyro.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.md
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.md.config
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.orient
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.temp
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.temp.fac_cal
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.temp.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/lsm6dsm_0_platform.temp.fac_cal.scale
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0.mag
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0.mag.config
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.mag
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.mag.fac_cal
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.mag.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.mag.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.orient
|
||||
./var/lib/qcom/sensors/registry/mmc3530kj_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0.mag
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0.mag.config
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.mag
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.mag.fac_cal
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.mag.fac_cal.bias
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.mag.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.orient
|
||||
./var/lib/qcom/sensors/registry/mmc5603nj_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/power
|
||||
./var/lib/qcom/sensors/registry/power.gpio
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_0
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_1
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_10
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_11
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_12
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_13
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_14
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_15
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_16
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_17
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_2
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_3
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_4
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_5
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_6
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_7
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_8
|
||||
./var/lib/qcom/sensors/registry/power.gpio.gpio_9
|
||||
./var/lib/qcom/sensors/registry/power.island
|
||||
./var/lib/qcom/sensors/registry/sensors_settings
|
||||
./var/lib/qcom/sensors/registry/sns_amd
|
||||
./var/lib/qcom/sensors/registry/sns_aont
|
||||
./var/lib/qcom/sensors/registry/sns_basic_gestures
|
||||
./var/lib/qcom/sensors/registry/sns_bring_to_ear
|
||||
./var/lib/qcom/sensors/registry/sns_cm
|
||||
./var/lib/qcom/sensors/registry/sns_device_orient_platform
|
||||
./var/lib/qcom/sensors/registry/sns_device_orient_platform.config
|
||||
./var/lib/qcom/sensors/registry/sns_diag_config
|
||||
./var/lib/qcom/sensors/registry/sns_diag_sensor_datatype
|
||||
./var/lib/qcom/sensors/registry/sns_direct_channel
|
||||
./var/lib/qcom/sensors/registry/sns_distance_bound_speed_for_motion_states
|
||||
./var/lib/qcom/sensors/registry/sns_dpc
|
||||
./var/lib/qcom/sensors/registry/sns_facing
|
||||
./var/lib/qcom/sensors/registry/sns_fmv_platform
|
||||
./var/lib/qcom/sensors/registry/sns_fmv_platform.config
|
||||
./var/lib/qcom/sensors/registry/sns_geomag_rv
|
||||
./var/lib/qcom/sensors/registry/sns_geomag_rv.config
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_config
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist.bias
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist.compensation_matrix
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist.scale_factor
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist_s0
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist_s0.bias
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist_s0.compensation_matrix
|
||||
./var/lib/qcom/sensors/registry/sns_gyro_cal_persist_s0.scale_factor
|
||||
./var/lib/qcom/sensors/registry/sns_irq
|
||||
./var/lib/qcom/sensors/registry/sns_mag_cal_config
|
||||
./var/lib/qcom/sensors/registry/sns_multishake
|
||||
./var/lib/qcom/sensors/registry/sns_pedometer
|
||||
./var/lib/qcom/sensors/registry/sns_reg_config
|
||||
./var/lib/qcom/sensors/registry/sns_rmd
|
||||
./var/lib/qcom/sensors/registry/sns_rotv_platform
|
||||
./var/lib/qcom/sensors/registry/sns_rotv_platform.config
|
||||
./var/lib/qcom/sensors/registry/sns_smd
|
||||
./var/lib/qcom/sensors/registry/sns_tilt
|
||||
./var/lib/qcom/sensors/registry/sns_tilt_to_wake
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0.ambient_light
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0.ambient_light.config
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0.proximity
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0.proximity.config
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0.rgb
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0.rgb.config
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.als
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.als.fac_cal
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.ps
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.ps.fac_cal
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb.current_value
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb.fac_cal
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb.linear_info
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb.matrix_value
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb.target_value
|
||||
./var/lib/qcom/sensors/registry/stk36xx_0_platform.rgb.target_value_new
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0.ambient_light
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0.ambient_light.config
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0.proximity
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0.proximity.config
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0_platform
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0_platform.als
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0_platform.als.fac_cal
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0_platform.ps
|
||||
./var/lib/qcom/sensors/registry/stk3x3x_0_platform.ps.fac_cal
|
||||
./var/lib/qcom/sensors/registry/sx932x_0
|
||||
./var/lib/qcom/sensors/registry/sx932x_0.sar
|
||||
./var/lib/qcom/sensors/registry/sx932x_0.sar.config
|
||||
./var/lib/qcom/sensors/registry/sx932x_0_platform
|
||||
./var/lib/qcom/sensors/registry/sx932x_0_platform.config
|
||||
./var/lib/qcom/sensors/registry/sx932x_0_platform.placement
|
||||
./var/lib/qcom/sensors/registry/tcs3400
|
||||
./var/lib/qcom/sensors/registry/tcs3400.als
|
||||
./var/lib/qcom/sensors/registry/tcs3400.als.config
|
||||
./var/lib/qcom/sensors/registry/tcs3400.rgb
|
||||
./var/lib/qcom/sensors/registry/tcs3400.rgb.config
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform.als
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform.als.fac_cal
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform.coefficient
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform.config
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform.rgb
|
||||
./var/lib/qcom/sensors/registry/tcs3400_platform.rgb.fac_cal
|
||||
./var/lib/qcom/sensors/registry/tmd3702
|
||||
./var/lib/qcom/sensors/registry/tmd3702.als
|
||||
./var/lib/qcom/sensors/registry/tmd3702.als.config
|
||||
./var/lib/qcom/sensors/registry/tmd3702.prox
|
||||
./var/lib/qcom/sensors/registry/tmd3702.prox.config
|
||||
./var/lib/qcom/sensors/registry/tmd3702.rgb
|
||||
./var/lib/qcom/sensors/registry/tmd3702.rgb.config
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.als
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.als.afac_cal
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.coefficient
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.config
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.prox
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.prox.pfac_cal
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.rgb
|
||||
./var/lib/qcom/sensors/registry/tmd3702_platform.rgb.rfac_cal
|
||||
./var/lib/qcom/sensors/registry/tmd3725
|
||||
./var/lib/qcom/sensors/registry/tmd3725.als
|
||||
./var/lib/qcom/sensors/registry/tmd3725.als.config
|
||||
./var/lib/qcom/sensors/registry/tmd3725.prox
|
||||
./var/lib/qcom/sensors/registry/tmd3725.prox.config
|
||||
./var/lib/qcom/sensors/registry/tmd3725.rgb
|
||||
./var/lib/qcom/sensors/registry/tmd3725.rgb.config
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.als
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.als.afac_cal
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.coefficient
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.config
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.prox
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.prox.pfac_cal
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.rgb
|
||||
./var/lib/qcom/sensors/registry/tmd3725_platform.rgb.rfac_cal
|
||||
./var/lib/qcom/sensors/sensors_list.txt
|
||||
./var/lib/qcom/sensors/sns_reg_ctrl
|
||||
@@ -1,8 +1,8 @@
|
||||
# Maintainer: Alexander Martinz <amartinz@shiftphones.com>
|
||||
|
||||
pkgname=firmware-shift-sdm845
|
||||
pkgver=0.3
|
||||
pkgrel=1
|
||||
pkgver=0.4
|
||||
pkgrel=0
|
||||
pkgdesc="Firmware for SHIFT sdm845 devices"
|
||||
url="https://gitlab.com/sdm845-mainline/firmware-shift-sdm845"
|
||||
arch="aarch64"
|
||||
@@ -11,15 +11,18 @@ depends="
|
||||
linux-firmware-qcom
|
||||
"
|
||||
license="proprietary"
|
||||
options="!check !strip !archcheck !tracedeps pmb:cross-native"
|
||||
# Textrels appear in DSP libraries which we cannot avoid
|
||||
options="!check !strip !archcheck !tracedeps textrels pmb:cross-native"
|
||||
|
||||
_version="ce9d27bf03624cceeaa8e7466f2e6dc731f2ba5e"
|
||||
_version="7f957e47c3bad1f89bae6da07aa9adfcf76b8c6a"
|
||||
|
||||
source="$pkgname.tar.gz::$url/-/archive/$_version/$pkgname-$_version.tar.gz
|
||||
firmware.files
|
||||
sensors.files
|
||||
30-gpu-firmware.files"
|
||||
subpackages="
|
||||
$pkgname-initramfs:firmware_initramfs"
|
||||
$pkgname-initramfs:firmware_initramfs
|
||||
$pkgname-sensors:firmware_sensors"
|
||||
|
||||
package() {
|
||||
cd "$srcdir/$pkgname-$_version/"
|
||||
@@ -40,8 +43,23 @@ firmware_initramfs() {
|
||||
"$subpkgdir/usr/share/mkinitfs/files/30-gpu-firmware.files"
|
||||
}
|
||||
|
||||
firmware_sensors() {
|
||||
pkgdesc="Firmware files of the sensor registry"
|
||||
depends="$pkgname"
|
||||
install_if="$pkgname-nonfree-firmware"
|
||||
mkdir "$subpkgdir"
|
||||
|
||||
cd "$srcdir/$pkgname-$_version/"
|
||||
while IFS="" read -r _i || [ -n "$_i" ]; do
|
||||
[ ! -d $(dirname $_i) ] && mkdir -p $(dirname $_i)
|
||||
echo $_i
|
||||
install -Dm644 $_i "$pkgdir/$_i"
|
||||
done < "$srcdir/sensors.files"
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
86c3813a9f43e8f5f5e0df1215e37090011d6c468aad1a23f944a202e9fa740240869ed7b0b11ad032d35afaee72e903e24ca8d0e1de2f992902692f8c5983f8 firmware-shift-sdm845.tar.gz
|
||||
6d9affb61e581e8752ed9293b5efec7a5940dca2d1e9ac12006daaae4b826ce7f1a9e1d588480a1cf90d70ab9d479daffb95a8bdd8a5c53c2d6cc95fd6d8be70 firmware-shift-sdm845.tar.gz
|
||||
0b547cd027a9760cf16d80e63ebfb89282cff260bd07cc0bfea364513be7a5a32202a5f0aedbeb52dc5ca8087595a2842442a59f77dc7c9bcf5f154e905ceb15 firmware.files
|
||||
be1aa0e7d1a5689d2f6b85d6244d0a2ec0729b92d3a165fc5162f039849ee2da49b311a4713cd11924ee70933dacb88c879b805504bb89709f10807d89207a15 sensors.files
|
||||
8695a37da5578fdae506f373131ce9481be3db1a86f329c19893e7360b9cb0fadd47b0b1318b2e74702c5e76a9be022f58610940ad17becab49788689f6ca3f8 30-gpu-firmware.files
|
||||
"
|
||||
@@ -0,0 +1,196 @@
|
||||
./etc/qcom/sns_reg.conf
|
||||
./etc/qcom/sensors.d/bmp285_0.json
|
||||
./etc/qcom/sensors.d/icm206xx_0.json
|
||||
./etc/qcom/sensors.d/mmc5603x_0.json
|
||||
./etc/qcom/sensors.d/sdm845_bmp285_0.json
|
||||
./etc/qcom/sensors.d/sdm845_icm206xx_0.json
|
||||
./etc/qcom/sensors.d/sdm845_mmc5603x_0.json
|
||||
./etc/qcom/sensors.d/sdm845_stk3x1x_0.json
|
||||
./etc/qcom/sensors.d/sns_amd.json
|
||||
./etc/qcom/sensors.d/sns_amd_sw_disabled.json
|
||||
./etc/qcom/sensors.d/sns_amd_sw_enabled.json
|
||||
./etc/qcom/sensors.d/sns_aont.json
|
||||
./etc/qcom/sensors.d/sns_basic_gestures.json
|
||||
./etc/qcom/sensors.d/sns_bring_to_ear.json
|
||||
./etc/qcom/sensors.d/sns_ccd.json
|
||||
./etc/qcom/sensors.d/sns_ccd_v2_walk.json
|
||||
./etc/qcom/sensors.d/sns_ccd_v3_walk.json
|
||||
./etc/qcom/sensors.d/sns_cm.json
|
||||
./etc/qcom/sensors.d/sns_dae.json
|
||||
./etc/qcom/sensors.d/sns_device_orient.json
|
||||
./etc/qcom/sensors.d/sns_diag_filter.json
|
||||
./etc/qcom/sensors.d/sns_distance_bound.json
|
||||
./etc/qcom/sensors.d/sns_dpc.json
|
||||
./etc/qcom/sensors.d/sns_facing.json
|
||||
./etc/qcom/sensors.d/sns_fmv.json
|
||||
./etc/qcom/sensors.d/sns_geomag_rv.json
|
||||
./etc/qcom/sensors.d/sns_gyro_cal.json
|
||||
./etc/qcom/sensors.d/sns_heart_rate.json
|
||||
./etc/qcom/sensors.d/sns_mag_cal.json
|
||||
./etc/qcom/sensors.d/sns_mag_cal_legacy.json
|
||||
./etc/qcom/sensors.d/sns_multishake.json
|
||||
./etc/qcom/sensors.d/sns_pedometer.json
|
||||
./etc/qcom/sensors.d/sns_rmd.json
|
||||
./etc/qcom/sensors.d/sns_rotv.json
|
||||
./etc/qcom/sensors.d/sns_smd.json
|
||||
./etc/qcom/sensors.d/sns_tilt.json
|
||||
./etc/qcom/sensors.d/sns_tilt_sw_disabled.json
|
||||
./etc/qcom/sensors.d/sns_tilt_sw_enabled.json
|
||||
./etc/qcom/sensors.d/sns_tilt_to_wake.json
|
||||
./etc/qcom/sensors.d/stk3x1x_0.json
|
||||
./usr/lib/qcom/adsp/AlacDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/ApeDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/AudioContextDetection.so.1
|
||||
./usr/lib/qcom/adsp/AudioSphereModule.so.1
|
||||
./usr/lib/qcom/adsp/cellinfo_tools.so
|
||||
./usr/lib/qcom/adsp/CFCMModule.so.1
|
||||
./usr/lib/qcom/adsp/chre_app_coverage2.so
|
||||
./usr/lib/qcom/adsp/chre_app_coverage.so
|
||||
./usr/lib/qcom/adsp/chre_app_oem.so
|
||||
./usr/lib/qcom/adsp/chre_app_sensor_cfg.so
|
||||
./usr/lib/qcom/adsp/chre_drv_bt.so
|
||||
./usr/lib/qcom/adsp/chre_drv_gf.so
|
||||
./usr/lib/qcom/adsp/chre_drv_loc.so
|
||||
./usr/lib/qcom/adsp/chre_drv_modem.so
|
||||
./usr/lib/qcom/adsp/chre_drv_wifi.so
|
||||
./usr/lib/qcom/adsp/chre_pal.so
|
||||
./usr/lib/qcom/adsp/EtsiAmrWbPlusDecModule.so.1
|
||||
./usr/lib/qcom/adsp/EtsiEaacPlusEncAndCmnModule.so.1
|
||||
./usr/lib/qcom/adsp/fastrpc_shell_0
|
||||
./usr/lib/qcom/adsp/fastrpc_shell_2
|
||||
./usr/lib/qcom/adsp/FlacDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/fluence_voiceplus_module.so.1
|
||||
./usr/lib/qcom/adsp/HeaacDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/LdacModule.so.1
|
||||
./usr/lib/qcom/adsp/libchre_slpi_skel.so
|
||||
./usr/lib/qcom/adsp/libFastRPC_UTF_Forward_800s_sdm845_skel.so
|
||||
./usr/lib/qcom/adsp/libstabilitydomain_skel.so
|
||||
./usr/lib/qcom/adsp/libsysmondomain_skel.so
|
||||
./usr/lib/qcom/adsp/libsysmon_skel.so
|
||||
./usr/lib/qcom/adsp/lowi_client.so
|
||||
./usr/lib/qcom/adsp/map_AVS_SHARED_LIBS_845.adsp.prodQ.txt
|
||||
./usr/lib/qcom/adsp/map_SHARED_LIBS_845.adsp.prodQ.txt
|
||||
./usr/lib/qcom/adsp/map_SHARED_LIBS_AAAAAAAAQ.txt
|
||||
./usr/lib/qcom/adsp/map_SSC_SLPI_USER_AAAAAAAAQ.txt
|
||||
./usr/lib/qcom/adsp/mmecns_module.so.1
|
||||
./usr/lib/qcom/adsp/SAPlusCmnModule.so.1
|
||||
./usr/lib/qcom/adsp/sensor_testapp_40.so
|
||||
./usr/lib/qcom/adsp/SVACmnModule.so.1
|
||||
./usr/lib/qcom/adsp/VoiceWakeup_V2_Module.so.1
|
||||
./usr/lib/qcom/adsp/VorbisDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/WmaProDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/WmaStdDecoderModule.so.1
|
||||
./usr/lib/qcom/adsp/avs/adsp_avs_config.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Bluetooth_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Codec_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_General_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Global_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Handset_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Hdmi_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Headset_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_Speaker_cal.acdb
|
||||
./usr/lib/qcom/adsp/avs/QRD/QRD_workspaceFile.qwsp
|
||||
./var/lib/qcom/sensors/bmp285_0
|
||||
./var/lib/qcom/sensors/bmp285_0_platform
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.config
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.placement
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.pressure
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.pressure.fac_cal
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.pressure.fac_cal.bias
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.pressure.fac_cal.scale
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.temp
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.temp.fac_cal
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.temp.fac_cal.bias
|
||||
./var/lib/qcom/sensors/bmp285_0_platform.temp.fac_cal.scale
|
||||
./var/lib/qcom/sensors/bmp285_0.pressure
|
||||
./var/lib/qcom/sensors/bmp285_0.pressure.config
|
||||
./var/lib/qcom/sensors/bmp285_0.temp
|
||||
./var/lib/qcom/sensors/bmp285_0.temp.config
|
||||
./var/lib/qcom/sensors/file1
|
||||
./var/lib/qcom/sensors/file2
|
||||
./var/lib/qcom/sensors/icm206xx_0
|
||||
./var/lib/qcom/sensors/icm206xx_0.accel
|
||||
./var/lib/qcom/sensors/icm206xx_0.accel.config
|
||||
./var/lib/qcom/sensors/icm206xx_0.gyro
|
||||
./var/lib/qcom/sensors/icm206xx_0.gyro.config
|
||||
./var/lib/qcom/sensors/icm206xx_0.md
|
||||
./var/lib/qcom/sensors/icm206xx_0.md.config
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.accel
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.accel.fac_cal
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.accel.fac_cal.bias
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.accel.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.config
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.gyro
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.gyro.fac_cal
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.gyro.fac_cal.bias
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.gyro.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.md
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.md.config
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.orient
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.placement
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.temp
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.temp.fac_cal
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.temp.fac_cal.bias
|
||||
./var/lib/qcom/sensors/icm206xx_0_platform.temp.fac_cal.scale
|
||||
./var/lib/qcom/sensors/icm206xx_0.temp
|
||||
./var/lib/qcom/sensors/icm206xx_0.temp.config
|
||||
./var/lib/qcom/sensors/mmc5603x_0
|
||||
./var/lib/qcom/sensors/mmc5603x_0.mag
|
||||
./var/lib/qcom/sensors/mmc5603x_0.mag.config
|
||||
./var/lib/qcom/sensors/mmc5603x_0.mag.config_2
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.config
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.mag
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.mag.fac_cal
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.mag.fac_cal.bias
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.mag.fac_cal.corr_mat
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.orient
|
||||
./var/lib/qcom/sensors/mmc5603x_0_platform.placement
|
||||
./var/lib/qcom/sensors/sensors_list.txt
|
||||
./var/lib/qcom/sensors/sensors_registry
|
||||
./var/lib/qcom/sensors/sensors_settings
|
||||
./var/lib/qcom/sensors/sns_amd
|
||||
./var/lib/qcom/sensors/sns_aont
|
||||
./var/lib/qcom/sensors/sns_basic_gestures
|
||||
./var/lib/qcom/sensors/sns_bring_to_ear
|
||||
./var/lib/qcom/sensors/sns_cm
|
||||
./var/lib/qcom/sensors/sns_device_orient_platform
|
||||
./var/lib/qcom/sensors/sns_device_orient_platform.config
|
||||
./var/lib/qcom/sensors/sns_diag_config
|
||||
./var/lib/qcom/sensors/sns_diag_sensor_datatype
|
||||
./var/lib/qcom/sensors/sns_distance_bound_speed_for_motion_states
|
||||
./var/lib/qcom/sensors/sns_dpc
|
||||
./var/lib/qcom/sensors/sns_facing
|
||||
./var/lib/qcom/sensors/sns_fmv_platform
|
||||
./var/lib/qcom/sensors/sns_fmv_platform.config
|
||||
./var/lib/qcom/sensors/sns_geomag_rv
|
||||
./var/lib/qcom/sensors/sns_geomag_rv.config
|
||||
./var/lib/qcom/sensors/sns_gyro_cal_config
|
||||
./var/lib/qcom/sensors/sns_gyro_cal_persist_s0
|
||||
./var/lib/qcom/sensors/sns_gyro_cal_persist_s0.bias
|
||||
./var/lib/qcom/sensors/sns_gyro_cal_persist_s0.compensation_matrix
|
||||
./var/lib/qcom/sensors/sns_gyro_cal_persist_s0.scale_factor
|
||||
./var/lib/qcom/sensors/sns_mag_cal_persist_s0c0
|
||||
./var/lib/qcom/sensors/sns_mag_cal_persist_s0c0.bias
|
||||
./var/lib/qcom/sensors/sns_multishake
|
||||
./var/lib/qcom/sensors/sns_pedometer
|
||||
./var/lib/qcom/sensors/sns_reg_config
|
||||
./var/lib/qcom/sensors/sns_reg_version
|
||||
./var/lib/qcom/sensors/sns_rmd
|
||||
./var/lib/qcom/sensors/sns_rotv_platform
|
||||
./var/lib/qcom/sensors/sns_rotv_platform.config
|
||||
./var/lib/qcom/sensors/sns_smd
|
||||
./var/lib/qcom/sensors/sns_tilt
|
||||
./var/lib/qcom/sensors/sns_tilt_to_wake
|
||||
./var/lib/qcom/sensors/stk3x1x_0
|
||||
./var/lib/qcom/sensors/stk3x1x_0.ambient_light
|
||||
./var/lib/qcom/sensors/stk3x1x_0.ambient_light.config
|
||||
./var/lib/qcom/sensors/stk3x1x_0_platform
|
||||
./var/lib/qcom/sensors/stk3x1x_0_platform.als
|
||||
./var/lib/qcom/sensors/stk3x1x_0_platform.als.fac_cal
|
||||
./var/lib/qcom/sensors/stk3x1x_0_platform.config
|
||||
./var/lib/qcom/sensors/stk3x1x_0_platform.ps
|
||||
./var/lib/qcom/sensors/stk3x1x_0_platform.ps.fac_cal
|
||||
./var/lib/qcom/sensors/stk3x1x_0.proximity
|
||||
./var/lib/qcom/sensors/stk3x1x_0.proximity.config
|
||||
@@ -0,0 +1,45 @@
|
||||
# Hexagonrpcd for SDM670/SDM845
|
||||
|
||||
pkgname=hexagonrpcd
|
||||
pkgver=0.0.0_git20230325
|
||||
pkgrel=0
|
||||
pkgdesc="Qualcomm Hexagon RPC daemon"
|
||||
url="https://gitlab.com/flamingradian/sensh/"
|
||||
arch="all"
|
||||
license="GPL3-or-later"
|
||||
makedepends="linux-headers meson"
|
||||
subpackages="$pkgname-openrc"
|
||||
_commit="ae73e4b07b2afd59cc60e059761047b8dd19c673"
|
||||
source="https://gitlab.com/flamingradian/sensh/-/archive/$_commit/sensh-$_commit.tar.gz
|
||||
$pkgname-adsp.initd
|
||||
$pkgname-sdsp.initd
|
||||
"
|
||||
options="!check"
|
||||
builddir="$srcdir/sensh-$_commit/fastrpc"
|
||||
|
||||
build() {
|
||||
abuild-meson \
|
||||
. output
|
||||
meson compile -C output
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" meson install --no-rebuild -C output
|
||||
}
|
||||
|
||||
openrc() {
|
||||
pkgdesc="$pkgdesc (OpenRC init scripts)"
|
||||
install_if="openrc $pkgname=$pkgver-r$pkgrel"
|
||||
|
||||
default_openrc
|
||||
|
||||
install -Dm755 "$srcdir"/$pkgname-adsp.initd "$subpkgdir"/etc/init.d/$pkgname-adsp
|
||||
install -Dm755 "$srcdir"/$pkgname-sdsp.initd "$subpkgdir"/etc/init.d/$pkgname-sdsp
|
||||
}
|
||||
|
||||
|
||||
sha512sums="
|
||||
bfcca095b761b69dc0840ee062673448cb6905e22e519a00b36b8aa3aa0ea4b6e3966f4d93e854a1c624351b718497f2f10a4049de89bad73c889def66511014 sensh-ae73e4b07b2afd59cc60e059761047b8dd19c673.tar.gz
|
||||
627a443bdeb104cded634b759d8cce3dcbc033bb179004b173bf687759d5d306ddaaa80fa103c39aa5d36bd4041d254ff29993edad1b3166d6b51873ebe40677 hexagonrpcd-adsp.initd
|
||||
9f64b0bb926d12df0454c3367a6d83c30fff01a581852e89221ca90e396412c9c29e3b3968d4a2aba46279f21a9e0ab766228e36fb2e41221c1b0e2c5fff1630 hexagonrpcd-sdsp.initd
|
||||
"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
supervisor=supervise-daemon
|
||||
name="Hexagonrpcd ADSP"
|
||||
description="Daemon to support Qualcomm Hexagon ADSP virtual filesystem"
|
||||
|
||||
command=/usr/sbin/hexagonrpcd
|
||||
command_args="-f /dev/fastrpc-adsp"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
supervisor=supervise-daemon
|
||||
name="Hexagonrpcd SDSP"
|
||||
description="Daemon to support Qualcomm Hexagon SDSP virtual filesystem"
|
||||
|
||||
command=/usr/sbin/hexagonrpcd
|
||||
command_args="-f /dev/fastrpc-sdsp -s"
|
||||
@@ -0,0 +1,274 @@
|
||||
From 4fd3611f93b0a35e8311c6a6e3fe03545154d8bb Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sun, 23 Apr 2023 16:54:10 +0200
|
||||
Subject: [PATCH 1/7] iio-sensor-proxy: depend on libssc
|
||||
|
||||
---
|
||||
data/80-iio-sensor-proxy.rules | 2 +
|
||||
meson.build | 3 +
|
||||
meson_options.txt | 4 ++
|
||||
src/drivers.h | 7 ++
|
||||
src/drv-ssc-proximity.c | 121 +++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 21 +++++-
|
||||
src/meson.build | 7 ++
|
||||
7 files changed, 164 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/drv-ssc-proximity.c
|
||||
|
||||
diff --git a/data/80-iio-sensor-proxy.rules b/data/80-iio-sensor-proxy.rules
|
||||
index 85d93f9..bd917b2 100644
|
||||
--- a/data/80-iio-sensor-proxy.rules
|
||||
+++ b/data/80-iio-sensor-proxy.rules
|
||||
@@ -16,6 +16,8 @@ SUBSYSTEM=="iio", TEST=="scan_elements/in_intensity_both_en", ENV{IIO_SENSOR_PRO
|
||||
SUBSYSTEM=="iio", TEST=="in_proximity_raw", ENV{IIO_SENSOR_PROXY_TYPE}+="iio-poll-proximity"
|
||||
SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", ENV{IIO_SENSOR_PROXY_TYPE}+="input-accel"
|
||||
|
||||
+SUBSYSTEM=="misc", KERNEL=="fastrpc-sdsp", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel"
|
||||
+
|
||||
ENV{IIO_SENSOR_PROXY_TYPE}=="", GOTO="iio_sensor_proxy_end"
|
||||
|
||||
# We got here because we have a sensor type, which means we need the service
|
||||
diff --git a/meson.build b/meson.build
|
||||
index b45493f..bef4209 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -46,6 +46,9 @@ gio_dep = dependency('gio-2.0')
|
||||
gudev_dep = dependency('gudev-1.0', version: '>= 237')
|
||||
polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.91')
|
||||
polkit_policy_directory = polkit_gobject_dep.get_pkgconfig_variable('policydir')
|
||||
+if get_option('ssc-support')
|
||||
+ libssc_dep = dependency('libssc-glib')
|
||||
+endif
|
||||
|
||||
xmllint = find_program('xmllint', required: false)
|
||||
|
||||
diff --git a/meson_options.txt b/meson_options.txt
|
||||
index de5fbf4..2b60f82 100644
|
||||
--- a/meson_options.txt
|
||||
+++ b/meson_options.txt
|
||||
@@ -18,6 +18,10 @@ option('geoclue-user',
|
||||
description: 'The USER (existing) as which geoclue service is running',
|
||||
type: 'string',
|
||||
value: 'geoclue')
|
||||
+option('ssc-support',
|
||||
+ description: 'Enable Qualcomm SSC support',
|
||||
+ type: 'boolean',
|
||||
+ value: false)
|
||||
option('gtk_doc',
|
||||
type: 'boolean',
|
||||
value: false,
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index b760faa..895cb55 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -160,4 +160,11 @@ extern SensorDriver iio_buffer_light;
|
||||
extern SensorDriver iio_buffer_compass;
|
||||
extern SensorDriver iio_poll_proximity;
|
||||
|
||||
+#ifdef LIBSSC
|
||||
+extern SensorDriver ssc_accel;
|
||||
+extern SensorDriver ssc_light;
|
||||
+extern SensorDriver ssc_compass;
|
||||
+extern SensorDriver ssc_proximity;
|
||||
+#endif
|
||||
+
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c
|
||||
new file mode 100644
|
||||
index 0000000..5e06967
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-proximity.c
|
||||
@@ -0,0 +1,121 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-proximity.h>
|
||||
+
|
||||
+#define QRTR_DEVICE_URI "qrtr://9"
|
||||
+#define UDEV_DEVICE_NAME "fastrpc-sdsp"
|
||||
+#define PROXIMITY_NEAR_LEVEL "PROXIMITY_NEAR_LEVEL"
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorProximity *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_proximity_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ g_autoptr (SSCSensorProximity) sensor = NULL;
|
||||
+ g_autoptr (GFile) file = g_file_new_for_uri (QRTR_DEVICE_URI);
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ g_debug ("SUBSYSTEM: %s | NAME: %s", g_udev_device_get_subsystem (device), g_udev_device_get_name (device));
|
||||
+ if (g_strcmp0 (g_udev_device_get_name (device), UDEV_DEVICE_NAME))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ sensor = ssc_sensor_proximity_new_sync (file, NULL, &error);
|
||||
+
|
||||
+ return sensor ? TRUE : FALSE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorProximity *sensor, gboolean near, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ ProximityReadings readings;
|
||||
+
|
||||
+ readings.is_near = near ? PROXIMITY_NEAR_TRUE : PROXIMITY_NEAR_FALSE;
|
||||
+ g_debug ("SSC Proximity sensor '%s': near: %s", sensor_device->name, readings.is_near ? "NEAR" : "FAR");
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_proximity_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GFile) file = g_file_new_for_uri (QRTR_DEVICE_URI);
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_proximity_new_sync (file, NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ g_object_unref (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_proximity_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_proximity = {
|
||||
+ .driver_name = "SSC proximity sensor",
|
||||
+ .type = DRIVER_TYPE_PROXIMITY,
|
||||
+
|
||||
+ .discover = ssc_proximity_discover,
|
||||
+ .open = ssc_proximity_open,
|
||||
+ .close = ssc_proximity_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 836e742..17debbb 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -73,6 +73,12 @@ static const SensorDriver * const drivers[] = {
|
||||
&fake_light,
|
||||
&iio_buffer_compass,
|
||||
&iio_poll_proximity,
|
||||
+#ifdef HAS_LIBSSC
|
||||
+ &ssc_accel,
|
||||
+ &ssc_light,
|
||||
+ &ssc_compass,
|
||||
+ &ssc_proximity,
|
||||
+#endif
|
||||
};
|
||||
|
||||
static ReadingsUpdateFunc driver_type_to_callback_func (DriverType type);
|
||||
@@ -122,6 +128,11 @@ find_sensors (GUdevClient *client,
|
||||
platform = g_udev_client_query_by_subsystem (client, "platform");
|
||||
devices = g_list_concat (devices, input);
|
||||
devices = g_list_concat (devices, platform);
|
||||
+#ifdef HAS_LIBSSC
|
||||
+ GList *fastrpc;
|
||||
+ fastrpc = g_udev_client_query_by_subsystem (client, "misc");
|
||||
+ devices = g_list_concat (devices, fastrpc);
|
||||
+#endif
|
||||
|
||||
/* Find the devices */
|
||||
for (l = devices; l != NULL; l = l->next) {
|
||||
@@ -684,7 +695,15 @@ name_acquired_handler (GDBusConnection *connection,
|
||||
gpointer user_data)
|
||||
{
|
||||
SensorData *data = user_data;
|
||||
- const gchar * const subsystems[] = { "iio", "input", "platform", NULL };
|
||||
+ const gchar * const subsystems[] = {
|
||||
+ "iio",
|
||||
+ "input",
|
||||
+ "platform",
|
||||
+#ifdef HAS_LIBSSC
|
||||
+ "misc",
|
||||
+#endif
|
||||
+ NULL
|
||||
+ };
|
||||
guint i;
|
||||
|
||||
data->client = g_udev_client_new (subsystems);
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 8ddd37b..90d550d 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -1,5 +1,8 @@
|
||||
config_h = configuration_data()
|
||||
config_h.set_quoted('VERSION', meson.project_version())
|
||||
+if get_option('ssc-support')
|
||||
+ config_h.set_quoted('HAS_LIBSSC', '1')
|
||||
+endif
|
||||
config_h_files = configure_file(
|
||||
output: 'config.h',
|
||||
configuration: config_h
|
||||
@@ -7,6 +10,10 @@ config_h_files = configure_file(
|
||||
|
||||
deps = [ gio_dep, gudev_dep, mathlib_dep, polkit_gobject_dep ]
|
||||
|
||||
+if get_option('ssc-support')
|
||||
+ deps = deps + [ libssc_dep ]
|
||||
+endif
|
||||
+
|
||||
resources = gnome.compile_resources(
|
||||
'iio-sensor-proxy-resources', 'iio-sensor-proxy.gresource.xml',
|
||||
c_name: 'iio_sensor_proxy',
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
From 0f9327f15d1d76bc6b7772929e302930d428f167 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sun, 23 Apr 2023 17:54:46 +0200
|
||||
Subject: [PATCH 2/7] proximity: support SSC proximity sensor
|
||||
|
||||
---
|
||||
src/drivers.h | 5 +----
|
||||
src/drv-ssc-proximity.c | 18 ++++--------------
|
||||
src/iio-sensor-proxy.c | 3 ---
|
||||
src/meson.build | 1 +
|
||||
4 files changed, 6 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index 895cb55..5dcac8a 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -160,10 +160,7 @@ extern SensorDriver iio_buffer_light;
|
||||
extern SensorDriver iio_buffer_compass;
|
||||
extern SensorDriver iio_poll_proximity;
|
||||
|
||||
-#ifdef LIBSSC
|
||||
-extern SensorDriver ssc_accel;
|
||||
-extern SensorDriver ssc_light;
|
||||
-extern SensorDriver ssc_compass;
|
||||
+#ifdef HAS_LIBSSC
|
||||
extern SensorDriver ssc_proximity;
|
||||
#endif
|
||||
|
||||
diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c
|
||||
index 5e06967..c87a796 100644
|
||||
--- a/src/drv-ssc-proximity.c
|
||||
+++ b/src/drv-ssc-proximity.c
|
||||
@@ -18,8 +18,6 @@
|
||||
#include <libssc-sensor.h>
|
||||
#include <libssc-sensor-proximity.h>
|
||||
|
||||
-#define QRTR_DEVICE_URI "qrtr://9"
|
||||
-#define UDEV_DEVICE_NAME "fastrpc-sdsp"
|
||||
#define PROXIMITY_NEAR_LEVEL "PROXIMITY_NEAR_LEVEL"
|
||||
|
||||
typedef struct DrvData {
|
||||
@@ -30,17 +28,11 @@ typedef struct DrvData {
|
||||
static gboolean
|
||||
ssc_proximity_discover (GUdevDevice *device)
|
||||
{
|
||||
- g_autoptr (SSCSensorProximity) sensor = NULL;
|
||||
- g_autoptr (GFile) file = g_file_new_for_uri (QRTR_DEVICE_URI);
|
||||
- g_autoptr (GError) error = NULL;
|
||||
-
|
||||
- g_debug ("SUBSYSTEM: %s | NAME: %s", g_udev_device_get_subsystem (device), g_udev_device_get_name (device));
|
||||
- if (g_strcmp0 (g_udev_device_get_name (device), UDEV_DEVICE_NAME))
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-proximity", NULL))
|
||||
return FALSE;
|
||||
|
||||
- sensor = ssc_sensor_proximity_new_sync (file, NULL, &error);
|
||||
-
|
||||
- return sensor ? TRUE : FALSE;
|
||||
+ g_debug ("Found SSC proximity at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -50,7 +42,6 @@ measurement_cb (SSCSensorProximity *sensor, gboolean near, gpointer user_data)
|
||||
ProximityReadings readings;
|
||||
|
||||
readings.is_near = near ? PROXIMITY_NEAR_TRUE : PROXIMITY_NEAR_FALSE;
|
||||
- g_debug ("SSC Proximity sensor '%s': near: %s", sensor_device->name, readings.is_near ? "NEAR" : "FAR");
|
||||
sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
}
|
||||
|
||||
@@ -59,7 +50,6 @@ ssc_proximity_open (GUdevDevice *device)
|
||||
{
|
||||
SensorDevice *sensor_device;
|
||||
DrvData *drv_data;
|
||||
- g_autoptr (GFile) file = g_file_new_for_uri (QRTR_DEVICE_URI);
|
||||
g_autoptr (GError) error = NULL;
|
||||
|
||||
sensor_device = g_new0 (SensorDevice, 1);
|
||||
@@ -67,7 +57,7 @@ ssc_proximity_open (GUdevDevice *device)
|
||||
drv_data = (DrvData *) sensor_device->priv;
|
||||
|
||||
/* Create sensor */
|
||||
- drv_data->sensor = ssc_sensor_proximity_new_sync (file, NULL, &error);
|
||||
+ drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error);
|
||||
if (!drv_data->sensor) {
|
||||
g_warning ("Creating SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
return NULL;
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 17debbb..dbd3f6e 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -74,9 +74,6 @@ static const SensorDriver * const drivers[] = {
|
||||
&iio_buffer_compass,
|
||||
&iio_poll_proximity,
|
||||
#ifdef HAS_LIBSSC
|
||||
- &ssc_accel,
|
||||
- &ssc_light,
|
||||
- &ssc_compass,
|
||||
&ssc_proximity,
|
||||
#endif
|
||||
};
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 90d550d..7019b1c 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -35,6 +35,7 @@ sources = [
|
||||
'drv-iio-buffer-light.c',
|
||||
'drv-iio-buffer-compass.c',
|
||||
'drv-iio-poll-proximity.c',
|
||||
+ 'drv-ssc-proximity.c',
|
||||
'iio-buffer-utils.c',
|
||||
'accel-mount-matrix.c',
|
||||
'accel-scale.c',
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
From 59f184ccecf212196c0d76b1cb705eab59c51826 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Mon, 24 Apr 2023 16:56:20 +0200
|
||||
Subject: [PATCH 3/7] light: support SSC light sensor
|
||||
|
||||
---
|
||||
src/drivers.h | 1 +
|
||||
src/drv-ssc-light.c | 112 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 1 +
|
||||
src/meson.build | 1 +
|
||||
4 files changed, 115 insertions(+)
|
||||
create mode 100644 src/drv-ssc-light.c
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index 5dcac8a..a97528b 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -162,6 +162,7 @@ extern SensorDriver iio_poll_proximity;
|
||||
|
||||
#ifdef HAS_LIBSSC
|
||||
extern SensorDriver ssc_proximity;
|
||||
+extern SensorDriver ssc_light;
|
||||
#endif
|
||||
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-light.c b/src/drv-ssc-light.c
|
||||
new file mode 100644
|
||||
index 0000000..689eca5
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-light.c
|
||||
@@ -0,0 +1,112 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-light.h>
|
||||
+
|
||||
+#define UDEV_DEVICE_NAME "fastrpc-"
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorLight *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_light_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-light", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ g_debug ("Found SSC light at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorLight *sensor, gfloat intensity, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ LightReadings readings;
|
||||
+
|
||||
+ readings.level = intensity;
|
||||
+ readings.uses_lux = TRUE;
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_light_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC light sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC light sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ g_object_unref (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_light_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC light sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_light = {
|
||||
+ .driver_name = "SSC light sensor",
|
||||
+ .type = DRIVER_TYPE_LIGHT,
|
||||
+
|
||||
+ .discover = ssc_light_discover,
|
||||
+ .open = ssc_light_open,
|
||||
+ .close = ssc_light_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index dbd3f6e..f70e996 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -75,6 +75,7 @@ static const SensorDriver * const drivers[] = {
|
||||
&iio_poll_proximity,
|
||||
#ifdef HAS_LIBSSC
|
||||
&ssc_proximity,
|
||||
+ &ssc_light,
|
||||
#endif
|
||||
};
|
||||
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 7019b1c..104143c 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -36,6 +36,7 @@ sources = [
|
||||
'drv-iio-buffer-compass.c',
|
||||
'drv-iio-poll-proximity.c',
|
||||
'drv-ssc-proximity.c',
|
||||
+ 'drv-ssc-light.c',
|
||||
'iio-buffer-utils.c',
|
||||
'accel-mount-matrix.c',
|
||||
'accel-scale.c',
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
From fe8b7e42a7f813842ff51f4d8f194a7c20534bcb Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Mon, 24 Apr 2023 17:01:10 +0200
|
||||
Subject: [PATCH 4/7] accelerometer: support SSC accelerometer sensor
|
||||
|
||||
---
|
||||
src/drivers.h | 2 +
|
||||
src/drv-ssc-accel.c | 113 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 1 +
|
||||
src/meson.build | 1 +
|
||||
4 files changed, 117 insertions(+)
|
||||
create mode 100644 src/drv-ssc-accel.c
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index a97528b..a68fcbb 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -163,6 +163,8 @@ extern SensorDriver iio_poll_proximity;
|
||||
#ifdef HAS_LIBSSC
|
||||
extern SensorDriver ssc_proximity;
|
||||
extern SensorDriver ssc_light;
|
||||
+extern SensorDriver ssc_accel;
|
||||
+extern SensorDriver ssc_compass;
|
||||
#endif
|
||||
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c
|
||||
new file mode 100644
|
||||
index 0000000..a9b5eec
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-accel.c
|
||||
@@ -0,0 +1,113 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-accelerometer.h>
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorAccelerometer *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_accelerometer_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-accel", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ g_debug ("Found SSC accelerometer at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorAccelerometer *sensor, gfloat accel_x, gfloat accel_y, gfloat accel_z, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ AccelReadings readings;
|
||||
+
|
||||
+ readings.accel_x = accel_x;
|
||||
+ readings.accel_y = accel_y;
|
||||
+ readings.accel_z = accel_z;
|
||||
+ set_accel_scale (&readings.scale, 1.0);
|
||||
+
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_accelerometer_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ g_object_unref (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_accelerometer_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_accelerometer_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_accel = {
|
||||
+ .driver_name = "SSC accelerometer sensor",
|
||||
+ .type = DRIVER_TYPE_ACCEL,
|
||||
+
|
||||
+ .discover = ssc_accelerometer_discover,
|
||||
+ .open = ssc_accelerometer_open,
|
||||
+ .close = ssc_accelerometer_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index f70e996..644e835 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -76,6 +76,7 @@ static const SensorDriver * const drivers[] = {
|
||||
#ifdef HAS_LIBSSC
|
||||
&ssc_proximity,
|
||||
&ssc_light,
|
||||
+ &ssc_accel,
|
||||
#endif
|
||||
};
|
||||
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 104143c..e44338b 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -37,6 +37,7 @@ sources = [
|
||||
'drv-iio-poll-proximity.c',
|
||||
'drv-ssc-proximity.c',
|
||||
'drv-ssc-light.c',
|
||||
+ 'drv-ssc-accel.c',
|
||||
'iio-buffer-utils.c',
|
||||
'accel-mount-matrix.c',
|
||||
'accel-scale.c',
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
From 20ab71eb279869eec770c497aed6832b64c7df15 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Mon, 24 Apr 2023 18:29:15 +0200
|
||||
Subject: [PATCH 5/7] compass: support SSC compass sensor
|
||||
|
||||
---
|
||||
src/drv-ssc-compass.c | 112 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 1 +
|
||||
src/meson.build | 1 +
|
||||
3 files changed, 114 insertions(+)
|
||||
create mode 100644 src/drv-ssc-compass.c
|
||||
|
||||
diff --git a/src/drv-ssc-compass.c b/src/drv-ssc-compass.c
|
||||
new file mode 100644
|
||||
index 0000000..7a367b3
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-compass.c
|
||||
@@ -0,0 +1,112 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-compass.h>
|
||||
+
|
||||
+#define UDEV_DEVICE_NAME "fastrpc-"
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorCompass *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_compass_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-compass", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ g_debug ("Found SSC compass at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorCompass *sensor, gfloat azimuth, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ CompassReadings readings;
|
||||
+
|
||||
+ readings.heading = azimuth;
|
||||
+
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_compass_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC compass sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC compass sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ g_object_unref (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_compass_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC compass sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_compass = {
|
||||
+ .driver_name = "SSC compass sensor",
|
||||
+ .type = DRIVER_TYPE_COMPASS,
|
||||
+
|
||||
+ .discover = ssc_compass_discover,
|
||||
+ .open = ssc_compass_open,
|
||||
+ .close = ssc_compass_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 644e835..5414677 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -77,6 +77,7 @@ static const SensorDriver * const drivers[] = {
|
||||
&ssc_proximity,
|
||||
&ssc_light,
|
||||
&ssc_accel,
|
||||
+ &ssc_compass,
|
||||
#endif
|
||||
};
|
||||
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index e44338b..08b25e6 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -38,6 +38,7 @@ sources = [
|
||||
'drv-ssc-proximity.c',
|
||||
'drv-ssc-light.c',
|
||||
'drv-ssc-accel.c',
|
||||
+ 'drv-ssc-compass.c',
|
||||
'iio-buffer-utils.c',
|
||||
'accel-mount-matrix.c',
|
||||
'accel-scale.c',
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
From 8c15df3b56af5a5414b90abd746f824990a3441c Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Tue, 25 Apr 2023 18:34:45 +0200
|
||||
Subject: [PATCH 6/7] accelerometer: apply accel attributes
|
||||
|
||||
Mount matrix, location, and scaling
|
||||
---
|
||||
src/drv-ssc-accel.c | 27 +++++++++++++++++++++++----
|
||||
1 file changed, 23 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c
|
||||
index a9b5eec..a64f28e 100644
|
||||
--- a/src/drv-ssc-accel.c
|
||||
+++ b/src/drv-ssc-accel.c
|
||||
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include "drivers.h"
|
||||
+#include "accel-mount-matrix.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
@@ -21,6 +22,9 @@
|
||||
typedef struct DrvData {
|
||||
SSCSensorAccelerometer *sensor;
|
||||
guint measurement_id;
|
||||
+ AccelVec3 *mount_matrix;
|
||||
+ AccelLocation location;
|
||||
+ AccelScale scale;
|
||||
} DrvData;
|
||||
|
||||
static gboolean
|
||||
@@ -37,12 +41,21 @@ static void
|
||||
measurement_cb (SSCSensorAccelerometer *sensor, gfloat accel_x, gfloat accel_y, gfloat accel_z, gpointer user_data)
|
||||
{
|
||||
SensorDevice *sensor_device = user_data;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
AccelReadings readings;
|
||||
+ AccelVec3 tmp;
|
||||
+
|
||||
+ tmp.x = accel_x;
|
||||
+ tmp.y = accel_y;
|
||||
+ tmp.z = accel_z;
|
||||
|
||||
- readings.accel_x = accel_x;
|
||||
- readings.accel_y = accel_y;
|
||||
- readings.accel_z = accel_z;
|
||||
- set_accel_scale (&readings.scale, 1.0);
|
||||
+ if (!apply_mount_matrix (drv_data->mount_matrix, &tmp))
|
||||
+ g_warning ("Could not apply mount matrix");
|
||||
+
|
||||
+ readings.accel_x = tmp.x;
|
||||
+ readings.accel_y = tmp.y;
|
||||
+ readings.accel_z = tmp.z;
|
||||
+ copy_accel_scale (&readings.scale, drv_data->scale);
|
||||
|
||||
sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
}
|
||||
@@ -58,6 +71,11 @@ ssc_accelerometer_open (GUdevDevice *device)
|
||||
sensor_device->priv = g_new0 (DrvData, 1);
|
||||
drv_data = (DrvData *) sensor_device->priv;
|
||||
|
||||
+ /* Setup accel attributes */
|
||||
+ drv_data->mount_matrix = setup_mount_matrix (device);
|
||||
+ drv_data->location = setup_accel_location (device);
|
||||
+ set_accel_scale (&drv_data->scale, 1.0);
|
||||
+
|
||||
/* Create sensor */
|
||||
drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error);
|
||||
if (!drv_data->sensor) {
|
||||
@@ -99,6 +117,7 @@ ssc_accelerometer_close (SensorDevice *sensor_device)
|
||||
g_warning ("Closing SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
|
||||
g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||||
g_clear_pointer (&sensor_device->priv, g_free);
|
||||
g_free (sensor_device);
|
||||
}
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
From 6a8c37f8f180ed3d0589948d28b1d9322a0cae3c Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Wed, 26 Apr 2023 18:54:07 +0200
|
||||
Subject: [PATCH 7/7] data: add libssc udev rules
|
||||
|
||||
---
|
||||
data/80-iio-sensor-proxy-libssc.rules | 11 +++++++++++
|
||||
data/80-iio-sensor-proxy.rules | 2 --
|
||||
data/meson.build | 10 +++++++++-
|
||||
3 files changed, 20 insertions(+), 3 deletions(-)
|
||||
create mode 100644 data/80-iio-sensor-proxy-libssc.rules
|
||||
|
||||
diff --git a/data/80-iio-sensor-proxy-libssc.rules b/data/80-iio-sensor-proxy-libssc.rules
|
||||
new file mode 100644
|
||||
index 0000000..c4fad16
|
||||
--- /dev/null
|
||||
+++ b/data/80-iio-sensor-proxy-libssc.rules
|
||||
@@ -0,0 +1,11 @@
|
||||
+# iio-sensor-proxy: libssc
|
||||
+# IIO sensor to D-Bus proxy with libssc support
|
||||
+
|
||||
+ACTION=="remove", GOTO="iio_sensor_proxy_libssc_end"
|
||||
+
|
||||
+# Set the sensor type for all the types we recognise for SDSP/ADSP.
|
||||
+# Some devices expose the sensors via a separate SDSP while others re-use ADSP.
|
||||
+# These DSPs expose itself as /dev/fastrpc-* in the misc subsystem.
|
||||
+SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass"
|
||||
+
|
||||
+LABEL="iio_sensor_proxy_libssc_end"
|
||||
diff --git a/data/80-iio-sensor-proxy.rules b/data/80-iio-sensor-proxy.rules
|
||||
index bd917b2..85d93f9 100644
|
||||
--- a/data/80-iio-sensor-proxy.rules
|
||||
+++ b/data/80-iio-sensor-proxy.rules
|
||||
@@ -16,8 +16,6 @@ SUBSYSTEM=="iio", TEST=="scan_elements/in_intensity_both_en", ENV{IIO_SENSOR_PRO
|
||||
SUBSYSTEM=="iio", TEST=="in_proximity_raw", ENV{IIO_SENSOR_PROXY_TYPE}+="iio-poll-proximity"
|
||||
SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", ENV{IIO_SENSOR_PROXY_TYPE}+="input-accel"
|
||||
|
||||
-SUBSYSTEM=="misc", KERNEL=="fastrpc-sdsp", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel"
|
||||
-
|
||||
ENV{IIO_SENSOR_PROXY_TYPE}=="", GOTO="iio_sensor_proxy_end"
|
||||
|
||||
# We got here because we have a sensor type, which means we need the service
|
||||
diff --git a/data/meson.build b/data/meson.build
|
||||
index 97dbc07..8b78125 100644
|
||||
--- a/data/meson.build
|
||||
+++ b/data/meson.build
|
||||
@@ -1,5 +1,13 @@
|
||||
+rules = files(
|
||||
+ '80-iio-sensor-proxy.rules'
|
||||
+)
|
||||
+
|
||||
+if get_option('ssc-support')
|
||||
+ rules += files('80-iio-sensor-proxy-libssc.rules')
|
||||
+endif
|
||||
+
|
||||
install_data(
|
||||
- '80-iio-sensor-proxy.rules',
|
||||
+ rules,
|
||||
install_dir: udev_rules_dir
|
||||
)
|
||||
|
||||
--
|
||||
2.40.0
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
# Forked from Alpine to add Qualcomm SSC support with libssc
|
||||
|
||||
pkgname=iio-sensor-proxy
|
||||
pkgver=9999
|
||||
pkgrel=0
|
||||
pkgdesc="IIO sensors to D-Bus proxy"
|
||||
url="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy"
|
||||
arch="all"
|
||||
license="GPL-2.0-or-later"
|
||||
depends="dbus"
|
||||
makedepends="
|
||||
eudev-dev
|
||||
glib-dev
|
||||
libgudev-dev
|
||||
meson
|
||||
polkit-dev
|
||||
libssc-dev
|
||||
"
|
||||
subpackages="$pkgname-openrc"
|
||||
_commit="48cb957c41b8d51d882219866e1366c45e21c352"
|
||||
builddir="$srcdir/$pkgname-$_commit"
|
||||
source="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/archive/$_commit/iio-sensor-proxy-$_commit.tar.gz
|
||||
iio-sensor-proxy.initd
|
||||
0001-iio-sensor-proxy-depend-on-libssc.patch
|
||||
0002-proximity-support-SSC-proximity-sensor.patch
|
||||
0003-light-support-SSC-light-sensor.patch
|
||||
0004-accelerometer-support-SSC-accelerometer-sensor.patch
|
||||
0005-compass-support-SSC-compass-sensor.patch
|
||||
0006-accelerometer-apply-accel-attributes.patch
|
||||
0007-data-add-libssc-udev-rules.patch
|
||||
"
|
||||
build() {
|
||||
abuild-meson \
|
||||
-Db_lto=true \
|
||||
-Dssc-support=true \
|
||||
-Dsystemdsystemunitdir=/no \
|
||||
. output
|
||||
meson compile -C output
|
||||
}
|
||||
|
||||
check() {
|
||||
meson test --no-rebuild --print-errorlogs -C output
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" meson install --no-rebuild -C output
|
||||
rm -r "$pkgdir"/no
|
||||
|
||||
install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
f899058ba346b272c5174de0f2c0870bf6a13782f0c0c248163bc6cec7fbebca689ed97a0fbebd770a8857212cfc760849ad97034eaaec7fef40b7e58d811f31 iio-sensor-proxy-48cb957c41b8d51d882219866e1366c45e21c352.tar.gz
|
||||
b25df94e249ca46fe96926e5a866c20dc913fa52a2d9259fb7a3594861c6b2f246fc7fef8a21f5b021f3a71401f734ae27210137b0b1917a7daaffb5e3221f2e iio-sensor-proxy.initd
|
||||
43bf2ce5928c996ef56939a5ff232160f6af5a40cc673753763facbcb18511b1f551fa1a91f55ac9d0d4cbe544de7326208617ffc032cfeb9e39a5ab6538e825 0001-iio-sensor-proxy-depend-on-libssc.patch
|
||||
c6eb40824d5f4fe8b46d26f3ed4773502c9ff3ed58ec82df4a4f570bdcba81c39ff41f6d400bcece13fc46486272d13238d58afc34982b0972894b4d01a81309 0002-proximity-support-SSC-proximity-sensor.patch
|
||||
2e909a9a2a8c95d5255e14f6e0280f329e83e02dce8c16555df77c818a3cda658a7ebfb4c27d3e251e6830de2374f5f1bf2735be09af09ff0255c902125601ea 0003-light-support-SSC-light-sensor.patch
|
||||
cb627cb4fc40e195683dcf1a7837f2fc902851310f3cee42ab18e42d6243b8fafc92accf699b5805670f9a8c76cf0cc422a201be64836efe9e5b943f6d151d70 0004-accelerometer-support-SSC-accelerometer-sensor.patch
|
||||
045d76e0399ea2a5e99955d56a77f4fab9b5bc7d50512c60ae1a6dfd8e56e209690743545582bef35451fbd1a03f67d58e7143c2c91811d402a0e8e908f22bbc 0005-compass-support-SSC-compass-sensor.patch
|
||||
17eab0005d6d4989e57ef6f37a7bfbd7541c19c129c9dc481000635884b981a8da0b9f264bc61059ac27882cd653eff7a78ec231ecbd158773f71d55e6ab8e9b 0006-accelerometer-apply-accel-attributes.patch
|
||||
5495aa9d9ba3b83c0845556bcc1ef66d72a76d9685b791c15080dece62c00d93c76a2dce0e146ba0f3027ed2c34957d0019def9cee0fd133ec72c554ccfeb2d3 0007-data-add-libssc-udev-rules.patch
|
||||
"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/sbin/openrc-run
|
||||
|
||||
supervisor=supervise-daemon
|
||||
command="/usr/libexec/iio-sensor-proxy"
|
||||
|
||||
depend() {
|
||||
need dbus
|
||||
}
|
||||
@@ -0,0 +1,377 @@
|
||||
From 508dbb40b9cb2970759909c97b46698336f0ce37 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Wed, 21 Dec 2022 19:45:54 +0100
|
||||
Subject: [PATCH 1/7] data: qmi-service-ssc: add SSC service
|
||||
|
||||
The SSC service is the Qualcomm Snapdragon Sensor Core (SSC) which is a
|
||||
remoteproc exposing the sensor devices in the latest Qualcomm SoCs.
|
||||
The SSC manages the power to the sensors, sample rates, etc. which
|
||||
can be used over QMI. In contrast to other QMI services, the SSC uses
|
||||
QMI only as a transport mechamism. The actual messages are Protobuf
|
||||
messages encoded in the QMI messages and indications.
|
||||
Therefore, only 1 QMI message is used and 2 QMI indications.
|
||||
The SSC may emit QMI indications with a small data size or much bigger,
|
||||
they are indentical besides the data size and ID.
|
||||
---
|
||||
data/qmi-collection-basic.json | 6 +-
|
||||
data/qmi-service-ssc.json | 87 +++++++++++++++++++
|
||||
.../libqmi-glib/libqmi-glib-common.sections | 6 ++
|
||||
.../libqmi-glib/libqmi-glib-docs.xml | 14 +++
|
||||
meson.build | 2 +-
|
||||
src/libqmi-glib/generated/meson.build | 3 +-
|
||||
src/libqmi-glib/libqmi-glib.h | 2 +
|
||||
src/libqmi-glib/meson.build | 1 +
|
||||
src/libqmi-glib/qmi-device.c | 6 ++
|
||||
src/libqmi-glib/qmi-enums-ssc.h | 40 +++++++++
|
||||
src/libqmi-glib/qmi-enums.h | 2 +
|
||||
src/libqmi-glib/qmi-message.c | 6 ++
|
||||
src/qmicli/qmicli.c | 1 +
|
||||
13 files changed, 173 insertions(+), 3 deletions(-)
|
||||
create mode 100644 data/qmi-service-ssc.json
|
||||
create mode 100644 src/libqmi-glib/qmi-enums-ssc.h
|
||||
|
||||
diff --git a/data/qmi-collection-basic.json b/data/qmi-collection-basic.json
|
||||
index ba0e33e0..a16d1f16 100644
|
||||
--- a/data/qmi-collection-basic.json
|
||||
+++ b/data/qmi-collection-basic.json
|
||||
@@ -211,5 +211,9 @@
|
||||
|
||||
"QMI_MESSAGE_DSD_GET_SYSTEM_STATUS",
|
||||
"QMI_MESSAGE_DSD_SYSTEM_STATUS_CHANGE",
|
||||
- "QMI_INDICATION_DSD_SYSTEM_STATUS"
|
||||
+ "QMI_INDICATION_DSD_SYSTEM_STATUS",
|
||||
+
|
||||
+ "QMI_MESSAGE_SSC_MESSAGE",
|
||||
+ "QMI_INDICATION_SSC_REPORT_SMALL",
|
||||
+ "QMI_INDICATION_SSC_REPORT_LARGE"
|
||||
]
|
||||
diff --git a/data/qmi-service-ssc.json b/data/qmi-service-ssc.json
|
||||
new file mode 100644
|
||||
index 00000000..9ef4d9ad
|
||||
--- /dev/null
|
||||
+++ b/data/qmi-service-ssc.json
|
||||
@@ -0,0 +1,87 @@
|
||||
+[
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "SSC",
|
||||
+ "type" : "Service" },
|
||||
+
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "QMI Client SSC",
|
||||
+ "type" : "Client",
|
||||
+ "since" : "1.34" },
|
||||
+
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "QMI Message SSC",
|
||||
+ "type" : "Message-ID-Enum" },
|
||||
+
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "QMI Indication SSC",
|
||||
+ "type" : "Indication-ID-Enum" },
|
||||
+
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "Control",
|
||||
+ "type" : "Message",
|
||||
+ "service" : "SSC",
|
||||
+ "id" : "0x0020",
|
||||
+ "since" : "1.34",
|
||||
+ "input" : [ { "name" : "Protobuf Data",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "array",
|
||||
+ "size-prefix-format" : "guint16",
|
||||
+ "array-element" : { "format" : "guint8" }
|
||||
+ },
|
||||
+ { "name" : "Unknown Value",
|
||||
+ "id" : "0x10",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "guint8" } ],
|
||||
+ "output" : [ { "common-ref" : "Operation Result" },
|
||||
+ { "name" : "Client ID",
|
||||
+ "id" : "0x10",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "guint64",
|
||||
+ "prerequisites": [ { "common-ref" : "Success" } ] },
|
||||
+ { "name" : "Response",
|
||||
+ "id" : "0x11",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "guint32",
|
||||
+ "prerequisites": [ { "common-ref" : "Success" } ] } ] },
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "Report Small",
|
||||
+ "type" : "Indication",
|
||||
+ "service" : "SSC",
|
||||
+ "id" : "0x0021",
|
||||
+ "since" : "1.34",
|
||||
+ "output" : [ { "name" : "Client ID",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "guint64" },
|
||||
+ { "name" : "Protobuf Data",
|
||||
+ "id" : "0x02",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "array",
|
||||
+ "size-prefix-format" : "guint16",
|
||||
+ "array-element" : { "format" : "guint8" } } ] },
|
||||
+ // *********************************************************************************
|
||||
+ { "name" : "Report Large",
|
||||
+ "type" : "Indication",
|
||||
+ "service" : "SSC",
|
||||
+ "id" : "0x0022",
|
||||
+ "since" : "1.34",
|
||||
+ "output" : [ { "name" : "Client ID",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "guint64" },
|
||||
+ { "name" : "Protobuf Data",
|
||||
+ "id" : "0x02",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.34",
|
||||
+ "format" : "array",
|
||||
+ "size-prefix-format" : "guint16",
|
||||
+ "array-element" : { "format" : "guint8" } } ] }
|
||||
+]
|
||||
diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections
|
||||
index c812dcf6..f9cc6a67 100644
|
||||
--- a/docs/reference/libqmi-glib/libqmi-glib-common.sections
|
||||
+++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections
|
||||
@@ -30,6 +30,7 @@ HAVE_QMI_SERVICE_WDS
|
||||
HAVE_QMI_SERVICE_WMS
|
||||
HAVE_QMI_SERVICE_DPM
|
||||
HAVE_QMI_SERVICE_FOX
|
||||
+HAVE_QMI_SERVICE_SSC
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
@@ -1602,6 +1603,11 @@ QMI_TYPE_FOX_FIRMWARE_VERSION_TYPE
|
||||
qmi_fox_firmware_version_type_get_type
|
||||
</SECTION>
|
||||
|
||||
+<SECTION>
|
||||
+<FILE>qmi-enums-ssc</FILE>
|
||||
+<TITLE>SSC enumerations and flags</TITLE>
|
||||
+</SECTION>
|
||||
+
|
||||
<SECTION>
|
||||
<FILE>qmi-errors</FILE>
|
||||
<TITLE>Errors</TITLE>
|
||||
diff --git a/docs/reference/libqmi-glib/libqmi-glib-docs.xml b/docs/reference/libqmi-glib/libqmi-glib-docs.xml
|
||||
index f20b2049..604f5213 100644
|
||||
--- a/docs/reference/libqmi-glib/libqmi-glib-docs.xml
|
||||
+++ b/docs/reference/libqmi-glib/libqmi-glib-docs.xml
|
||||
@@ -573,6 +573,20 @@
|
||||
</section>
|
||||
</chapter>
|
||||
|
||||
+ <chapter>
|
||||
+ <title>Snapdragon Sensor Core Service (SSC)</title>
|
||||
+ <xi:include href="xml/qmi-client-ssc.xml"/>
|
||||
+ <section>
|
||||
+ <title>SSC Indications</title>
|
||||
+ <xi:include href="xml/qmi-indication-ssc-report-small.xml"/>
|
||||
+ <xi:include href="xml/qmi-indication-ssc-report-large.xml"/>
|
||||
+ </section>
|
||||
+ <section>
|
||||
+ <title>SSC Requests</title>
|
||||
+ <xi:include href="xml/qmi-message-ssc-control.xml"/>
|
||||
+ </section>
|
||||
+ </chapter>
|
||||
+
|
||||
<chapter>
|
||||
<title>Compatibility with older versions</title>
|
||||
<xi:include href="xml/qmi-compat.xml"/>
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 8711e0a0..898a2475 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
project(
|
||||
'libqmi', 'c',
|
||||
- version: '1.33.5',
|
||||
+ version: '1.33.6',
|
||||
license: 'GPL2',
|
||||
default_options: [
|
||||
'buildtype=debugoptimized',
|
||||
diff --git a/src/libqmi-glib/generated/meson.build b/src/libqmi-glib/generated/meson.build
|
||||
index a41acc0e..6fe8e10b 100644
|
||||
--- a/src/libqmi-glib/generated/meson.build
|
||||
+++ b/src/libqmi-glib/generated/meson.build
|
||||
@@ -67,7 +67,7 @@ gen_headers += custom_target(
|
||||
command: [
|
||||
python,
|
||||
qmi_mkenums,
|
||||
- '--fhead', '#ifndef __LIBQMI_GLIB_ENUM_TYPES_H__\n#define __LIBQMI_GLIB_ENUM_TYPES_H__\n#include "qmi-enums.h"\n#include "qmi-enums-wds.h"\n#include "qmi-enums-dms.h"\n#include "qmi-enums-nas.h"\n#include "qmi-enums-wms.h"\n#include "qmi-enums-pds.h"\n#include "qmi-enums-pdc.h"\n#include "qmi-enums-pbm.h"\n#include "qmi-enums-uim.h"\n#include "qmi-enums-sar.h"\n#include "qmi-enums-oma.h"\n#include "qmi-enums-wda.h"\n#include "qmi-enums-voice.h"\n#include "qmi-enums-loc.h"\n#include "qmi-enums-qos.h"\n#include "qmi-enums-gas.h"\n#include "qmi-enums-dsd.h"\n#include "qmi-enums-fox.h"\n#include "qmi-device.h"\n',
|
||||
+ '--fhead', '#ifndef __LIBQMI_GLIB_ENUM_TYPES_H__\n#define __LIBQMI_GLIB_ENUM_TYPES_H__\n#include "qmi-enums.h"\n#include "qmi-enums-wds.h"\n#include "qmi-enums-dms.h"\n#include "qmi-enums-nas.h"\n#include "qmi-enums-wms.h"\n#include "qmi-enums-pds.h"\n#include "qmi-enums-pdc.h"\n#include "qmi-enums-pbm.h"\n#include "qmi-enums-uim.h"\n#include "qmi-enums-sar.h"\n#include "qmi-enums-oma.h"\n#include "qmi-enums-wda.h"\n#include "qmi-enums-voice.h"\n#include "qmi-enums-loc.h"\n#include "qmi-enums-qos.h"\n#include "qmi-enums-gas.h"\n#include "qmi-enums-dsd.h"\n#include "qmi-enums-fox.h"\n#include "qmi-enums-ssc.h"\n#include "qmi-device.h"\n',
|
||||
'--template', files(templates_dir / enum_types + '.h.template'),
|
||||
'--ftail', '#endif /* __LIBQMI_GLIB_ENUM_TYPES_H__ */\n',
|
||||
'@INPUT@'],
|
||||
@@ -180,6 +180,7 @@ services = [
|
||||
'pds',
|
||||
'qos',
|
||||
'sar',
|
||||
+ 'ssc',
|
||||
'uim',
|
||||
'voice',
|
||||
'wda',
|
||||
diff --git a/src/libqmi-glib/libqmi-glib.h b/src/libqmi-glib/libqmi-glib.h
|
||||
index 867429f7..5f88684d 100644
|
||||
--- a/src/libqmi-glib/libqmi-glib.h
|
||||
+++ b/src/libqmi-glib/libqmi-glib.h
|
||||
@@ -99,6 +99,8 @@
|
||||
#include "qmi-enums-fox.h"
|
||||
#include "qmi-fox.h"
|
||||
|
||||
+#include "qmi-ssc.h"
|
||||
+
|
||||
/* generated */
|
||||
#include "qmi-error-types.h"
|
||||
#include "qmi-enum-types.h"
|
||||
diff --git a/src/libqmi-glib/meson.build b/src/libqmi-glib/meson.build
|
||||
index 84c8e636..39e5454b 100644
|
||||
--- a/src/libqmi-glib/meson.build
|
||||
+++ b/src/libqmi-glib/meson.build
|
||||
@@ -20,6 +20,7 @@ qmi_enums_headers = files(
|
||||
'qmi-enums-pds.h',
|
||||
'qmi-enums-qos.h',
|
||||
'qmi-enums-sar.h',
|
||||
+ 'qmi-enums-ssc.h',
|
||||
'qmi-enums-uim.h',
|
||||
'qmi-enums-voice.h',
|
||||
'qmi-enums-wda.h',
|
||||
diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c
|
||||
index 01e7ba13..f119d5fe 100644
|
||||
--- a/src/libqmi-glib/qmi-device.c
|
||||
+++ b/src/libqmi-glib/qmi-device.c
|
||||
@@ -57,6 +57,7 @@
|
||||
#include "qmi-dsd.h"
|
||||
#include "qmi-dpm.h"
|
||||
#include "qmi-fox.h"
|
||||
+#include "qmi-ssc.h"
|
||||
#include "qmi-utils.h"
|
||||
#include "qmi-helpers.h"
|
||||
#include "qmi-error-types.h"
|
||||
@@ -1310,6 +1311,11 @@ qmi_device_allocate_client (QmiDevice *self,
|
||||
case QMI_SERVICE_FOX:
|
||||
#if defined HAVE_QMI_SERVICE_FOX
|
||||
ctx->client_type = QMI_TYPE_CLIENT_FOX;
|
||||
+#endif
|
||||
+ break;
|
||||
+ case QMI_SERVICE_SSC:
|
||||
+#if defined HAVE_QMI_SERVICE_SSC
|
||||
+ ctx->client_type = QMI_TYPE_CLIENT_SSC;
|
||||
#endif
|
||||
break;
|
||||
|
||||
diff --git a/src/libqmi-glib/qmi-enums-ssc.h b/src/libqmi-glib/qmi-enums-ssc.h
|
||||
new file mode 100644
|
||||
index 00000000..7b3b619c
|
||||
--- /dev/null
|
||||
+++ b/src/libqmi-glib/qmi-enums-ssc.h
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
+/*
|
||||
+ * libqmi-glib -- GLib/GIO based library to control QMI devices
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Lesser General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Lesser General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Lesser General Public
|
||||
+ * License along with this library; if not, write to the
|
||||
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
+ * Boston, MA 02110-1301 USA.
|
||||
+ *
|
||||
+ * Copyright (C) 2022 Dylan Van Assche <me@dylanvanassche.be>
|
||||
+ */
|
||||
+
|
||||
+#ifndef _LIBQMI_GLIB_QMI_ENUMS_SSC_H_
|
||||
+#define _LIBQMI_GLIB_QMI_ENUMS_SSC_H_
|
||||
+
|
||||
+#if !defined (__LIBQMI_GLIB_H_INSIDE__) && !defined (LIBQMI_GLIB_COMPILATION)
|
||||
+#error "Only <libqmi-glib.h> can be included directly."
|
||||
+#endif
|
||||
+
|
||||
+/**
|
||||
+ * SECTION: qmi-enums-ssc
|
||||
+ * @title: SSC enumerations and flags
|
||||
+ * @short_description: Enumerations and flags in the SSC service.
|
||||
+ *
|
||||
+ * This section defines enumerations and flags used in the SSC service
|
||||
+ * interface.
|
||||
+ */
|
||||
+
|
||||
+#endif /* _LIBQMI_GLIB_QMI_ENUMS_SSC_H_ */
|
||||
+
|
||||
diff --git a/src/libqmi-glib/qmi-enums.h b/src/libqmi-glib/qmi-enums.h
|
||||
index b50841c2..4f77097c 100644
|
||||
--- a/src/libqmi-glib/qmi-enums.h
|
||||
+++ b/src/libqmi-glib/qmi-enums.h
|
||||
@@ -86,6 +86,7 @@
|
||||
* @QMI_SERVICE_RMS: Remote Management Service.
|
||||
* @QMI_SERVICE_OMA: Open Mobile Alliance device management service.
|
||||
* @QMI_SERVICE_FOX: Foxconn General Modem Service. Since: 1.32.
|
||||
+ * @QMI_SERVICE_SSC: Snapdragon Sensore Core Service. Since: 1.34.
|
||||
* @QMI_SERVICE_FOTA: Firmware Over The Air service. Since: 1.24.
|
||||
* @QMI_SERVICE_GMS: Telit General Modem Service. Since: 1.24.
|
||||
* @QMI_SERVICE_GAS: Telit General Application Service. Since: 1.24.
|
||||
@@ -148,6 +149,7 @@ typedef enum { /*< since=1.0 >*/
|
||||
QMI_SERVICE_FOTA = 0xE6,
|
||||
QMI_SERVICE_GMS = 0xE7,
|
||||
QMI_SERVICE_GAS = 0xE8,
|
||||
+ QMI_SERVICE_SSC = 0x190,
|
||||
} QmiService;
|
||||
|
||||
/**
|
||||
diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c
|
||||
index a51b77e1..dff0be39 100644
|
||||
--- a/src/libqmi-glib/qmi-message.c
|
||||
+++ b/src/libqmi-glib/qmi-message.c
|
||||
@@ -1728,6 +1728,11 @@ qmi_message_get_printable_full (QmiMessage *self,
|
||||
case QMI_SERVICE_FOX:
|
||||
#if defined HAVE_QMI_SERVICE_FOX
|
||||
contents = __qmi_message_fox_get_printable (self, context, line_prefix);
|
||||
+#endif
|
||||
+ break;
|
||||
+ case QMI_SERVICE_SSC:
|
||||
+#if defined HAVE_QMI_SERVICE_SSC
|
||||
+ contents = __qmi_message_ssc_get_printable (self, context, line_prefix);
|
||||
#endif
|
||||
break;
|
||||
|
||||
@@ -1846,6 +1851,7 @@ __qmi_message_is_abortable (QmiMessage *self,
|
||||
case QMI_SERVICE_DSD:
|
||||
case QMI_SERVICE_QOS:
|
||||
case QMI_SERVICE_FOX:
|
||||
+ case QMI_SERVICE_SSC:
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c
|
||||
index a37eaab6..d2834450 100644
|
||||
--- a/src/qmicli/qmicli.c
|
||||
+++ b/src/qmicli/qmicli.c
|
||||
@@ -510,6 +510,7 @@ allocate_client_ready (QmiDevice *dev,
|
||||
case QMI_SERVICE_FOTA:
|
||||
case QMI_SERVICE_PDS:
|
||||
case QMI_SERVICE_OMA:
|
||||
+ case QMI_SERVICE_SSC:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,369 @@
|
||||
From 34e99dad0623d7ad4fc14b36dd77fb345da5d5f5 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Tue, 28 Mar 2023 20:19:58 +0200
|
||||
Subject: [PATCH 2/7] libqmi-glib,message: handle QMUX and QRTR messages
|
||||
|
||||
Handle QMUX and QRTR messages in QMI Message:
|
||||
|
||||
- Set a different marker for services > G_MAXUINT8
|
||||
- Handle different markers in helper methods
|
||||
- Print QMI Messages differently depending on marker
|
||||
---
|
||||
src/libqmi-glib/qmi-message.c | 157 +++++++++++++++++++++++++---------
|
||||
src/libqmi-glib/qmi-message.h | 23 ++++-
|
||||
2 files changed, 139 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c
|
||||
index dff0be39..812c8b92 100644
|
||||
--- a/src/libqmi-glib/qmi-message.c
|
||||
+++ b/src/libqmi-glib/qmi-message.c
|
||||
@@ -64,13 +64,19 @@
|
||||
|
||||
#define PACKED __attribute__((packed))
|
||||
|
||||
-struct qmux {
|
||||
+struct qmux_header {
|
||||
guint16 length;
|
||||
guint8 flags;
|
||||
guint8 service;
|
||||
guint8 client;
|
||||
} PACKED;
|
||||
|
||||
+struct qrtr_header {
|
||||
+ guint16 length;
|
||||
+ guint16 service;
|
||||
+ guint8 client;
|
||||
+} PACKED;
|
||||
+
|
||||
struct control_header {
|
||||
guint8 flags;
|
||||
guint8 transaction;
|
||||
@@ -103,7 +109,10 @@ struct service_message {
|
||||
|
||||
struct full_message {
|
||||
guint8 marker;
|
||||
- struct qmux qmux;
|
||||
+ union {
|
||||
+ struct qmux_header qmux;
|
||||
+ struct qrtr_header qrtr;
|
||||
+ } header;
|
||||
union {
|
||||
struct control_message control;
|
||||
struct service_message service;
|
||||
@@ -113,26 +122,39 @@ struct full_message {
|
||||
static inline gboolean
|
||||
message_is_control (QmiMessage *self)
|
||||
{
|
||||
- return ((struct full_message *)(self->data))->qmux.service == QMI_SERVICE_CTL;
|
||||
+ if (((struct full_message *)(self->data))->marker == QMI_MESSAGE_QMUX_MARKER)
|
||||
+ return ((struct full_message *)(self->data))->header.qmux.service == QMI_SERVICE_CTL;
|
||||
+
|
||||
+ return ((struct full_message *)(self->data))->header.qrtr.service == QMI_SERVICE_CTL;
|
||||
}
|
||||
|
||||
static inline guint16
|
||||
get_qmux_length (QmiMessage *self)
|
||||
{
|
||||
- return GUINT16_FROM_LE (((struct full_message *)(self->data))->qmux.length);
|
||||
+ if (((struct full_message *)(self->data))->marker == QMI_MESSAGE_QMUX_MARKER)
|
||||
+ return GUINT16_FROM_LE (((struct full_message *)(self->data))->header.qmux.length);
|
||||
+
|
||||
+ return GUINT16_FROM_LE (((struct full_message *)(self->data))->header.qrtr.length);
|
||||
}
|
||||
|
||||
static inline void
|
||||
set_qmux_length (QmiMessage *self,
|
||||
guint16 length)
|
||||
{
|
||||
- ((struct full_message *)(self->data))->qmux.length = GUINT16_TO_LE (length);
|
||||
+ if (((struct full_message *)(self->data))->marker == QMI_MESSAGE_QMUX_MARKER)
|
||||
+ ((struct full_message *)(self->data))->header.qmux.length = GUINT16_TO_LE (length);
|
||||
+ else
|
||||
+ ((struct full_message *)(self->data))->header.qrtr.length = GUINT16_TO_LE (length);
|
||||
}
|
||||
|
||||
static inline guint8
|
||||
get_qmux_flags (QmiMessage *self)
|
||||
{
|
||||
- return ((struct full_message *)(self->data))->qmux.flags;
|
||||
+ if (((struct full_message *)(self->data))->marker == QMI_MESSAGE_QMUX_MARKER)
|
||||
+ return ((struct full_message *)(self->data))->header.qmux.flags;
|
||||
+
|
||||
+ /* QMI_MESSAGE_QRTR_MARKER does not support flags */
|
||||
+ return 0x00;
|
||||
}
|
||||
|
||||
static inline guint8
|
||||
@@ -183,7 +205,10 @@ qmi_message_get_service (QmiMessage *self)
|
||||
{
|
||||
g_return_val_if_fail (self != NULL, QMI_SERVICE_UNKNOWN);
|
||||
|
||||
- return (QmiService)((struct full_message *)(self->data))->qmux.service;
|
||||
+ if (((struct full_message *)(self->data))->marker == QMI_MESSAGE_QMUX_MARKER)
|
||||
+ return (QmiService)((struct full_message *)(self->data))->header.qmux.service;
|
||||
+ else
|
||||
+ return (QmiService)((struct full_message *)(self->data))->header.qrtr.service;
|
||||
}
|
||||
|
||||
guint8
|
||||
@@ -191,7 +216,10 @@ qmi_message_get_client_id (QmiMessage *self)
|
||||
{
|
||||
g_return_val_if_fail (self != NULL, 0);
|
||||
|
||||
- return ((struct full_message *)(self->data))->qmux.client;
|
||||
+ if (((struct full_message *)(self->data))->marker == QMI_MESSAGE_QMUX_MARKER)
|
||||
+ return ((struct full_message *)(self->data))->header.qmux.client;
|
||||
+
|
||||
+ return ((struct full_message *)(self->data))->header.qrtr.client;
|
||||
}
|
||||
|
||||
guint16
|
||||
@@ -319,16 +347,17 @@ message_check (QmiMessage *self,
|
||||
guint8 *end;
|
||||
struct tlv *tlv;
|
||||
|
||||
- if (self->len < (1 + sizeof (struct qmux))) {
|
||||
+ if (self->len < (1 + sizeof (struct qmux_header))) {
|
||||
g_set_error (error,
|
||||
QMI_CORE_ERROR,
|
||||
QMI_CORE_ERROR_INVALID_MESSAGE,
|
||||
"QMUX length too short for QMUX header (%u < %" G_GSIZE_FORMAT ")",
|
||||
- self->len, 1 + sizeof (struct qmux));
|
||||
+ self->len, 1 + sizeof (struct qmux_header));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
- if (((struct full_message *)(self->data))->marker != QMI_MESSAGE_QMUX_MARKER) {
|
||||
+ if (((struct full_message *)(self->data))->marker != QMI_MESSAGE_QMUX_MARKER &&
|
||||
+ ((struct full_message *)(self->data))->marker != QMI_MESSAGE_QRTR_MARKER) {
|
||||
g_set_error (error,
|
||||
QMI_CORE_ERROR,
|
||||
QMI_CORE_ERROR_INVALID_MESSAGE,
|
||||
@@ -352,9 +381,9 @@ message_check (QmiMessage *self,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
- header_length = sizeof (struct qmux) + (message_is_control (self) ?
|
||||
- sizeof (struct control_header) :
|
||||
- sizeof (struct service_header));
|
||||
+ header_length = sizeof (struct qmux_header) + (message_is_control (self) ?
|
||||
+ sizeof (struct control_header) :
|
||||
+ sizeof (struct service_header));
|
||||
|
||||
if (qmux_length < header_length) {
|
||||
g_set_error (error,
|
||||
@@ -418,9 +447,10 @@ qmi_message_new (QmiService service,
|
||||
NULL);
|
||||
|
||||
/* Create array with enough size for the QMUX marker, the QMUX header and
|
||||
- * the QMI header */
|
||||
+ * the QMI header. Use the qmux_header size for both QMUX and QRTR messages
|
||||
+ * as they are the same size. */
|
||||
buffer_len = (1 +
|
||||
- sizeof (struct qmux) +
|
||||
+ sizeof (struct qmux_header) +
|
||||
(service == QMI_SERVICE_CTL ? sizeof (struct control_header) : sizeof (struct service_header)));
|
||||
|
||||
/* NOTE:
|
||||
@@ -435,10 +465,17 @@ qmi_message_new (QmiService service,
|
||||
g_byte_array_set_size (self, buffer_len);
|
||||
|
||||
buffer = (struct full_message *)(self->data);
|
||||
- buffer->marker = QMI_MESSAGE_QMUX_MARKER;
|
||||
- buffer->qmux.flags = 0;
|
||||
- buffer->qmux.service = service;
|
||||
- buffer->qmux.client = client_id;
|
||||
+ /* QMI messages of services up to 255 are QMUX compatible */
|
||||
+ if (service <= G_MAXUINT8) {
|
||||
+ buffer->marker = QMI_MESSAGE_QMUX_MARKER;
|
||||
+ buffer->header.qmux.flags = 0;
|
||||
+ buffer->header.qmux.service = service;
|
||||
+ buffer->header.qmux.client = client_id;
|
||||
+ } else {
|
||||
+ buffer->marker = QMI_MESSAGE_QRTR_MARKER;
|
||||
+ buffer->header.qrtr.service = service;
|
||||
+ buffer->header.qrtr.client = client_id;
|
||||
+ }
|
||||
|
||||
if (service == QMI_SERVICE_CTL) {
|
||||
buffer->qmi.control.header.flags = 0;
|
||||
@@ -480,18 +517,28 @@ qmi_message_new_from_data (QmiService service,
|
||||
message_len = sizeof (struct service_header) +
|
||||
((struct service_message *)(qmi_data->data))->header.tlv_length;
|
||||
}
|
||||
- buffer_len = (1 + sizeof (struct qmux) + message_len);
|
||||
+
|
||||
+ /* Use the size of qmux_header for both QMUX and QRTR as they are the same */
|
||||
+ buffer_len = (1 + sizeof (struct qmux_header) + message_len);
|
||||
+
|
||||
/* Create the GByteArray with buffer_len bytes preallocated */
|
||||
self = g_byte_array_sized_new (buffer_len);
|
||||
g_byte_array_set_size (self, buffer_len);
|
||||
|
||||
/* Set up fake QMUX header */
|
||||
buffer = (struct full_message *)(self->data);
|
||||
- buffer->marker = QMI_MESSAGE_QMUX_MARKER;
|
||||
- buffer->qmux.length = GUINT16_TO_LE (buffer_len - 1);
|
||||
- buffer->qmux.flags = 0;
|
||||
- buffer->qmux.service = service;
|
||||
- buffer->qmux.client = client_id;
|
||||
+ if (service <= G_MAXUINT8) {
|
||||
+ buffer->marker = QMI_MESSAGE_QMUX_MARKER;
|
||||
+ buffer->header.qmux.length = GUINT16_TO_LE (buffer_len - 1);
|
||||
+ buffer->header.qmux.flags = 0;
|
||||
+ buffer->header.qmux.service = service;
|
||||
+ buffer->header.qmux.client = client_id;
|
||||
+ } else {
|
||||
+ buffer->marker = QMI_MESSAGE_QRTR_MARKER;
|
||||
+ buffer->header.qrtr.length = GUINT16_TO_LE (buffer_len - 1);
|
||||
+ buffer->header.qrtr.service = service;
|
||||
+ buffer->header.qrtr.client = client_id;
|
||||
+ }
|
||||
|
||||
/* Move bytes from the qmi_data array to the newly created message */
|
||||
memcpy (&buffer->qmi, qmi_data->data, message_len);
|
||||
@@ -520,7 +567,8 @@ qmi_message_response_new (QmiMessage *request,
|
||||
qmi_message_get_message_id (request));
|
||||
|
||||
/* Set sender type flag */
|
||||
- ((struct full_message *)(((GByteArray *)response)->data))->qmux.flags = 0x80;
|
||||
+ if (qmi_message_get_service (request) <= G_MAXUINT8)
|
||||
+ ((struct full_message *)(((GByteArray *)response)->data))->header.qmux.flags = 0x80;
|
||||
|
||||
/* Set the response flag */
|
||||
if (message_is_control (request))
|
||||
@@ -556,6 +604,15 @@ qmi_message_unref (QmiMessage *self)
|
||||
g_byte_array_unref (self);
|
||||
}
|
||||
|
||||
+guint8
|
||||
+qmi_message_get_marker (QmiMessage *self)
|
||||
+{
|
||||
+ if (self == NULL)
|
||||
+ return 0x00;
|
||||
+
|
||||
+ return ((struct full_message *)(self->data))->marker;
|
||||
+}
|
||||
+
|
||||
const guint8 *
|
||||
qmi_message_get_raw (QmiMessage *self,
|
||||
gsize *length,
|
||||
@@ -1503,18 +1560,26 @@ qmi_message_new_from_raw (GByteArray *raw,
|
||||
GError **error)
|
||||
{
|
||||
GByteArray *self;
|
||||
+ gsize header_len;
|
||||
gsize message_len;
|
||||
|
||||
g_return_val_if_fail (raw != NULL, NULL);
|
||||
|
||||
+ if (((struct full_message *)raw->data)->marker == QMI_MESSAGE_QMUX_MARKER) {
|
||||
+ header_len = sizeof (struct qmux_header);
|
||||
+ message_len = GUINT16_FROM_LE (((struct full_message *)raw->data)->header.qmux.length);
|
||||
+ } else {
|
||||
+ header_len = sizeof (struct qrtr_header);
|
||||
+ message_len = GUINT16_FROM_LE (((struct full_message *)raw->data)->header.qrtr.length);
|
||||
+ }
|
||||
+
|
||||
/* If we didn't even read the QMUX header (comes after the 1-byte marker),
|
||||
* leave */
|
||||
- if (raw->len < (sizeof (struct qmux) + 1))
|
||||
+ if (raw->len < (header_len + 1))
|
||||
return NULL;
|
||||
|
||||
/* We need to have read the length reported by the QMUX header (plus the
|
||||
* initial 1-byte marker) */
|
||||
- message_len = GUINT16_FROM_LE (((struct full_message *)raw->data)->qmux.length);
|
||||
if (raw->len < (message_len + 1))
|
||||
return NULL;
|
||||
|
||||
@@ -1605,17 +1670,29 @@ qmi_message_get_printable_full (QmiMessage *self,
|
||||
line_prefix = "";
|
||||
|
||||
printable = g_string_new ("");
|
||||
- g_string_append_printf (printable,
|
||||
- "%sQMUX:\n"
|
||||
- "%s length = %u\n"
|
||||
- "%s flags = 0x%02x\n"
|
||||
- "%s service = \"%s\"\n"
|
||||
- "%s client = %u\n",
|
||||
- line_prefix,
|
||||
- line_prefix, get_qmux_length (self),
|
||||
- line_prefix, get_qmux_flags (self),
|
||||
- line_prefix, qmi_service_get_string (qmi_message_get_service (self)),
|
||||
- line_prefix, qmi_message_get_client_id (self));
|
||||
+ if (qmi_message_get_marker(self) == QMI_MESSAGE_QMUX_MARKER) {
|
||||
+ g_string_append_printf (printable,
|
||||
+ "%sQMUX:\n"
|
||||
+ "%s length = %u\n"
|
||||
+ "%s flags = 0x%02x\n"
|
||||
+ "%s service = \"%s\"\n"
|
||||
+ "%s client = %u\n",
|
||||
+ line_prefix,
|
||||
+ line_prefix, get_qmux_length (self),
|
||||
+ line_prefix, get_qmux_flags (self),
|
||||
+ line_prefix, qmi_service_get_string (qmi_message_get_service (self)),
|
||||
+ line_prefix, qmi_message_get_client_id (self));
|
||||
+ } else {
|
||||
+ g_string_append_printf (printable,
|
||||
+ "%sQRTR:\n"
|
||||
+ "%s length = %u\n"
|
||||
+ "%s service = \"%s\"\n"
|
||||
+ "%s client = %u\n",
|
||||
+ line_prefix,
|
||||
+ line_prefix, get_qmux_length (self),
|
||||
+ line_prefix, qmi_service_get_string (qmi_message_get_service (self)),
|
||||
+ line_prefix, qmi_message_get_client_id (self));
|
||||
+ }
|
||||
|
||||
if (qmi_message_get_service (self) == QMI_SERVICE_CTL)
|
||||
qmi_flags_str = qmi_ctl_flag_build_string_from_mask (get_qmi_flags (self));
|
||||
diff --git a/src/libqmi-glib/qmi-message.h b/src/libqmi-glib/qmi-message.h
|
||||
index 7cf6ee74..cf2b0e54 100644
|
||||
--- a/src/libqmi-glib/qmi-message.h
|
||||
+++ b/src/libqmi-glib/qmi-message.h
|
||||
@@ -57,12 +57,21 @@ G_BEGIN_DECLS
|
||||
/**
|
||||
* QMI_MESSAGE_QMUX_MARKER:
|
||||
*
|
||||
- * First byte of every QMI message.
|
||||
+ * First byte of every QMI QMUX message.
|
||||
*
|
||||
* Since: 1.0
|
||||
*/
|
||||
#define QMI_MESSAGE_QMUX_MARKER (guint8) 0x01
|
||||
|
||||
+/**
|
||||
+ * QMI_MESSAGE_QRTR_MARKER:
|
||||
+ *
|
||||
+ * First byte of every QRTR QMI message.
|
||||
+ *
|
||||
+ * Since: 1.34
|
||||
+ */
|
||||
+#define QMI_MESSAGE_QRTR_MARKER (guint8) 0x02
|
||||
+
|
||||
/**
|
||||
* QmiMessage:
|
||||
*
|
||||
@@ -304,6 +313,18 @@ const guint8 *qmi_message_get_data (QmiMessage *self,
|
||||
gsize *length,
|
||||
GError **error);
|
||||
|
||||
+/**
|
||||
+ * qmi_message_get_marker:
|
||||
+ * @self: a #QmiMessage.
|
||||
+ *
|
||||
+ * Gets the marker of the #QmiMessage.
|
||||
+ *
|
||||
+ * Returns: The message marker, or 0x00 if message is NULL.
|
||||
+ *
|
||||
+ * Since: 1.34
|
||||
+ */
|
||||
+guint8 qmi_message_get_marker (QmiMessage *self);
|
||||
+
|
||||
/*****************************************************************************/
|
||||
/* TLV builder & writer */
|
||||
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
From 929894825c0caa1876e73bd30190e093af2a5022 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Wed, 29 Mar 2023 16:43:12 +0200
|
||||
Subject: [PATCH 3/7] libqmi-glib,proxy: handle QMUX and QRTR messages
|
||||
|
||||
Handle QMUX and QRTR messages in QMI Message:
|
||||
|
||||
- Use QmiService enum instead of guint8
|
||||
- Handle service ID extraction from QMI message based on marker
|
||||
- Allow messages with QMUX and QRTR marker
|
||||
---
|
||||
src/libqmi-glib/qmi-proxy.c | 17 ++++++++++-------
|
||||
1 file changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/libqmi-glib/qmi-proxy.c b/src/libqmi-glib/qmi-proxy.c
|
||||
index eeff4bf0..8fc49071 100644
|
||||
--- a/src/libqmi-glib/qmi-proxy.c
|
||||
+++ b/src/libqmi-glib/qmi-proxy.c
|
||||
@@ -596,7 +596,7 @@ track_cid (Client *client,
|
||||
guint16 error_status;
|
||||
guint16 error_code;
|
||||
GError *error = NULL;
|
||||
- guint8 service_tmp;
|
||||
+ QmiService service_tmp;
|
||||
QmiClientInfo info;
|
||||
gint i;
|
||||
|
||||
@@ -616,13 +616,14 @@ track_cid (Client *client,
|
||||
|
||||
offset = 0;
|
||||
if (((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_OUTPUT_TLV_ALLOCATION_INFO, NULL, &error)) == 0) ||
|
||||
- !qmi_message_tlv_read_guint8 (message, init_offset, &offset, &service_tmp, &error) ||
|
||||
+ (qmi_message_get_marker (message) == QMI_MESSAGE_QMUX_MARKER && !qmi_message_tlv_read_guint8 (message, init_offset, &offset, (guint8 *) &service_tmp, &error)) ||
|
||||
+ (qmi_message_get_marker (message) == QMI_MESSAGE_QRTR_MARKER && !qmi_message_tlv_read_guint16 (message, init_offset, &offset, QMI_ENDIAN_LITTLE, (guint16 *) &service_tmp, &error)) ||
|
||||
!qmi_message_tlv_read_guint8 (message, init_offset, &offset, &(info.cid), &error)) {
|
||||
g_warning ("invalid 'CTL allocate CID' response: missing or invalid allocation info TLV: %s", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
- info.service = (QmiService)service_tmp;
|
||||
+ info.service = service_tmp;
|
||||
|
||||
/* Check if it already exists */
|
||||
i = qmi_client_info_array_lookup_cid (client->qmi_client_info_array, info.service, info.cid);
|
||||
@@ -643,7 +644,7 @@ untrack_cid (QmiProxy *self,
|
||||
gsize offset = 0;
|
||||
gsize init_offset;
|
||||
GError *error = NULL;
|
||||
- guint8 service_tmp;
|
||||
+ QmiService service_tmp;
|
||||
QmiClientInfo info;
|
||||
gint i;
|
||||
|
||||
@@ -651,13 +652,14 @@ untrack_cid (QmiProxy *self,
|
||||
g_assert (qmi_message_is_request (message));
|
||||
|
||||
if (((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_INPUT_TLV_RELEASE_INFO, NULL, &error)) == 0) ||
|
||||
- !qmi_message_tlv_read_guint8 (message, init_offset, &offset, &service_tmp, &error) ||
|
||||
+ (qmi_message_get_marker (message) == QMI_MESSAGE_QMUX_MARKER && !qmi_message_tlv_read_guint8 (message, init_offset, &offset, (guint8 *) &service_tmp, &error)) ||
|
||||
+ (qmi_message_get_marker (message) == QMI_MESSAGE_QRTR_MARKER && !qmi_message_tlv_read_guint16 (message, init_offset, &offset, QMI_ENDIAN_LITTLE, (guint16 *) &service_tmp, &error)) ||
|
||||
!qmi_message_tlv_read_guint8 (message, init_offset, &offset, &(info.cid), &error)) {
|
||||
g_warning ("invalid 'CTL release CID' request: missing or invalid release info TLV: %s", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
- info.service = (QmiService)service_tmp;
|
||||
+ info.service = service_tmp;
|
||||
|
||||
/* Check if it already exists in the client */
|
||||
i = qmi_client_info_array_lookup_cid (client->qmi_client_info_array, info.service, info.cid);
|
||||
@@ -918,7 +920,8 @@ parse_request (QmiProxy *self,
|
||||
* If we broke framing, an error should be reported and the device
|
||||
* should get closed */
|
||||
if (client->buffer->len > 0 &&
|
||||
- client->buffer->data[0] != QMI_MESSAGE_QMUX_MARKER) {
|
||||
+ client->buffer->data[0] != QMI_MESSAGE_QMUX_MARKER &&
|
||||
+ client->buffer->data[0] != QMI_MESSAGE_QRTR_MARKER) {
|
||||
/* TODO: Report fatal error */
|
||||
g_warning ("QMI framing error detected");
|
||||
return;
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
From 141f9627bb1ba36dcfba166d8823daa541416432 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Thu, 30 Mar 2023 19:55:02 +0200
|
||||
Subject: [PATCH 4/7] libqmi-glib,endpoint: handle QMUX and QRTR messages
|
||||
|
||||
Handle QMUX and QRTR messages in QMI Message:
|
||||
|
||||
- Allow QMI messages with both QMUX and QRTR markers
|
||||
---
|
||||
src/libqmi-glib/qmi-endpoint.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/libqmi-glib/qmi-endpoint.c b/src/libqmi-glib/qmi-endpoint.c
|
||||
index 4743e253..97503b29 100644
|
||||
--- a/src/libqmi-glib/qmi-endpoint.c
|
||||
+++ b/src/libqmi-glib/qmi-endpoint.c
|
||||
@@ -67,7 +67,8 @@ qmi_endpoint_parse_buffer (QmiEndpoint *self,
|
||||
* If we broke framing, an error should be reported and the device
|
||||
* should get closed */
|
||||
if (self->priv->buffer->len > 0 &&
|
||||
- self->priv->buffer->data[0] != QMI_MESSAGE_QMUX_MARKER) {
|
||||
+ self->priv->buffer->data[0] != QMI_MESSAGE_QMUX_MARKER &&
|
||||
+ self->priv->buffer->data[0] != QMI_MESSAGE_QRTR_MARKER) {
|
||||
g_set_error (error,
|
||||
QMI_PROTOCOL_ERROR,
|
||||
QMI_PROTOCOL_ERROR_MALFORMED_MESSAGE,
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,298 @@
|
||||
From 4284ca2fb0ac4e73f05e659739c6b24aed2a3405 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Thu, 30 Mar 2023 20:38:43 +0200
|
||||
Subject: [PATCH 5/7] libqmi-glib,device: handle QMUX and QRTR messages
|
||||
|
||||
Handle QMUX and QRTR messages in QMI Message:
|
||||
|
||||
- Add internal calls for CTL service which is handled by QRTR endpoint
|
||||
- Adjust QMI Device to send internal CTL service messages when services
|
||||
are out of reach of QMUX compatible endpoints.
|
||||
---
|
||||
data/qmi-service-ctl.json | 57 ++++++++++++-
|
||||
src/libqmi-glib/qmi-device.c | 152 +++++++++++++++++++++++++++++++----
|
||||
2 files changed, 192 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/data/qmi-service-ctl.json b/data/qmi-service-ctl.json
|
||||
index 63f2a142..2c567ec3 100644
|
||||
--- a/data/qmi-service-ctl.json
|
||||
+++ b/data/qmi-service-ctl.json
|
||||
@@ -168,6 +168,61 @@
|
||||
"type" : "TLV",
|
||||
"since" : "1.8",
|
||||
"format" : "string" } ],
|
||||
- "output" : [ { "common-ref" : "Operation Result" } ] }
|
||||
+ "output" : [ { "common-ref" : "Operation Result" } ] },
|
||||
|
||||
+ // *********************************************************************************
|
||||
+ // Internal
|
||||
+ { "name" : "Allocate CID QRTR",
|
||||
+ "type" : "Message",
|
||||
+ "service" : "CTL",
|
||||
+ "id" : "0xFF22",
|
||||
+ "since" : "1.0",
|
||||
+ "input" : [ { "name" : "Service",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.0",
|
||||
+ "format" : "guint16" ,
|
||||
+ "public-format" : "QmiService" } ],
|
||||
+ "output" : [ { "common-ref" : "Operation Result" },
|
||||
+ { "name" : "Allocation Info",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.0",
|
||||
+ "format" : "sequence",
|
||||
+ "contents" : [ { "name" : "Service",
|
||||
+ "format" : "guint16",
|
||||
+ "public-format" : "QmiService" },
|
||||
+ { "name" : "Cid",
|
||||
+ "format" : "guint8" } ],
|
||||
+ "prerequisites": [ { "common-ref" : "Success" } ] } ] },
|
||||
+
|
||||
+ // *********************************************************************************
|
||||
+ // Internal
|
||||
+ { "name" : "Release CID QRTR",
|
||||
+ "type" : "Message",
|
||||
+ "service" : "CTL",
|
||||
+ "id" : "0xFF23",
|
||||
+ "since" : "1.0",
|
||||
+ "input" : [ { "name" : "Release Info",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.0",
|
||||
+ "format" : "sequence",
|
||||
+ "contents" : [ { "name" : "Service",
|
||||
+ "format" : "guint16",
|
||||
+ "public-format" : "QmiService" },
|
||||
+ { "name" : "Cid",
|
||||
+ "format" : "guint8" } ] } ],
|
||||
+ "output" : [ { "common-ref" : "Operation Result" },
|
||||
+ { "name" : "Release Info",
|
||||
+ "id" : "0x01",
|
||||
+ "type" : "TLV",
|
||||
+ "since" : "1.0",
|
||||
+ "format" : "sequence",
|
||||
+ "contents" : [ { "name" : "Service",
|
||||
+ "format" : "guint16",
|
||||
+ "public-format" : "QmiService" },
|
||||
+ { "name" : "Cid",
|
||||
+ "format" : "guint8" } ],
|
||||
+ "prerequisites": [ { "common-ref" : "Success" } ] } ] }
|
||||
]
|
||||
diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c
|
||||
index f119d5fe..75ab3419 100644
|
||||
--- a/src/libqmi-glib/qmi-device.c
|
||||
+++ b/src/libqmi-glib/qmi-device.c
|
||||
@@ -1137,7 +1137,7 @@ allocate_cid_ready (QmiClientCtl *client_ctl,
|
||||
/* Check result of the async operation */
|
||||
output = qmi_client_ctl_allocate_cid_finish (client_ctl, res, &error);
|
||||
if (!output) {
|
||||
- g_prefix_error (&error, "CID allocation failed in the CTL client: ");
|
||||
+ g_prefix_error (&error, "CID allocation failed in the CTL client (QMUX): ");
|
||||
g_task_return_error (task, error);
|
||||
g_object_unref (task);
|
||||
return;
|
||||
@@ -1161,7 +1161,7 @@ allocate_cid_ready (QmiClientCtl *client_ctl,
|
||||
task,
|
||||
QMI_CORE_ERROR,
|
||||
QMI_CORE_ERROR_FAILED,
|
||||
- "CID allocation failed in the CTL client: "
|
||||
+ "CID allocation failed in the CTL client (QMUX): "
|
||||
"Service mismatch (requested '%s', got '%s')",
|
||||
qmi_service_get_string (ctx->service),
|
||||
qmi_service_get_string (service));
|
||||
@@ -1175,6 +1175,58 @@ allocate_cid_ready (QmiClientCtl *client_ctl,
|
||||
qmi_message_ctl_allocate_cid_output_unref (output);
|
||||
}
|
||||
|
||||
+static void
|
||||
+allocate_cid_qrtr_ready (QmiClientCtl *client_ctl,
|
||||
+ GAsyncResult *res,
|
||||
+ GTask *task)
|
||||
+{
|
||||
+ QmiMessageCtlAllocateCidQrtrOutput *output;
|
||||
+ QmiService service;
|
||||
+ guint8 cid;
|
||||
+ GError *error = NULL;
|
||||
+ AllocateClientContext *ctx;
|
||||
+
|
||||
+ /* Check result of the async operation */
|
||||
+ output = qmi_client_ctl_allocate_cid_qrtr_finish (client_ctl, res, &error);
|
||||
+ if (!output) {
|
||||
+ g_prefix_error (&error, "CID allocation failed in the CTL client (QRTR): ");
|
||||
+ g_task_return_error (task, error);
|
||||
+ g_object_unref (task);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Check result of the QMI operation */
|
||||
+ if (!qmi_message_ctl_allocate_cid_qrtr_output_get_result (output, &error)) {
|
||||
+ g_task_return_error (task, error);
|
||||
+ g_object_unref (task);
|
||||
+ qmi_message_ctl_allocate_cid_qrtr_output_unref (output);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Allocation info is mandatory when result is success */
|
||||
+ g_assert (qmi_message_ctl_allocate_cid_qrtr_output_get_allocation_info (output, &service, &cid, NULL));
|
||||
+
|
||||
+ ctx = g_task_get_task_data (task);
|
||||
+
|
||||
+ if (service != ctx->service) {
|
||||
+ g_task_return_new_error (
|
||||
+ task,
|
||||
+ QMI_CORE_ERROR,
|
||||
+ QMI_CORE_ERROR_FAILED,
|
||||
+ "CID allocation failed in the CTL client (QRTR): "
|
||||
+ "Service mismatch (requested '%s', got '%s')",
|
||||
+ qmi_service_get_string (ctx->service),
|
||||
+ qmi_service_get_string (service));
|
||||
+ g_object_unref (task);
|
||||
+ qmi_message_ctl_allocate_cid_qrtr_output_unref (output);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ ctx->cid = cid;
|
||||
+ build_client_object (task);
|
||||
+ qmi_message_ctl_allocate_cid_qrtr_output_unref (output);
|
||||
+}
|
||||
+
|
||||
void
|
||||
qmi_device_allocate_client (QmiDevice *self,
|
||||
QmiService service,
|
||||
@@ -1365,13 +1417,13 @@ qmi_device_allocate_client (QmiDevice *self,
|
||||
}
|
||||
|
||||
/* Allocate a new CID for the client to be created */
|
||||
- if (cid == QMI_CID_NONE) {
|
||||
+ if (cid == QMI_CID_NONE && ctx->service <= G_MAXUINT8) {
|
||||
QmiMessageCtlAllocateCidInput *input;
|
||||
|
||||
input = qmi_message_ctl_allocate_cid_input_new ();
|
||||
qmi_message_ctl_allocate_cid_input_set_service (input, ctx->service, NULL);
|
||||
|
||||
- g_debug ("[%s] allocating new client ID...",
|
||||
+ g_debug ("[%s] allocating new client ID (QMUX)...",
|
||||
qmi_file_get_path_display (self->priv->file));
|
||||
qmi_client_ctl_allocate_cid (self->priv->client_ctl,
|
||||
input,
|
||||
@@ -1382,6 +1434,23 @@ qmi_device_allocate_client (QmiDevice *self,
|
||||
|
||||
qmi_message_ctl_allocate_cid_input_unref (input);
|
||||
return;
|
||||
+ } else if (cid == QMI_CID_NONE) {
|
||||
+ QmiMessageCtlAllocateCidQrtrInput *input;
|
||||
+
|
||||
+ input = qmi_message_ctl_allocate_cid_qrtr_input_new ();
|
||||
+ qmi_message_ctl_allocate_cid_qrtr_input_set_service (input, ctx->service, NULL);
|
||||
+
|
||||
+ g_debug ("[%s] allocating new client ID (QRTR)...",
|
||||
+ qmi_file_get_path_display (self->priv->file));
|
||||
+ qmi_client_ctl_allocate_cid_qrtr (self->priv->client_ctl,
|
||||
+ input,
|
||||
+ timeout,
|
||||
+ cancellable,
|
||||
+ (GAsyncReadyCallback)allocate_cid_qrtr_ready,
|
||||
+ task);
|
||||
+
|
||||
+ qmi_message_ctl_allocate_cid_qrtr_input_unref (input);
|
||||
+ return;
|
||||
}
|
||||
|
||||
/* Reuse the given CID */
|
||||
@@ -1435,6 +1504,38 @@ client_ctl_release_cid_ready (QmiClientCtl *client_ctl,
|
||||
qmi_message_ctl_release_cid_output_unref (output);
|
||||
}
|
||||
|
||||
+static void
|
||||
+client_ctl_release_cid_qrtr_ready (QmiClientCtl *client_ctl,
|
||||
+ GAsyncResult *res,
|
||||
+ GTask *task)
|
||||
+{
|
||||
+ GError *error = NULL;
|
||||
+ QmiMessageCtlReleaseCidQrtrOutput *output;
|
||||
+
|
||||
+ /* Note: even if we return an error, the client is to be considered
|
||||
+ * released! (so shouldn't be used) */
|
||||
+
|
||||
+ /* Check result of the async operation */
|
||||
+ output = qmi_client_ctl_release_cid_qrtr_finish (client_ctl, res, &error);
|
||||
+ if (!output) {
|
||||
+ g_task_return_error (task, error);
|
||||
+ g_object_unref (task);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Check result of the QMI operation */
|
||||
+ if (!qmi_message_ctl_release_cid_qrtr_output_get_result (output, &error)) {
|
||||
+ g_task_return_error (task, error);
|
||||
+ g_object_unref (task);
|
||||
+ qmi_message_ctl_release_cid_qrtr_output_unref (output);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ g_task_return_boolean (task, TRUE);
|
||||
+ g_object_unref (task);
|
||||
+ qmi_message_ctl_release_cid_qrtr_output_unref (output);
|
||||
+}
|
||||
+
|
||||
void
|
||||
qmi_device_release_client (QmiDevice *self,
|
||||
QmiClient *client,
|
||||
@@ -1498,21 +1599,40 @@ qmi_device_release_client (QmiDevice *self,
|
||||
g_object_unref (client);
|
||||
|
||||
if (flags & QMI_DEVICE_RELEASE_CLIENT_FLAGS_RELEASE_CID) {
|
||||
- QmiMessageCtlReleaseCidInput *input;
|
||||
+ if (service <= G_MAXUINT8) {
|
||||
+ QmiMessageCtlReleaseCidInput *input;
|
||||
|
||||
- /* And now, really try to release the CID */
|
||||
- input = qmi_message_ctl_release_cid_input_new ();
|
||||
- qmi_message_ctl_release_cid_input_set_release_info (input, service, cid, NULL);
|
||||
+ /* And now, really try to release the CID */
|
||||
+ input = qmi_message_ctl_release_cid_input_new ();
|
||||
+ qmi_message_ctl_release_cid_input_set_release_info (input, service, cid, NULL);
|
||||
|
||||
- qmi_client_ctl_release_cid (self->priv->client_ctl,
|
||||
- input,
|
||||
- timeout,
|
||||
- cancellable,
|
||||
- (GAsyncReadyCallback)client_ctl_release_cid_ready,
|
||||
- task);
|
||||
+ qmi_client_ctl_release_cid (self->priv->client_ctl,
|
||||
+ input,
|
||||
+ timeout,
|
||||
+ cancellable,
|
||||
+ (GAsyncReadyCallback)client_ctl_release_cid_ready,
|
||||
+ task);
|
||||
|
||||
- qmi_message_ctl_release_cid_input_unref (input);
|
||||
- return;
|
||||
+ qmi_message_ctl_release_cid_input_unref (input);
|
||||
+ return;
|
||||
+ } else {
|
||||
+ QmiMessageCtlReleaseCidQrtrInput *input;
|
||||
+
|
||||
+ /* And now, really try to release the CID */
|
||||
+ input = qmi_message_ctl_release_cid_qrtr_input_new ();
|
||||
+ qmi_message_ctl_release_cid_qrtr_input_set_release_info (input, service, cid, NULL);
|
||||
+
|
||||
+ qmi_client_ctl_release_cid_qrtr (self->priv->client_ctl,
|
||||
+ input,
|
||||
+ timeout,
|
||||
+ cancellable,
|
||||
+ (GAsyncReadyCallback)client_ctl_release_cid_qrtr_ready,
|
||||
+ task);
|
||||
+
|
||||
+ qmi_message_ctl_release_cid_qrtr_input_unref (input);
|
||||
+ return;
|
||||
+
|
||||
+ }
|
||||
}
|
||||
|
||||
/* No need to release the CID, so just done */
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
From d70669657d1c475ff2127528a26f71fed71d257f Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Wed, 29 Mar 2023 16:37:26 +0200
|
||||
Subject: [PATCH 6/7] libqmi-glib,endpoint-qrtr: handle QMUX and QRTR messages
|
||||
|
||||
Handle QMUX and QRTR messages in QMI Message:
|
||||
|
||||
- Use QmiService enum instead of guint where possible
|
||||
- Bump service ID size from guint8 to guint6 when constructing TLVs
|
||||
- Extract service IDs from QMI messages depending on marker
|
||||
---
|
||||
src/libqmi-glib/qmi-endpoint-qrtr.c | 28 +++++++++++++++++++++-------
|
||||
1 file changed, 21 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/libqmi-glib/qmi-endpoint-qrtr.c b/src/libqmi-glib/qmi-endpoint-qrtr.c
|
||||
index 8c4007a1..7ab84afa 100644
|
||||
--- a/src/libqmi-glib/qmi-endpoint-qrtr.c
|
||||
+++ b/src/libqmi-glib/qmi-endpoint-qrtr.c
|
||||
@@ -43,6 +43,8 @@
|
||||
/* Constants for allocating/releasing clients */
|
||||
#define QMI_MESSAGE_CTL_ALLOCATE_CID 0x0022
|
||||
#define QMI_MESSAGE_CTL_RELEASE_CID 0x0023
|
||||
+#define QMI_MESSAGE_CTL_ALLOCATE_CID_QRTR 0xFF22
|
||||
+#define QMI_MESSAGE_CTL_RELEASE_CID_QRTR 0xFF23
|
||||
#define QMI_MESSAGE_TLV_ALLOCATION_INFO 0x01
|
||||
#define QMI_MESSAGE_INPUT_TLV_SERVICE 0x01
|
||||
|
||||
@@ -137,7 +139,7 @@ client_message_cb (QrtrClient *qrtr_client,
|
||||
QmiEndpointQrtr *self)
|
||||
{
|
||||
QmiMessage *message;
|
||||
- guint service;
|
||||
+ QmiService service;
|
||||
guint cid;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
@@ -262,7 +264,7 @@ release_client (QmiEndpointQrtr *self,
|
||||
|
||||
static gboolean
|
||||
construct_alloc_tlv (QmiMessage *message,
|
||||
- guint8 service,
|
||||
+ guint16 service,
|
||||
guint8 client)
|
||||
{
|
||||
gsize init_offset;
|
||||
@@ -270,8 +272,14 @@ construct_alloc_tlv (QmiMessage *message,
|
||||
init_offset = qmi_message_tlv_write_init (message,
|
||||
QMI_MESSAGE_TLV_ALLOCATION_INFO,
|
||||
NULL);
|
||||
+ if (service > G_MAXUINT8)
|
||||
+ return init_offset &&
|
||||
+ qmi_message_tlv_write_guint16 (message, QMI_ENDIAN_LITTLE, service, NULL) &&
|
||||
+ qmi_message_tlv_write_guint8 (message, client, NULL) &&
|
||||
+ qmi_message_tlv_write_complete (message, init_offset, NULL);
|
||||
+
|
||||
return init_offset &&
|
||||
- qmi_message_tlv_write_guint8 (message, service, NULL) &&
|
||||
+ qmi_message_tlv_write_guint8 (message, (guint8) service, NULL) &&
|
||||
qmi_message_tlv_write_guint8 (message, client, NULL) &&
|
||||
qmi_message_tlv_write_complete (message, init_offset, NULL);
|
||||
}
|
||||
@@ -282,13 +290,14 @@ handle_alloc_cid (QmiEndpointQrtr *self,
|
||||
{
|
||||
gsize offset = 0;
|
||||
gsize init_offset;
|
||||
- guint8 service;
|
||||
+ QmiService service;
|
||||
guint cid;
|
||||
g_autoptr(QmiMessage) response = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_TLV_ALLOCATION_INFO, NULL, &error)) == 0) ||
|
||||
- !qmi_message_tlv_read_guint8 (message, init_offset, &offset, &service, &error)) {
|
||||
+ (qmi_message_get_message_id (message) == QMI_MESSAGE_CTL_ALLOCATE_CID && !qmi_message_tlv_read_guint8 (message, init_offset, &offset, (guint8 *) &service, &error)) ||
|
||||
+ (qmi_message_get_message_id (message) == QMI_MESSAGE_CTL_ALLOCATE_CID_QRTR && !qmi_message_tlv_read_guint16 (message, init_offset, &offset, QMI_ENDIAN_LITTLE, (guint16 *) &service, &error))) {
|
||||
g_debug ("[%s] error allocating CID: could not parse message: %s",
|
||||
qmi_endpoint_get_name (QMI_ENDPOINT (self)), error->message);
|
||||
response = qmi_message_response_new (message, QMI_PROTOCOL_ERROR_MALFORMED_MESSAGE);
|
||||
@@ -299,6 +308,8 @@ handle_alloc_cid (QmiEndpointQrtr *self,
|
||||
return;
|
||||
}
|
||||
|
||||
+ g_debug("Extracted service: %d", service);
|
||||
+
|
||||
cid = allocate_client (self, service, &error);
|
||||
if (!cid) {
|
||||
g_debug ("[%s] error allocating CID: %s",
|
||||
@@ -327,13 +338,14 @@ handle_release_cid (QmiEndpointQrtr *self,
|
||||
{
|
||||
gsize offset = 0;
|
||||
gsize init_offset;
|
||||
- guint8 service;
|
||||
+ QmiService service;
|
||||
guint8 cid;
|
||||
g_autoptr(QmiMessage) response = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (((init_offset = qmi_message_tlv_read_init (message, QMI_MESSAGE_TLV_ALLOCATION_INFO, NULL, &error)) == 0) ||
|
||||
- !qmi_message_tlv_read_guint8 (message, init_offset, &offset, &service, &error) ||
|
||||
+ (qmi_message_get_message_id (message) == QMI_MESSAGE_CTL_RELEASE_CID && !qmi_message_tlv_read_guint8 (message, init_offset, &offset, (guint8 *) &service, &error)) ||
|
||||
+ (qmi_message_get_message_id (message) == QMI_MESSAGE_CTL_RELEASE_CID_QRTR && !qmi_message_tlv_read_guint16 (message, init_offset, &offset, QMI_ENDIAN_LITTLE, (guint16 *) &service, &error)) ||
|
||||
!qmi_message_tlv_read_guint8 (message, init_offset, &offset, &cid, &error)) {
|
||||
g_debug ("[%s] error releasing CID: could not parse message: %s",
|
||||
qmi_endpoint_get_name (QMI_ENDPOINT (self)), error->message);
|
||||
@@ -389,9 +401,11 @@ handle_ctl_message (QmiEndpointQrtr *self,
|
||||
{
|
||||
switch (qmi_message_get_message_id (message)) {
|
||||
case QMI_MESSAGE_CTL_ALLOCATE_CID:
|
||||
+ case QMI_MESSAGE_CTL_ALLOCATE_CID_QRTR:
|
||||
handle_alloc_cid (self, message);
|
||||
break;
|
||||
case QMI_MESSAGE_CTL_RELEASE_CID:
|
||||
+ case QMI_MESSAGE_CTL_RELEASE_CID_QRTR:
|
||||
handle_release_cid (self, message);
|
||||
break;
|
||||
case QMI_MESSAGE_CTL_SYNC:
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
From cf67304f5bae53a2ca7624351c9056f61fc28650 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Fri, 31 Mar 2023 14:32:30 +0200
|
||||
Subject: [PATCH 7/7] libqmi-glib,port-context: handle QMUX and QRTR messages
|
||||
|
||||
Handle QMUX and QRTR messages in QMI Message:
|
||||
|
||||
- Allow QMI messages with both QMUX and QRTR markers
|
||||
---
|
||||
src/libqmi-glib/test/test-port-context.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/libqmi-glib/test/test-port-context.c b/src/libqmi-glib/test/test-port-context.c
|
||||
index 72407c2f..c647e8a3 100644
|
||||
--- a/src/libqmi-glib/test/test-port-context.c
|
||||
+++ b/src/libqmi-glib/test/test-port-context.c
|
||||
@@ -114,11 +114,13 @@ process_next_command (TestPortContext *ctx,
|
||||
gchar *received;
|
||||
GByteArray *response;
|
||||
|
||||
- /* Every message received must start with the QMUX marker.
|
||||
+ /* Every message received must start with the QMUX or QRTR marker.
|
||||
* If it doesn't, we broke framing :-/
|
||||
* If we broke framing, an error should be reported and the device
|
||||
* should get closed */
|
||||
- if (buffer->len > 0 && buffer->data[0] != QMI_MESSAGE_QMUX_MARKER)
|
||||
+ if (buffer->len > 0 &&
|
||||
+ buffer->data[0] != QMI_MESSAGE_QMUX_MARKER &&
|
||||
+ buffer->data[0] != QMI_MESSAGE_QRTR_MARKER)
|
||||
g_assert_not_reached ();
|
||||
|
||||
message = qmi_message_new_from_raw (buffer, &error);
|
||||
--
|
||||
2.39.2
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# Forked from Alpine to support QRTR-only services
|
||||
|
||||
pkgname=libqmi
|
||||
pkgver=9999_git20230324
|
||||
pkgrel=0
|
||||
pkgdesc="QMI modem protocol helper library"
|
||||
url="https://www.freedesktop.org/wiki/Software/libqmi"
|
||||
arch="all"
|
||||
license="GPL-2.0-or-later AND LGPL-2.1-or-later"
|
||||
makedepends="
|
||||
bash-completion
|
||||
glib-dev
|
||||
gobject-introspection-dev
|
||||
help2man
|
||||
libgudev-dev
|
||||
libmbim-dev
|
||||
libqrtr-glib-dev
|
||||
linux-headers
|
||||
meson
|
||||
python3
|
||||
"
|
||||
subpackages="
|
||||
$pkgname-dev
|
||||
$pkgname-doc
|
||||
$pkgname-bash-completion
|
||||
qmi-utils
|
||||
"
|
||||
_commit="0d1980eef16cc0f1357d555b70606f852db2dc97"
|
||||
source="https://gitlab.freedesktop.org/mobile-broadband/libqmi/-/archive/$_commit/libqmi-$_commit.tar.gz
|
||||
0001-data-qmi-service-ssc-add-SSC-service.patch
|
||||
0002-libqmi-glib-message-handle-QMUX-and-QRTR-messages.patch
|
||||
0003-libqmi-glib-proxy-handle-QMUX-and-QRTR-messages.patch
|
||||
0004-libqmi-glib-endpoint-handle-QMUX-and-QRTR-messages.patch
|
||||
0005-libqmi-glib-device-handle-QMUX-and-QRTR-messages.patch
|
||||
0006-libqmi-glib-endpoint-qrtr-handle-QMUX-and-QRTR-messa.patch
|
||||
0007-libqmi-glib-port-context-handle-QMUX-and-QRTR-messag.patch
|
||||
"
|
||||
builddir="$srcdir/$pkgname-$_commit"
|
||||
|
||||
build() {
|
||||
abuild-meson \
|
||||
-Db_lto=true \
|
||||
. output
|
||||
meson compile -C output
|
||||
}
|
||||
|
||||
check() {
|
||||
meson test --no-rebuild --print-errorlogs -C output
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" meson install --no-rebuild -C output
|
||||
}
|
||||
|
||||
utils() {
|
||||
pkgdesc="$pkgdesc (CLI utilities)"
|
||||
|
||||
amove usr/bin
|
||||
}
|
||||
|
||||
|
||||
sha512sums="
|
||||
c1faffbb8d26023c06e3ab3aab8e0b394232da13eaa84bedc7c9e30f95cffe6116160c6fd943c9dad4114dfd73a48e9e586991080fb077bc0b216d1d9f89e5bf libqmi-0d1980eef16cc0f1357d555b70606f852db2dc97.tar.gz
|
||||
3cc7e723119905d01d47852334c4a4cb6523a9f027b5524cddb8d9b7433522c49978ff7a2b1172517585e5576beeae7ab3f835d72a26ca41f16721b791b0859b 0001-data-qmi-service-ssc-add-SSC-service.patch
|
||||
88bf3673bea0906beecbfea93a577b8bf80019b9c53ba95c8e8a0242a085271f695100032624a38ec82be43796bc3bf90d16fed34cd10691ca45a8b9d59aac04 0002-libqmi-glib-message-handle-QMUX-and-QRTR-messages.patch
|
||||
b320d9d28d862c486104cf91b4fef45bb0e3931551af0603f7e1823f4884a0b3a9095b33449fed11b4637883b731ebf949129a46a79f98925031ebbf034217dc 0003-libqmi-glib-proxy-handle-QMUX-and-QRTR-messages.patch
|
||||
f217c49925fd7206ffc6767ae106b3e52a59c563f63e1512dfe374087013d7ab4aa128d834e9ca69e6d0b6e4c544fa3ff991275f3b05191a0af4c9de9ec78a21 0004-libqmi-glib-endpoint-handle-QMUX-and-QRTR-messages.patch
|
||||
8e82a9f029aebb48cced514d2760cfca9d7afdb3bb8e9d1bafa24b1af20a9f41c7dacee8892c99cdb4d92b74997557681fad4d78367bd969fdaed5026b753b9a 0005-libqmi-glib-device-handle-QMUX-and-QRTR-messages.patch
|
||||
b6cf531de814d2cf0c9c6039978f5ba5f904fe09252da7724d1f018cdbe8793a99634818ec9ec68041d8b4bccfa47397d2cb59bbbb2ad7518be55366e2a5f211 0006-libqmi-glib-endpoint-qrtr-handle-QMUX-and-QRTR-messa.patch
|
||||
e85f547291c38cf8cf457b72049f6dd5809b9f1f7429572c8440465f762e8461dff96ed72a92d02f0ae155a476e74f9da94997a3d2cddaa58f6773803ac1ecc3 0007-libqmi-glib-port-context-handle-QMUX-and-QRTR-messag.patch
|
||||
"
|
||||
@@ -0,0 +1,32 @@
|
||||
# Kept from Alpine until stable
|
||||
# Maintainer: Dylan Van Assche <me@dylanvanassche.be>
|
||||
|
||||
pkgname=libssc
|
||||
pkgver=0.1.1
|
||||
pkgrel=0
|
||||
pkgdesc="Library to expose Qualcomm Sensor Core sensors"
|
||||
url="https://codeberg.org/DylanVanAssche/libssc"
|
||||
arch="all"
|
||||
license="GPL-3.0-or-later"
|
||||
makedepends="linux-headers libqmi-dev glib-dev protobuf-c-dev meson libgudev-dev eudev-dev"
|
||||
options="!check" # no tests yet
|
||||
subpackages="$pkgname-dbg $pkgname-dev"
|
||||
builddir="$srcdir/$pkgname"
|
||||
source="$pkgname-$pkgver.tar.gz::https://codeberg.org/DylanVanAssche/libssc/archive/$pkgver.tar.gz
|
||||
"
|
||||
|
||||
build() {
|
||||
abuild-meson \
|
||||
-Db_lto=true \
|
||||
. output
|
||||
meson compile -C output
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" meson install --no-rebuild -C output
|
||||
}
|
||||
|
||||
|
||||
sha512sums="
|
||||
eb1184930651b6e68cceed91bf5f2469380db9180c1f1a69738f0711286b8397a3b1855122d31df80551957dd53788da52de7e8c766094078dec13c003b13624 libssc-0.1.1.tar.gz
|
||||
"
|
||||
Reference in new issue
Block a user