diff options
author | Zhengyin Qian <qianzy@google.com> | 2015-12-15 10:25:10 -0800 |
---|---|---|
committer | Zhengyin Qian <qianzy@google.com> | 2015-12-15 10:25:10 -0800 |
commit | 68dc9e70b79dacddc4e0bf00af0de7f764b04eed (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /libsensors_iio/src/HWSensorBase.cpp | |
parent | 2f7df3191d933bc5df29ab12fed58e3b6a8b86dc (diff) | |
download | sensors-68dc9e70b79dacddc4e0bf00af0de7f764b04eed.tar.gz |
remove robby sensor codeHEADandroid-wear-p-preview-2android-wear-o-preview-4android-wear-o-preview-3android-wear-n-preview-3android-wear-n-preview-2android-wear-n-preview-1android-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-wear-8.1.0_r1android-wear-8.0.0_r1android-wear-7.1.1_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r19android-vts-9.0_r18android-vts-9.0_r17android-vts-9.0_r16android-vts-9.0_r15android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-vts-8.1_r9android-vts-8.1_r8android-vts-8.1_r7android-vts-8.1_r6android-vts-8.1_r5android-vts-8.1_r4android-vts-8.1_r3android-vts-8.1_r14android-vts-8.1_r13android-vts-8.1_r12android-vts-8.1_r11android-vts-8.1_r10android-vts-8.0_r9android-vts-8.0_r8android-vts-8.0_r7android-vts-8.0_r6android-vts-8.0_r2android-vts-8.0_r13android-vts-8.0_r12android-vts-8.0_r11android-vts-8.0_r10android-vts-8.0_r1android-security-9.0.0_r76android-security-9.0.0_r75android-security-9.0.0_r74android-security-9.0.0_r73android-security-9.0.0_r72android-security-9.0.0_r71android-security-9.0.0_r70android-security-9.0.0_r69android-security-9.0.0_r68android-security-9.0.0_r67android-security-9.0.0_r66android-security-9.0.0_r65android-security-9.0.0_r64android-security-9.0.0_r63android-security-9.0.0_r62android-security-8.1.0_r93android-security-8.1.0_r92android-security-8.1.0_r91android-security-8.1.0_r90android-security-8.1.0_r89android-security-8.1.0_r88android-security-8.1.0_r87android-security-8.1.0_r86android-security-8.1.0_r85android-security-8.1.0_r84android-security-8.1.0_r83android-security-8.1.0_r82android-security-8.0.0_r54android-security-8.0.0_r53android-security-8.0.0_r52android-p-preview-3android-p-preview-2android-p-preview-1android-o-preview-4android-o-preview-3android-o-preview-2android-o-preview-1android-o-mr1-preview-2android-o-mr1-preview-1android-o-mr1-iot-release-smart-display-r9android-o-mr1-iot-release-smart-display-r8android-o-mr1-iot-release-smart-display-r5android-o-mr1-iot-release-smart-display-r40.1Jandroid-o-mr1-iot-release-smart-display-r4android-o-mr1-iot-release-smart-display-r39android-o-mr1-iot-release-smart-display-r30android-o-mr1-iot-release-smart-display-r3android-o-mr1-iot-release-smart-display-r22android-o-mr1-iot-release-smart-display-r14android-o-mr1-iot-release-smart-clock-r6android-o-mr1-iot-release-smart-clock-r2android-o-mr1-iot-release-smart-clock-fsiandroid-o-mr1-iot-release-smart-clock-fcsandroid-o-mr1-iot-release-cube_r2android-o-mr1-iot-release-cube-fsiandroid-o-mr1-iot-release-cube-fcsandroid-o-mr1-iot-release-1.0.8android-o-mr1-iot-release-1.0.7android-o-mr1-iot-release-1.0.5android-o-mr1-iot-release-1.0.4android-o-mr1-iot-release-1.0.3android-o-mr1-iot-release-1.0.2android-o-mr1-iot-release-1.0.14android-o-mr1-iot-release-1.0.13android-o-mr1-iot-release-1.0.12android-o-mr1-iot-release-1.0.10android-o-mr1-iot-release-1.0.1android-o-mr1-iot-release-1.0.0android-o-mr1-iot-preview-8android-o-mr1-iot-preview-7android-o-mr1-iot-preview-6android-o-iot-preview-5android-n-preview-5android-n-preview-4android-n-preview-3android-n-preview-2android-n-mr2-preview-2android-n-mr2-preview-1android-n-mr1-preview-2android-n-mr1-preview-1android-n-iot-release-smart-display-r2android-n-iot-release-smart-displayandroid-n-iot-release-polk-at1android-n-iot-release-lg-thinq-wk7android-n-iot-release-ihome-igv1android-n-iot-preview-4android-n-iot-preview-2android-cts_7.1_r1android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r20android-cts-9.0_r2android-cts-9.0_r19android-cts-9.0_r18android-cts-9.0_r17android-cts-9.0_r16android-cts-9.0_r15android-cts-9.0_r14android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-cts-8.1_r9android-cts-8.1_r8android-cts-8.1_r7android-cts-8.1_r6android-cts-8.1_r5android-cts-8.1_r4android-cts-8.1_r3android-cts-8.1_r25android-cts-8.1_r24android-cts-8.1_r23android-cts-8.1_r22android-cts-8.1_r21android-cts-8.1_r20android-cts-8.1_r2android-cts-8.1_r19android-cts-8.1_r18android-cts-8.1_r17android-cts-8.1_r16android-cts-8.1_r15android-cts-8.1_r14android-cts-8.1_r13android-cts-8.1_r12android-cts-8.1_r11android-cts-8.1_r10android-cts-8.1_r1android-cts-8.0_r9android-cts-8.0_r8android-cts-8.0_r7android-cts-8.0_r6android-cts-8.0_r5android-cts-8.0_r4android-cts-8.0_r3android-cts-8.0_r26android-cts-8.0_r25android-cts-8.0_r24android-cts-8.0_r23android-cts-8.0_r22android-cts-8.0_r21android-cts-8.0_r20android-cts-8.0_r2android-cts-8.0_r19android-cts-8.0_r18android-cts-8.0_r17android-cts-8.0_r16android-cts-8.0_r15android-cts-8.0_r14android-cts-8.0_r13android-cts-8.0_r12android-cts-8.0_r11android-cts-8.0_r10android-cts-8.0_r1android-cts-7.1_r9android-cts-7.1_r8android-cts-7.1_r7android-cts-7.1_r6android-cts-7.1_r5android-cts-7.1_r4android-cts-7.1_r3android-cts-7.1_r29android-cts-7.1_r28android-cts-7.1_r27android-cts-7.1_r26android-cts-7.1_r25android-cts-7.1_r24android-cts-7.1_r23android-cts-7.1_r22android-cts-7.1_r21android-cts-7.1_r20android-cts-7.1_r2android-cts-7.1_r19android-cts-7.1_r18android-cts-7.1_r17android-cts-7.1_r16android-cts-7.1_r15android-cts-7.1_r14android-cts-7.1_r13android-cts-7.1_r12android-cts-7.1_r11android-cts-7.1_r10android-cts-7.1_r1android-cts-7.0_r9android-cts-7.0_r8android-cts-7.0_r7android-cts-7.0_r6android-cts-7.0_r5android-cts-7.0_r4android-cts-7.0_r33android-cts-7.0_r32android-cts-7.0_r31android-cts-7.0_r30android-cts-7.0_r3android-cts-7.0_r29android-cts-7.0_r28android-cts-7.0_r27android-cts-7.0_r26android-cts-7.0_r25android-cts-7.0_r24android-cts-7.0_r23android-cts-7.0_r22android-cts-7.0_r21android-cts-7.0_r20android-cts-7.0_r2android-cts-7.0_r19android-cts-7.0_r18android-cts-7.0_r17android-cts-7.0_r16android-cts-7.0_r15android-cts-7.0_r14android-cts-7.0_r13android-cts-7.0_r12android-cts-7.0_r11android-cts-7.0_r10android-cts-7.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r61android-9.0.0_r60android-9.0.0_r6android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r47android-9.0.0_r46android-9.0.0_r45android-9.0.0_r44android-9.0.0_r43android-9.0.0_r42android-9.0.0_r41android-9.0.0_r40android-9.0.0_r39android-9.0.0_r38android-9.0.0_r37android-9.0.0_r36android-9.0.0_r35android-9.0.0_r34android-9.0.0_r33android-9.0.0_r32android-9.0.0_r31android-9.0.0_r30android-9.0.0_r3android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r2android-9.0.0_r19android-9.0.0_r18android-9.0.0_r17android-9.0.0_r16android-9.0.0_r12android-9.0.0_r11android-9.0.0_r10android-9.0.0_r1android-8.1.0_r9android-8.1.0_r81android-8.1.0_r80android-8.1.0_r8android-8.1.0_r79android-8.1.0_r78android-8.1.0_r77android-8.1.0_r76android-8.1.0_r75android-8.1.0_r74android-8.1.0_r73android-8.1.0_r72android-8.1.0_r71android-8.1.0_r70android-8.1.0_r7android-8.1.0_r69android-8.1.0_r68android-8.1.0_r67android-8.1.0_r66android-8.1.0_r65android-8.1.0_r64android-8.1.0_r63android-8.1.0_r62android-8.1.0_r61android-8.1.0_r60android-8.1.0_r6android-8.1.0_r53android-8.1.0_r52android-8.1.0_r51android-8.1.0_r50android-8.1.0_r5android-8.1.0_r48android-8.1.0_r47android-8.1.0_r46android-8.1.0_r45android-8.1.0_r43android-8.1.0_r42android-8.1.0_r41android-8.1.0_r40android-8.1.0_r4android-8.1.0_r39android-8.1.0_r38android-8.1.0_r37android-8.1.0_r36android-8.1.0_r35android-8.1.0_r33android-8.1.0_r32android-8.1.0_r31android-8.1.0_r30android-8.1.0_r3android-8.1.0_r29android-8.1.0_r28android-8.1.0_r27android-8.1.0_r26android-8.1.0_r25android-8.1.0_r23android-8.1.0_r22android-8.1.0_r21android-8.1.0_r20android-8.1.0_r2android-8.1.0_r19android-8.1.0_r18android-8.1.0_r17android-8.1.0_r16android-8.1.0_r15android-8.1.0_r14android-8.1.0_r13android-8.1.0_r12android-8.1.0_r11android-8.1.0_r10android-8.1.0_r1android-8.0.0_r9android-8.0.0_r7android-8.0.0_r51android-8.0.0_r50android-8.0.0_r49android-8.0.0_r48android-8.0.0_r47android-8.0.0_r46android-8.0.0_r45android-8.0.0_r44android-8.0.0_r43android-8.0.0_r42android-8.0.0_r41android-8.0.0_r40android-8.0.0_r4android-8.0.0_r39android-8.0.0_r38android-8.0.0_r37android-8.0.0_r36android-8.0.0_r35android-8.0.0_r34android-8.0.0_r33android-8.0.0_r32android-8.0.0_r31android-8.0.0_r30android-8.0.0_r3android-8.0.0_r29android-8.0.0_r28android-8.0.0_r27android-8.0.0_r26android-8.0.0_r25android-8.0.0_r24android-8.0.0_r23android-8.0.0_r22android-8.0.0_r21android-8.0.0_r2android-8.0.0_r17android-8.0.0_r16android-8.0.0_r15android-8.0.0_r13android-8.0.0_r12android-8.0.0_r11android-8.0.0_r10android-8.0.0_r1android-7.1.2_r9android-7.1.2_r8android-7.1.2_r6android-7.1.2_r5android-7.1.2_r4android-7.1.2_r39android-7.1.2_r38android-7.1.2_r37android-7.1.2_r36android-7.1.2_r33android-7.1.2_r32android-7.1.2_r30android-7.1.2_r3android-7.1.2_r29android-7.1.2_r28android-7.1.2_r27android-7.1.2_r25android-7.1.2_r24android-7.1.2_r23android-7.1.2_r2android-7.1.2_r19android-7.1.2_r18android-7.1.2_r17android-7.1.2_r16android-7.1.2_r15android-7.1.2_r14android-7.1.2_r13android-7.1.2_r12android-7.1.2_r11android-7.1.2_r10android-7.1.2_r1android-7.1.1_r9android-7.1.1_r8android-7.1.1_r7android-7.1.1_r61android-7.1.1_r60android-7.1.1_r6android-7.1.1_r59android-7.1.1_r58android-7.1.1_r57android-7.1.1_r56android-7.1.1_r55android-7.1.1_r54android-7.1.1_r53android-7.1.1_r52android-7.1.1_r51android-7.1.1_r50android-7.1.1_r49android-7.1.1_r48android-7.1.1_r47android-7.1.1_r46android-7.1.1_r45android-7.1.1_r44android-7.1.1_r43android-7.1.1_r42android-7.1.1_r41android-7.1.1_r40android-7.1.1_r4android-7.1.1_r39android-7.1.1_r38android-7.1.1_r35android-7.1.1_r33android-7.1.1_r32android-7.1.1_r31android-7.1.1_r3android-7.1.1_r28android-7.1.1_r27android-7.1.1_r26android-7.1.1_r25android-7.1.1_r24android-7.1.1_r23android-7.1.1_r22android-7.1.1_r21android-7.1.1_r20android-7.1.1_r2android-7.1.1_r17android-7.1.1_r16android-7.1.1_r15android-7.1.1_r14android-7.1.1_r13android-7.1.1_r12android-7.1.1_r11android-7.1.1_r10android-7.1.1_r1android-7.1.0_r7android-7.1.0_r6android-7.1.0_r5android-7.1.0_r4android-7.1.0_r3android-7.1.0_r2android-7.1.0_r1android-7.0.0_r9android-7.0.0_r8android-7.0.0_r7android-7.0.0_r6android-7.0.0_r5android-7.0.0_r4android-7.0.0_r36android-7.0.0_r35android-7.0.0_r34android-7.0.0_r33android-7.0.0_r32android-7.0.0_r31android-7.0.0_r30android-7.0.0_r3android-7.0.0_r29android-7.0.0_r28android-7.0.0_r27android-7.0.0_r24android-7.0.0_r21android-7.0.0_r19android-7.0.0_r17android-7.0.0_r15android-7.0.0_r14android-7.0.0_r13android-7.0.0_r12android-7.0.0_r11android-7.0.0_r10android-7.0.0_r1android-6.0.1_r68android-6.0.1_r67android-6.0.1_r62android-6.0.1_r54android-6.0.1_r53android-6.0.1_r45android-6.0.1_r25android-6.0.1_r24android-6.0.1_r22android-6.0.1_r21security-pi-releasesecurity-oc-releasesecurity-oc-mr1-releasesdk-releasepie-vts-releasepie-security-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-releasepie-qpr3-s1-releasepie-qpr3-releasepie-qpr3-b-releasepie-qpr2-releasepie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-releasepie-platform-releasepie-gsipie-dr1-releasepie-dr1-devpie-devpie-cuttlefish-testingpie-cts-releasepie-b4s4-releasepie-b4s4-devoreo-vts-releaseoreo-security-releaseoreo-releaseoreo-r6-releaseoreo-r5-releaseoreo-r4-releaseoreo-r3-releaseoreo-r2-releaseoreo-mr1-wear-releaseoreo-mr1-vts-releaseoreo-mr1-security-releaseoreo-mr1-s1-releaseoreo-mr1-releaseoreo-mr1-iot-releaseoreo-mr1-devoreo-mr1-cuttlefish-testingoreo-mr1-cts-releaseoreo-mr1-1.2-iot-releaseoreo-m8-releaseoreo-m7-releaseoreo-m6-s4-releaseoreo-m6-s3-releaseoreo-m6-s2-releaseoreo-m5-releaseoreo-m4-s9-releaseoreo-m4-s8-releaseoreo-m4-s7-releaseoreo-m4-s6-releaseoreo-m4-s5-releaseoreo-m4-s4-releaseoreo-m4-s3-releaseoreo-m4-s2-releaseoreo-m4-s12-releaseoreo-m4-s11-releaseoreo-m4-s10-releaseoreo-m4-s1-releaseoreo-m3-releaseoreo-m2-s5-releaseoreo-m2-s4-releaseoreo-m2-s3-releaseoreo-m2-s2-releaseoreo-m2-s1-releaseoreo-m2-releaseoreo-dr3-releaseoreo-dr2-releaseoreo-dr1-releaseoreo-dr1-devoreo-devoreo-cts-releaseo-previewo-mr1-iot-preview-8o-mr1-iot-preview-7o-mr1-iot-preview-6o-iot-preview-5nougat-releasenougat-mr2.3-releasenougat-mr2.2-releasenougat-mr2.1-releasenougat-mr2-security-releasenougat-mr2-releasenougat-mr2-pixel-releasenougat-mr2-devnougat-mr1.8-releasenougat-mr1.7-releasenougat-mr1.6-releasenougat-mr1.5-releasenougat-mr1.4-releasenougat-mr1.3-releasenougat-mr1.2-releasenougat-mr1.1-releasenougat-mr1-wear-releasenougat-mr1-volantis-releasenougat-mr1-security-releasenougat-mr1-releasenougat-mr1-flounder-releasenougat-mr1-devnougat-mr1-cts-releasenougat-mr0.5-releasenougat-iot-releasenougat-dr1-releasenougat-devnougat-cts-releasenougat-bugfix-releasen-iot-preview-4n-iot-preview-2mastermarshmallow-dr1.6-releasemarshmallow-dr1.5-releasemarshmallow-dr1.5-devmain
In Emerald, robby project's sensor code has been moved to
/vendor/intel/robby/sensors
Change-Id: Iff11b2f079ba47003637c9a3024f997da34b5b02
Diffstat (limited to 'libsensors_iio/src/HWSensorBase.cpp')
-rw-r--r-- | libsensors_iio/src/HWSensorBase.cpp | 569 |
1 files changed, 0 insertions, 569 deletions
diff --git a/libsensors_iio/src/HWSensorBase.cpp b/libsensors_iio/src/HWSensorBase.cpp deleted file mode 100644 index a910bd0..0000000 --- a/libsensors_iio/src/HWSensorBase.cpp +++ /dev/null @@ -1,569 +0,0 @@ -/* - * STMicroelectronics HW Sensor Base With Pollrate Class - * - * Copyright 2013-2015 STMicroelectronics Inc. - * Author: Denis Ciocca - <denis.ciocca@st.com> - * - * Licensed under the Apache License, Version 2.0 (the "License"). - */ - -#define __STDC_LIMIT_MACROS - -#include <fcntl.h> -#include <assert.h> -#include <string.h> -#include <signal.h> -#include <stdint.h> -#include <endian.h> - -#include "HWSensorBase.h" - -#define DEFAULT_HRTIMER_PERIOD_NS (200000000) -#define LOCAL_REPORTING_MODE_MASK 6 - - -/** - * size_from_channelarray() - Calculate the storage size of a scan - * @channels: the channel info array. - * @num_channels: number of channels. - **/ -static int size_from_channelarray(struct iio_channel_info *channels, int num_channels) -{ - int bytes = 0, i; - - for (i = 0; i < num_channels; i++) { - if (channels[i].bytes == 0) - continue; - - if (bytes % channels[i].bytes == 0) - channels[i].location = bytes; - else - channels[i].location = bytes - - (bytes % channels[i].bytes) + channels[i].bytes; - - bytes = channels[i].location + channels[i].bytes; - } - - return bytes; -} - -/** - * process_2byte_received() - Return channel data from 2 byte - * @input: 2 byte of data received from buffer channel. - * @info: information about channel structure. - * @multi_data: 2byte is part of multiple data. - **/ -static float process_2byte_received(int input, - struct iio_channel_info *info, bool multi_data) -{ - int16_t val; - float offset = 0; - - if (info->be) - input = be16toh((uint16_t)input); - else - input = le16toh((uint16_t)input); - - if (!multi_data) { - offset = info->offset; - val = input >> info->shift; - if (info->is_signed) { - val &= (1 << info->bits_used) - 1; - val = (int16_t)(val << (16 - info->bits_used)) >> - (16 - info->bits_used); - } else - val &= (1 << info->bits_used) - 1; - } else - val = input; - - return (((float)val + offset) * info->scale); -} - -static float process_3byte_received(int input, struct iio_channel_info *info) -{ - int32_t val; - - if (info->be) - input = be32toh((uint32_t)input); - else - input = le32toh((uint32_t)input); - - val = input >> info->shift; - if (info->is_signed) { - val &= (1 << info->bits_used) - 1; - val = (int32_t)(val << (24 - info->bits_used)) >> - (24 - info->bits_used); - } else - val &= (1 << info->bits_used) - 1; - - return (((float)val + info->offset) * info->scale); -} - -/** - * process_scan() - This functions use channels device information to build data - * @hw_sensor: pointer to current hardware sensor. - * @data: sensor data of all channels read from buffer. - * @channels: information about channel structure. - * @num_channels: number of channels of the sensor. - **/ -static int ProcessScanData(uint8_t *data, struct iio_channel_info *channels, int num_channels, SensorBaseData *sensor_out_data) -{ - int k; - - for (k = 0; k < num_channels; k++) { - - sensor_out_data->offset[k] = 0; - - switch (channels[k].bytes) { - case 1: - sensor_out_data->raw[k] = *(uint8_t *)(data + channels[k].location); - break; - case 2: - sensor_out_data->raw[k] = process_2byte_received(*(uint16_t *) - (data + channels[k].location), &channels[k], false); - break; - case 3: - sensor_out_data->raw[k] = process_3byte_received(*(uint32_t *) - (data + channels[k].location), &channels[k]); - break; - case 4: - if (channels->multi_data) { - sensor_out_data->raw[k] = process_2byte_received(*(uint16_t *) - (data + channels[k].location), &channels[k], true); - sensor_out_data->offset[k] = process_2byte_received(*(uint16_t *) - (data + channels[k].location + sizeof(uint16_t)), - &channels[k], true); - } else { - uint32_t val; - - if (channels[k].be) - val = be32toh(*(uint32_t *) - (data + channels[k].location)); - else - val = le32toh(*(uint32_t *) - (data + channels[k].location)); - - if (channels->isfloat) - sensor_out_data->raw[k] = (*((float *)((void *)&val)) + - channels[k].offset) * channels[k].scale; - else - sensor_out_data->raw[k] = ((float)val + - channels[k].offset) * channels[k].scale; - } - break; - case 8: - if (channels[k].is_signed) { - int64_t val = *(int64_t *)(data + channels[k].location); - if ((val >> channels[k].bits_used) & 1) - val = (val & channels[k].mask) | ~channels[k].mask; - - if ((channels[k].scale == 1.0f) && - (channels[k].offset == 0.0f)) { - sensor_out_data->timestamp = val; - } else { - sensor_out_data->raw[k] = (((float)val + - channels[k].offset) * channels[k].scale); - } - } - break; - default: - return -EINVAL; - } - } - - return num_channels; -} - -HWSensorBase::HWSensorBase(HWSensorBaseCommonData *data, const char *name, - int handle, int sensor_type, unsigned int hw_fifo_len, int pipe_data_fd, - float power_consumption) : SensorBase(name, handle, sensor_type, pipe_data_fd) -{ - int err; - char *buffer_path; - - memcpy(&common_data, data, sizeof(common_data)); - - sensor_t_data.power = power_consumption; - sensor_t_data.fifoMaxEventCount = hw_fifo_len; - current_fifo_len = HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN; - - scan_size = size_from_channelarray(common_data.channels, common_data.num_channels); - - sensor_data = (uint8_t *)malloc(scan_size * HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN * hw_fifo_len * sizeof(uint8_t)); - if (!sensor_data) - goto failed_creation; - - err = asprintf(&buffer_path, "/dev/iio:device%d", data->iio_dev_num); - if (err <= 0) - goto free_sensor_data; - - pollfd_iio[0].fd = open(buffer_path, O_RDONLY | O_NONBLOCK); - if (pollfd_iio[0].fd < 0) - goto free_buffer_path; - - err = ioctl(pollfd_iio[0].fd, IIO_GET_EVENT_FD_IOCTL, &pollfd_iio[1].fd); - if (err < 0) - goto close_iio_buffer; - - pollfd_iio[0].events = POLLIN; - pollfd_iio[1].events = POLLIN; - - free(buffer_path); - - return; - -close_iio_buffer: - close(pollfd_iio[0].fd); -free_buffer_path: - free(buffer_path); -free_sensor_data: - free(sensor_data); -failed_creation: - valid_class = false; -} - -HWSensorBase::~HWSensorBase() -{ - if (!valid_class) - return; - - free(sensor_data); - close(pollfd_iio[0].fd); - close(pollfd_iio[1].fd); -} - -int HWSensorBase::WriteBufferLenght(unsigned int buf_len, unsigned int store_len) -{ - unsigned int hw_buf_fifo_len, hw_store_fifo_len; - int err, current_len, cur_store_len, buff_enable; - - hw_buf_fifo_len = buf_len * HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN; - if (hw_buf_fifo_len == 0) - hw_buf_fifo_len = HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN; - - hw_store_fifo_len = store_len * HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN; - if (hw_store_fifo_len == 0) - hw_store_fifo_len = HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN; - - current_len = read_sysfs_posint((char *)FILENAME_BUFFER_LENGTH, - common_data.iio_sysfs_path); - if (current_len < 0) - return current_len; - - cur_store_len = read_sysfs_posint((char *)FILENAME_BUFFER_STORE_LENGTH, - common_data.iio_sysfs_path); - if (cur_store_len < 0) - return cur_store_len; - - if ((current_len == (int)hw_buf_fifo_len) && (cur_store_len == (int)hw_store_fifo_len)) - return 0; - - buff_enable = read_sysfs_posint((char *)FILENAME_BUFFER_ENABLE, - common_data.iio_sysfs_path); - if (buff_enable < 0) - return buff_enable; - - if (buff_enable == 1) { - err = write_sysfs_int_and_verify((char *)FILENAME_BUFFER_ENABLE, - common_data.iio_sysfs_path, 0); - if (err < 0) - return err; - } - - err = write_sysfs_int_and_verify((char *)FILENAME_BUFFER_LENGTH, - common_data.iio_sysfs_path, hw_buf_fifo_len); - if (err < 0) - return err; - - err = write_sysfs_int_and_verify((char *)FILENAME_BUFFER_STORE_LENGTH, - common_data.iio_sysfs_path, hw_store_fifo_len); - if (err < 0) - return err; - - current_fifo_len = hw_buf_fifo_len; - - if (buff_enable > 0) { - err = write_sysfs_int_and_verify((char *)FILENAME_BUFFER_ENABLE, - common_data.iio_sysfs_path, 1); - if (err < 0) - return err; - } - - return 0; -} - -int HWSensorBase::Enable(int handle, bool enable) -{ - int err; - - err = SensorBase::Enable(handle, enable); - if (err < 0) - return err; - - err = write_sysfs_int_and_verify((char *)FILENAME_BUFFER_ENABLE, - common_data.iio_sysfs_path, GetStatus()); - if (err < 0) { - ALOGE("%s: Failed to write buffer file \"%s/%s\".", - common_data.device_name, common_data.iio_sysfs_path, FILENAME_BUFFER_ENABLE); - goto restore_status_enable; - } - - return 0; - -restore_status_enable: - SensorBase::Enable(handle, !enable); - return err; -} - -int HWSensorBase::FlushData(bool need_report_event) -{ - bool report_at_once = false; - int err = -1; - int32_t type = SensorBase::sensor_t_data.type; -#ifdef __LP64__ - uint64_t flags; -#else - uint32_t flags; -#endif - - flags = SensorBase::sensor_t_data.flags; - ALOGD("HWSensorBase::FlushData type=%d, flags=%lld", type, flags); - - /* No flush events for One-shot sensors */ - if (SENSOR_FLAG_ONE_SHOT_MODE == (flags & LOCAL_REPORTING_MODE_MASK)) - return -EINVAL; - - if (GetStatus()) { - /* Sensors used fifo would report flush complete event after data in fifo reported, - * so we store the flush timestamp here. When we write fifo data to pipe, - * we compare them. If the fifo data wrote done, then write the flush complete event. - * One exception: if the flush call come after a fifo parse, there would no data - * in the fifo. If we still sent flush complete event like before, that should wait for - * another fifo parse, that would be a very long time (unit seconds). In this case, - * we would sent the flush complete event here. - */ - if (need_report_event && ((type == SENSOR_TYPE_ACCELEROMETER) || - (type == SENSOR_TYPE_GYROSCOPE))) { - int64_t flush_timestamp = get_monotonic_time(); - if (flush_timestamp <= real_pollrate) { - ALOGE("HWSensorBase get flush base timestamp failed"); - return err; - } - ALOGD("hw flush timestamp %lld", flush_timestamp); - /* Scale the real_pollrate by 11/10 because LSM6DS3 ODR has +/-10% skew */ - if (flush_timestamp <= (last_data_timestamp + real_pollrate * 11 / 10)) - report_at_once = true; - else { - flush_timestamp -= real_pollrate * 11 /10; - (SensorBase::timestamp).push_back(flush_timestamp); - } - } - - /* Sensors used fifo would trigger read fifo here */ - if (current_fifo_len > HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN) { - err = write_sysfs_int((char *)FILENAME_FLUSH, common_data.iio_sysfs_path, 1); - if (err < 0) { - ALOGE("%s: Failed to write flush file \"%s/%s\".", - common_data.device_name, common_data.iio_sysfs_path, FILENAME_FLUSH); - return -EINVAL; - } - } - - /* Sensors which not use fifo would sent a flush complete event here. - * Sensors used fifo would sent a flush complete event here too if the fifo - * is empty now. - */ - if (need_report_event && (report_at_once || ((type != SENSOR_TYPE_ACCELEROMETER) && - (type != SENSOR_TYPE_GYROSCOPE)))) - SensorBase::FlushData(true); - - return 0; - - } else - return -EINVAL; - -} - -void HWSensorBase::ThreadTask() -{ - uint8_t *data; - int err, i, read_size; - unsigned int hw_fifo_len; - SensorBaseData sensor_data; - struct iio_event_data event_data; - - if (sensor_t_data.fifoMaxEventCount > 0) - hw_fifo_len = sensor_t_data.fifoMaxEventCount; - else - hw_fifo_len = 1; - - data = (uint8_t *)malloc(hw_fifo_len * scan_size * HW_SENSOR_BASE_DEFAULT_IIO_BUFFER_LEN * sizeof(uint8_t)); - if (!data) - return; - - while (true) { - err = poll(pollfd_iio, 2, -1); - if (err <= 0) - continue; - - if (pollfd_iio[0].revents > 0) { - read_size = read(pollfd_iio[0].fd, data, current_fifo_len * scan_size); - if (read_size <= 0) - continue; - - for (i = 0; i < (read_size / scan_size); i++) { - err = ProcessScanData(data + (i * scan_size), common_data.channels, common_data.num_channels, &sensor_data); - if (err < 0) - continue; - - ProcessData(&sensor_data); - } - } - - if (pollfd_iio[1].revents > 0) { - read_size = read(pollfd_iio[1].fd, &event_data, sizeof(event_data)); - if (read_size <= 0) - continue; - - ProcessEvent(&event_data); - } - } -} - - -HWSensorBaseWithPollrate::HWSensorBaseWithPollrate(HWSensorBaseCommonData *data, const char *name, - struct iio_sampling_frequency_available *sfa, int handle, - int sensor_type, unsigned int hw_fifo_len, int pipe_data_fd, float power_consumption) : - HWSensorBase(data, name, handle, sensor_type, hw_fifo_len, pipe_data_fd, power_consumption) -{ - int i; - unsigned int max_sampling_frequency = 0, min_sampling_frequency = UINT_MAX; - - memcpy(&sampling_frequency_available, sfa, sizeof(sampling_frequency_available)); - - for (i = 0; i < (int)sfa->num_available; i++) { - if ((max_sampling_frequency < sfa->hz[i]) && - (sfa->hz[i] <= CONFIG_ST_HAL_MAX_SAMPLING_FREQUENCY)) - max_sampling_frequency = sfa->hz[i]; - - if (min_sampling_frequency > sfa->hz[i]) - min_sampling_frequency = sfa->hz[i]; - } - - sensor_t_data.minDelay = FREQUENCY_TO_US(max_sampling_frequency); - sensor_t_data.maxDelay = FREQUENCY_TO_US(min_sampling_frequency); -} - -HWSensorBaseWithPollrate::~HWSensorBaseWithPollrate() -{ - -} - -int HWSensorBaseWithPollrate::SetDelay(int handle, int64_t period_ns, int64_t timeout) -{ -#define MIN_BUF_TIMEOUT 2500000000ULL - int err, i; - int64_t min_pollrate_ns, tmp_real_pollrate; - unsigned int sampling_frequency, buf_len, store_len; - - err = HWSensorBase::SetDelay(handle, period_ns, timeout); - if (err < 0) - return err; - - min_pollrate_ns = GetMinPeriod(); - - sampling_frequency = NS_TO_FREQUENCY(min_pollrate_ns); - for (i = 0; i < (int)sampling_frequency_available.num_available; i++) { - if (sampling_frequency_available.hz[i] >= sampling_frequency) - break; - } - if (i == (int)sampling_frequency_available.num_available) - i--; - - err = write_sysfs_int_and_verify((char *)FILENAME_SAMPLING_FREQ, - common_data.iio_sysfs_path, sampling_frequency_available.hz[i]); - if (err < 0) { - ALOGE("%s: Failed to write sampling frequency file \"%s/%s\".", - common_data.device_name, common_data.iio_sysfs_path, FILENAME_SAMPLING_FREQ); - return err; - } - - tmp_real_pollrate = real_pollrate = FREQUENCY_TO_NS(sampling_frequency_available.hz[i]); - - if (sensor_t_data.fifoMaxEventCount > 0) { - store_len = GetMinTimeout() / tmp_real_pollrate; - if (store_len > sensor_t_data.fifoMaxEventCount) - store_len = sensor_t_data.fifoMaxEventCount; - - buf_len = MIN_BUF_TIMEOUT / tmp_real_pollrate; - if (buf_len < store_len) - buf_len = store_len; - - err = WriteBufferLenght(buf_len, store_len); - if (err < 0) - return err; - } - - return 0; -} - -void HWSensorBaseWithPollrate::WriteDataToPipe() -{ - int err, retry = 3; - std::vector<int64_t>::iterator it; - - if (!GetStatusOfHandle(sensor_t_data.handle)) - return; - - if (!(SensorBase::timestamp.empty())) { - int64_t last_timestamp = 0; - for (it = SensorBase::timestamp.begin(); it != SensorBase::timestamp.end(); ) { - /* If two flush event come within 1 odr, there may not have data in hw fifo, - * so report corresponding flush complete events here. - */ - if ((sensor_event.timestamp >= *it) || - (last_timestamp != 0 && (*it - last_timestamp < real_pollrate * 11 / 10))) { - sensors_event_t flush_event_data; - - flush_event_data.sensor = 0; - flush_event_data.timestamp = 0; - flush_event_data.meta_data.sensor = sensor_t_data.handle; - flush_event_data.meta_data.what = META_DATA_FLUSH_COMPLETE; - flush_event_data.type = SENSOR_TYPE_META_DATA; - flush_event_data.version = META_DATA_VERSION; - - while (retry) { - err = SensorBase::WritePipeWithPoll(&flush_event_data, sizeof(sensor_event), - POLL_TIMEOUT_FLUSH_EVENT); - if (err > 0) - break; - - retry--; - ALOGI("%s: Retry writing flush event data to pipe, retry_cnt: %d.", android_name, 3-retry); - } - - if (retry == 0) - ALOGE("%s: Failed to write HW flush_complete, err=%d", android_name, err); - else - ALOGD("write hw flush complete event to pipe succeed."); - - last_timestamp = *it; - it = SensorBase::timestamp.erase(it); - } else - break; - } - } - - /* Scale the real_pollrate by 9/10 because LSM6DS3 ODR has +/-10% skew */ - if (sensor_event.timestamp >= (last_data_timestamp + real_pollrate * 9 / 10)) { - err = SensorBase::WritePipeWithPoll(&sensor_event, sizeof(sensor_event), POLL_TIMEOUT_DATA_EVENT); - if (err <= 0) { - ALOGE("%s: Write sensor data failed.", android_name); - return; - } - - last_data_timestamp = sensor_event.timestamp; - } else - ALOGE("%s: Dropping event type=%d because ts %lld < %lld (%lld + %lld * 9 / 10)", android_name, - (last_data_timestamp + real_pollrate * 9 / 10), last_data_timestamp, real_pollrate); -} |