LightSensor传感器
sensor
将底层值转换的地方
khadas/hardware/amlogic/sensor/st/LightSensor.cpp
LightSensor::readEvents
上传adc原始数据
diff --git a/common/drivers/input/sensors/lsensor/cm3218.c b/common/drivers/input/sensors/lsensor/cm3218.c
index 03ab8f4291..c5f848063e 100755
--- a/common/drivers/input/sensors/lsensor/cm3218.c
+++ b/common/drivers/input/sensors/lsensor/cm3218.c
@@ -299,13 +364,13 @@ static int light_report_value(struct input_dev *input, int data)index = 7;}- input_report_abs(input, ABS_MISC, index);
+ input_report_abs(input, ABS_MISC, data);input_sync(input);return index;}diff --git a/hardware/amlogic/sensor/st/LightSensor.cpp b/hardware/amlogic/sensor/st/LightSensor.cpp
index 4f4fde4f09..9c11e06643 100644
--- a/hardware/amlogic/sensor/st/LightSensor.cpp
+++ b/hardware/amlogic/sensor/st/LightSensor.cpp
@@ -147,7 +147,7 @@ int LightSensor::readEvents(sensors_event_t* data, int count)if (event->code == EVENT_TYPE_LIGHT) {if (event->value != -1) {// FIXME: not sure why we're getting -1 sometimes
- mPendingEvent.light = indexToValue(event->value);
+ mPendingEvent.light = event->value;}}} else if (type == EV_SYN) {(END)
总的patch
diff --git a/common/drivers/input/sensors/lsensor/cm3218.c b/common/drivers/input/sensors/lsensor/cm3218.c
index 03ab8f4291..c5f848063e 100755
--- a/common/drivers/input/sensors/lsensor/cm3218.c
+++ b/common/drivers/input/sensors/lsensor/cm3218.c
@@ -71,7 +71,9 @@static int als_code = 20;static int change_sensitivity = 50;static int if_sensor_init;
-
+//add by zhongyukang
+extern struct class *sensor_class;
+static struct i2c_client *gclient;static int cm3218_read_ara(struct i2c_client *client){int status;
@@ -239,6 +241,62 @@ static int sensor_active(struct i2c_client *client, int enable, int rate)return result;}
+static bool flags_debug = false;
+static ssize_t light_reg_show(struct class *class,
+ struct class_attribute *attr, char *buf)
+{+ int reg_addr ;//= sprintf(buf , "%x\n", cm3218_read(client, sensor->client->addr));
+ if (1 != sscanf(buf, "%d", ®_addr)) {+ printk("<zyk> sscanf fail %s\n",__func__);
+ return -1;
+ }
+ return sprintf(buf, "%x\n",cm3218_read(gclient, reg_addr));
+}
+static ssize_t light_reg_store(struct class *class,
+ struct class_attribute *attr, const char *buf, size_t count)
+{+ int reg_addr = 0,reg_value;
+ char *kbuf, *p, *argv[2];
+ int argn;
+ // int i;
+ unsigned int val = 0, val2 = 0;
+ ssize_t status;
+ long value;
+ int temp_reg_addr_value ;
+ kbuf = kstrdup(buf, GFP_KERNEL);
+ p = kbuf;
+ for (argn = 0; argn < 2; argn++) {+ argv[argn] = strsep(&p, " ");
+ printk(KERN_EMERG"func %s %c \n",__FUNCTION__,*argv[argn]);
+ if (argv[argn] == NULL)
+ break;
+ }
+ status = kstrtol(argv[0], 0, &value);
+ if (status == 0)
+ val = (unsigned int)value;
+ reg_addr = argn ? val : 0;
+ status = kstrtol(argv[1], 0, &value);
+ if (status == 0)
+ val2 = (unsigned int)value;
+ reg_value = (argn > 1) ? val2 : 0;
+ if (reg_addr < 0)
+ return -EINVAL;
+
+ printk(KERN_EMERG"zyk---- %s %x %x \n",__FUNCTION__,reg_addr,reg_value);
+ if(reg_addr == 0xf){+ temp_reg_addr_value = cm3218_read(gclient, reg_value);
+ printk("reg:0x%x value:0x%x\n",reg_value,temp_reg_addr_value);
+ // status = sprintf(buf, "%x\n",reg_value);
+ }else if(reg_addr == 0xd){+ flags_debug = !flags_debug;
+ }
+ else {+ cm3218_write(gclient, reg_addr, reg_value);
+ }
+ return count;
+
+}
+static CLASS_ATTR(light_reg, 0664, light_reg_show, light_reg_store);static int sensor_init(struct i2c_client *client){@@ -273,14 +331,21 @@ static int sensor_init(struct i2c_client *client)if_sensor_init = 1;msleep(250);
-
+ gclient = client;
+ status = class_create_file(sensor_class, &class_attr_light_reg);
+ if (status) {+ printk(KERN_ERR "%s:Fail to creat accel class file\n", __func__);
+ return status;
+ }return status;}static int light_report_value(struct input_dev *input, int data){unsigned char index = 0;
-
+ if(!!flags_debug){+ printk("%s data:%d\n",__func__,data);
+ }if (data <= 700) {index = 0;} else if (data <= 1400) {@@ -299,13 +364,13 @@ static int light_report_value(struct input_dev *input, int data)index = 7;}- input_report_abs(input, ABS_MISC, index);
+ input_report_abs(input, ABS_MISC, data);input_sync(input);return index;}-static int cm3218_read_lux(struct i2c_client *client, int *lux)
+int cm3218_read_lux(struct i2c_client *client, int *lux){int lux_data;diff --git a/common/drivers/input/sensors/sensor-dev.c b/common/drivers/input/sensors/sensor-dev.c
index ef942f3901..2fccdfa698 100755
--- a/common/drivers/input/sensors/sensor-dev.c
+++ b/common/drivers/input/sensors/sensor-dev.c
@@ -50,7 +50,7 @@ struct sensor_calibration_data {static struct sensor_private_data *g_sensor[SENSOR_NUM_TYPES];static struct sensor_operate *sensor_ops[SENSOR_NUM_ID];static int sensor_probe_times[SENSOR_NUM_ID];
-static struct class *sensor_class;
+struct class *sensor_class;static struct sensor_calibration_data sensor_cali_data;static int sensor_calibration_data_read(struct sensor_calibration_data *calibration_data)
@@ -279,6 +279,44 @@ static ssize_t gyro_calibration_store(struct class *class,static CLASS_ATTR(gyro_calibration, 0664, gyro_calibration_show, gyro_calibration_store);+#define __FITURE_LIGHT_LUX_DEBUG__
+#ifdef __FITURE_LIGHT_LUX_DEBUG__
+extern int cm3218_read_lux(struct i2c_client *client, int *lux);
+static ssize_t light_lux_show(struct class *class,
+ struct class_attribute *attr, char *buf){+ int result = 0;
+ int value = 0;
+ struct sensor_private_data *sensor = g_sensor[SENSOR_TYPE_LIGHT];
+ if (sensor == NULL)
+ return -1;
+ cm3218_read_lux(sensor->client, &result);
+ if (result <= 700) {+ value = 10;
+ } else if (result <= 1400) {+ value = 160;
+ } else if (result <= 2800) {+ value = 225;
+ } else if (result <= 5600) {+ value = 320;
+ } else if (result <= 11200) {+ value = 640;
+ } else if (result <= 22400) {+ value = 1280;
+ } else if (result <= 44800) {+ value = 2600;
+ } else {+ value = 10240;
+ }
+ return sprintf(buf, "light lux value: %d\n", value);
+}
+
+static ssize_t light_lux_store(struct class *class,
+ struct class_attribute *attr, const char *buf, size_t count){+ return count;
+}
+
+static CLASS_ATTR(light_lux, 0664, light_lux_show, light_lux_store);
+#endifstatic int sensor_class_init(void){int ret ;
@@ -295,6 +333,13 @@ static int sensor_class_init(void)printk(KERN_ERR "%s:Fail to creat gyro class file\n", __func__);return ret;}
+ #ifdef __FITURE_LIGHT_LUX_DEBUG__
+ ret = class_create_file(sensor_class, &class_attr_light_lux);
+ if (ret) {+ printk(KERN_ERR "%s:Fail to creat light sensor class file\n", __func__);
+ return ret;
+ }
+ #endifreturn 0;}diff --git a/hardware/amlogic/sensor/st/LightSensor.cpp b/hardware/amlogic/sensor/st/LightSensor.cpp
index 4f4fde4f09..9c11e06643 100644
--- a/hardware/amlogic/sensor/st/LightSensor.cpp
+++ b/hardware/amlogic/sensor/st/LightSensor.cpp
@@ -147,7 +147,7 @@ int LightSensor::readEvents(sensors_event_t* data, int count)if (event->code == EVENT_TYPE_LIGHT) {if (event->value != -1) {// FIXME: not sure why we're getting -1 sometimes
- mPendingEvent.light = indexToValue(event->value);
+ mPendingEvent.light = event->value;}}} else if (type == EV_SYN) {
关掉sensor服务:
确认:
console:/ # dumpsys sensorservice
No Sensors on the device
devInitCheck : -19
console:/ #
patch
---common/arch/arm/boot/dts/amlogic/manzala.dts | 2 +-common/arch/arm/configs/manzala_a32_defconfig | 2 +-device/amlogic/common/core_amlogic.mk | 7 +++---.../products/mbox/manifest/manifest_aosp.xml | 9 --------device/amlogic/manzala/BoardConfig.mk | 22 +++++++++----------5 files changed, 16 insertions(+), 26 deletions(-)diff --git a/common/arch/arm/boot/dts/amlogic/manzala.dts b/common/arch/arm/boot/dts/amlogic/manzala.dts
index d41e3bb871..0542cfa09a 100755
--- a/common/arch/arm/boot/dts/amlogic/manzala.dts
+++ b/common/arch/arm/boot/dts/amlogic/manzala.dts
@@ -1001,7 +1001,7 @@irq_enable = <0>;poll_delay_ms = <30>;layout = <1>;
- status = "okay";
+ status = "disabled";};};diff --git a/common/arch/arm/configs/manzala_a32_defconfig b/common/arch/arm/configs/manzala_a32_defconfig
index b2ed708b27..13af79a45d 100755
--- a/common/arch/arm/configs/manzala_a32_defconfig
+++ b/common/arch/arm/configs/manzala_a32_defconfig
@@ -253,7 +253,7 @@ CONFIG_AMLOGIC_CRYPTO=yCONFIG_AMLOGIC_CRYPTO_DMA=yCONFIG_AMLOGIC_INPUT=yCONFIG_SENSOR_DEVICE=y
-CONFIG_LIGHT_DEVICE=y
+# CONFIG_LIGHT_DEVICE is not setCONFIG_AMLOGIC_AVIN_DETECT=yCONFIG_AMLOGIC_INPUT_KEYBOARD=yCONFIG_AMLOGIC_ADC_KEYPADS=y
diff --git a/device/amlogic/common/core_amlogic.mk b/device/amlogic/common/core_amlogic.mk
index 7a5cafd1f3..901950bdd0 100755
--- a/device/amlogic/common/core_amlogic.mk
+++ b/device/amlogic/common/core_amlogic.mk
@@ -209,7 +209,6 @@ PRODUCT_PACKAGES += \hwcomposer.amlogic \memtrack.amlogic \screen_source.amlogic \
- sensors.amlogic \thermal.amlogic#glscaler and 3d format api
@@ -429,9 +428,9 @@ PRODUCT_PACKAGES += \android.hardware.light@2.0-impl \android.hardware.light@2.0-service# Sensor HAL
-PRODUCT_PACKAGES += \
- android.hardware.sensors@1.0-service \
- android.hardware.sensors@1.0-impl \
+#PRODUCT_PACKAGES += \
+# android.hardware.sensors@1.0-service \
+# android.hardware.sensors@1.0-impl \#thermal halPRODUCT_PACKAGES += \android.hardware.thermal@1.0-impl \
diff --git a/device/amlogic/common/products/mbox/manifest/manifest_aosp.xml b/device/amlogic/common/products/mbox/manifest/manifest_aosp.xml
index 7eabbb0ad9..ed47eb0eb0 100755
--- a/device/amlogic/common/products/mbox/manifest/manifest_aosp.xml
+++ b/device/amlogic/common/products/mbox/manifest/manifest_aosp.xml
@@ -300,15 +300,6 @@<instance>default</instance></interface></hal>
- <hal format="hidl">
- <name>android.hardware.sensors</name>
- <transport>hwbinder</transport>
- <version>1.0</version>
- <interface>
- <name>ISensors</name>
- <instance>default</instance>
- </interface>
- </hal><sepolicy><version>27.0</version></sepolicy>
diff --git a/device/amlogic/manzala/BoardConfig.mk b/device/amlogic/manzala/BoardConfig.mk
index 08ccf247c8..16409a7173 100755
--- a/device/amlogic/manzala/BoardConfig.mk
+++ b/device/amlogic/manzala/BoardConfig.mk
@@ -104,17 +104,17 @@ BOARD_ROOT_EXTRA_FOLDERS += odmendif# Sensors
-BOARD_GRAVITY_SENSOR_SUPPORT := false
-BOARD_COMPASS_SENSOR_SUPPORT := false
-BOARD_GYROSCOPE_SENSOR_SUPPORT := false
-BOARD_PROXIMITY_SENSOR_SUPPORT := false
-BOARD_LIGHT_SENSOR_SUPPORT := true
-BOARD_PRESSURE_SENSOR_SUPPORT := false
-BOARD_TEMPERATURE_SENSOR_SUPPORT := false
-
-BOARD_SENSOR_ST := true
-BOARD_SENSOR_MPU_VR := false
-BOARD_SENSOR_MPU_PAD := false
+#BOARD_GRAVITY_SENSOR_SUPPORT := false
+#BOARD_COMPASS_SENSOR_SUPPORT := false
+#BOARD_GYROSCOPE_SENSOR_SUPPORT := false
+#BOARD_PROXIMITY_SENSOR_SUPPORT := false
+#BOARD_LIGHT_SENSOR_SUPPORT := true
+#BOARD_PRESSURE_SENSOR_SUPPORT := false
+#BOARD_TEMPERATURE_SENSOR_SUPPORT := false
+
+#BOARD_SENSOR_ST := true
+#BOARD_SENSOR_MPU_VR := false
+#BOARD_SENSOR_MPU_PAD := falseBOARD_ODMIMAGE_FILE_SYSTEM_TYPE := ext4BOARD_USES_ODMIMAGE := true--
2.17.1
LightSensor传感器相关推荐
- android传感器_Android传感器
android传感器 In this tutorial, we'll be digging deep into the world of Android Sensors. Our smartphone ...
- 条形码、二维码、RFID优缺点,卫星定位,传感器分类及应用场景
条形码.二维码.RFID,以及三者优缺点 条形码的身影各个商品的背后随处可见,在我们的生活中应用十分普遍,由黑白相间的条纹组成的图形,其中黑色部分称为"条"白色的称为"空 ...
- android手机传感器总结
传感器的分类 动作传感器 加速度传感器 重力传感器 陀螺仪 位置传感器 方向传感器 磁力传感器 环境传感器 温度传感器 压力传感器 亮度传感器 传感器的使用 1.获取SensorManager对象 2 ...
- c语言光敏程序代码,ADC实验之光敏传感器
ADC实验之光敏传感器 硬件连接 我们可以测量A的电位,进而测量光的强度,光强与A点电压的对应关系如下: 电流反应的光敏二极管的导通状态,光强与电流对应关系如下: 因此,我们可以得出ADC读取的电压值 ...
- 【跟着江科大学Stm32】GPIO_按键控制LED_光敏传感器控制蜂鸣器
不要管别人怎么说,一定要坚持,坚持一定会有收获! 一.按键控制LED 用两个按键来分别控制两个LED的状态,初始状态两灯均熄灭,按下1次点亮,再按下熄灭 因为江科大的套餐抢不到 我就自己看着图和利用现 ...
- ADC实验之光敏传感器
ADC实验之光敏传感器 硬件连接 我们可以测量A的电位,进而测量光的强度,光强与A点电压的对应关系如下: 电流反应的光敏二极管的导通状态,光强与电流对应关系如下: 因此,我们可以得出ADC读取的电压值 ...
- Android手机传感器的使用
安卓传感器使用 传感器的分类 动作传感器 位置传感器 环境传感器 传感器的使用 获取安卓手机中所有传感器 传感器事件概念 如何将传感器注册到应用程序上? 传感器的采样率 传感器的属性 加速度传感器的使 ...
- 英特尔硬件加速_英特尔Ultrabook硬件原型-Windows 8和传感器平台
英特尔硬件加速 What better time to test the Sensors in this Intel Ultrabook prototype then while in the air ...
- STM32F4_光敏传感器
目录 1. 什么是光敏传感器.光敏电阻 2. 硬件分析 3. 实验程序 3.1 main.c 3.2 ADC3.c 3.3 ADC3.h 3.4 Lightsensor.c 3.5 Lightsens ...
最新文章
- ITK:使用分水岭Watershed方法对图像进行分割
- innerHTMl和确认提示的使用
- java 漏洞挖掘_Apache Tika命令注入漏洞挖掘
- 天云大数据_天云大数据三度蝉联毕马威领先金融科技50强
- P3599-Koishi Loves Construction【构造,数论】
- 交叉编译openssl不修改Makefile的方法
- HDU 1002 大整数
- 高性能计算机的基准测试程序包括,QX∕T 148-2020 气象领域高性能计算机系统测试与评估规范(可复制版)(40页)-原创力文档...
- System Verilog面向对象编程(OPP)基础——类(class)的基本使用
- Python Linked List
- 视频点播-上传视频状态异常
- IE兼容性视图无法添加网站
- mac安装appium环境 iPhone真机测试
- java publisher_Publisher/Subscriber(发布/订阅者)消息模式开发流程
- 理解无线电波极化与天线极化
- mui日期选择器html,MUI 移动端时间选择器
- 2019 牛客多校第二场 4/10
- linux 软件包kbd 位置,kbd-audio:通过麦克风来捕获和分析键盘输入的工具
- Codeforces Global Round 21) C. Fishingprince Plays With Array
- pdf文件转换ppt可编辑_创建,转换和编辑PDF文件的免费工具