MTK平台添加虚拟sensor
一、添加一个新的sensor类型
HUB部分
1、/vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/contexthub_fw.c
在uint8_t chreTypeToMtkType(uint8_t sensortype)中添加:case SENS_TYPE_PICKUP_TEST:return SENSOR_TYPE_PICKUP_TEST;在uint8_t mtkTypeToChreType(uint8_t sensortype)中添加:case SENSOR_TYPE_PICKUP_TEST:return SENS_TYPE_PICKUP_TEST;
2、contexthub_fw.h
在SAR类型后面添加:
#define SENSOR_TYPE_PICKUP_TEST 73
并将SENSOR_TYPE_MAX的值加 1
3、/vendor/mediatek/proprietary/hardware/contexthub/firmware/inc/sensType.h
在OIS后添加:
#define SENS_TYPE_PICKUP_TEST 56
并将SENS_TYPE_END定义为 SENS_TYPE_PICKUP_TEST
4、contexthub_fw.c
在static void initSensorReportingInfo(void)中添加:sensorReportingMode[SENSOR_TYPE_PICKUP_TEST] = onChange;sensorAccurancyMode[SENSOR_TYPE_PICKUP_TEST] = SENSOR_STATUS_ACCURACY_HIGH;
Kernel部分
5、/kernel-4.14/drivers/misc/mediatek/sensors-1.0/hwmon/include/hwmsensor.h
在SAR后面添加:
#define SENSOR_TYPE_PICKUP_TEST 73
并将SENSOR_TYPE_MAX_NUM定义为 SENSOR_TYPE_PICKUP_TEST在ID_SAR之后添加:
#define ID_PICKUP_TEST (ID_BASE + SENSOR_TYPE_PICKUP_TEST - 1)
并将ID_SENSOR_MAX_HANDLE定义为 ID_PICKUP_TEST
6、/kernel-4.14/drivers/misc/mediatek/sensors-1.0/sensorHub/SCP_nanoHub/SCP_nanoHub.c
在static void SCP_sensorHub_init_sensor_state(void)中添加:
mSensorState[SENSOR_TYPE_PICKUP_TEST].sensorType = SENSOR_TYPE_PICKUP_TEST;
mSensorState[SENSOR_TYPE_PICKUP_TEST].timestamp_filter = false;在sensor_get_data_from_hub方法中添加:case ID_PICKUP_TEST: data->time_stamp = data_t->time_stamp; data->tilt_event.state = data_t->tilt_event.state; break;
7、添加kernel对应的driver文件及配置资源链接
8、/kernel-4.14/drivers/misc/mediatek/sensors-1.0/situation/situation.c
在static int handle_to_index(int handle)中添加:
case ID_PICKUP_TEST: index = pickup_test; break;
9、/kernel-4.14/drivers/misc/mediatek/sensors-1.0/situation/situation.h
在enum situation_index_table {中添加:sar,
+ pickup_test, max_situation_support,
10、/device/mediatek/common/kernel-headers/linux/hwmsensor.h
添加对应的宏定义#define SENSOR_STRING_TYPE_SAR "android.sensor.sar"+#define SENSOR_TYPE_PICKUP_TEST 73+#define SENSOR_STRING_TYPE_PICKUP_TEST "android.sensor.pickup_test"#define ID_SAR (ID_BASE + SENSOR_TYPE_SAR - SENSOR_TYPE_DEVICE_PRIVATE_BASE - 1)+#define ID_PICKUP_TEST (ID_BASE + SENSOR_TYPE_PICKUP_TEST - 1)
HAL部分
11、/vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/SensorContext.cpp
在static int handleToDriver(int handle) {中添加:case ID_SAR:
+ case ID_PICKUP_TEST: return situation;
12、/vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/SensorList.cpp
添加如下定义:
#ifdef CUSTOM_KERNEL_PICKUP_TEST_SENSOR#ifndef PICKUP_TEST #define PICKUP_TEST "PICKUP_TEST" #endif #ifndef PICKUP_TEST_VENDER #define PICKUP_TEST_VENDER "MTK" #endif #ifndef PICKUP_TEST_VERSION #define PICKUP_TEST_VERSION 1 #endif #ifndef PICKUP_TEST_RANGE #define PICKUP_TEST_RANGE 1.0f #endif #ifndef PICKUP_TEST_RESOLUTION #define PICKUP_TEST_RESOLUTION 1.0f #endif #ifndef PICKUP_TEST_POWER #define PICKUP_TEST_POWER 0 #endif #ifndef PICKUP_TEST_MINDELAY #define PICKUP_TEST_MINDELAY -1 #endif #ifndef PICKUP_TEST_FIFO_MAX_COUNT #define PICKUP_TEST_FIFO_MAX_COUNT 0 #endif #ifndef PICKUP_TEST_FIFO_RESERVE_COUNT #define PICKUP_TEST_FIFO_RESERVE_COUNT 0 #endif #ifndef PICKUP_TEST_MAXDELAY #define PICKUP_TEST_MAXDELAY 0 #endif #ifndef PICKUP_TEST_FLAGS #define PICKUP_TEST_FLAGS SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP #endif
#endif然后在void SensorList::initSensorList(void) {中添加:
#ifdef CUSTOM_KERNEL_PICKUP_TEST_SENSOR memset(&sensor, 0, sizeof(struct sensor_t)); sensor.name = PICKUP_TEST; sensor.vendor = PICKUP_TEST_VENDER; sensor.version = PICKUP_TEST_VERSION; sensor.handle = ID_PICKUP_TEST + ID_OFFSET; sensor.type = SENSOR_TYPE_PICKUP_TEST; sensor.maxRange = PICKUP_TEST_RANGE; sensor.resolution = PICKUP_TEST_RESOLUTION; sensor.power = PICKUP_TEST_POWER; sensor.minDelay = PICKUP_TEST_MINDELAY; sensor.fifoReservedEventCount = PICKUP_TEST_FIFO_RESERVE_COUNT; sensor.fifoMaxEventCount = PICKUP_TEST_FIFO_MAX_COUNT; sensor.stringType = SENSOR_STRING_TYPE_PICKUP_TEST; sensor.maxDelay = PICKUP_TEST_MAXDELAY; sensor.flags = PICKUP_TEST_FLAGS; mSensorList.push_back(sensor);
#endif针对CUSTOM_KERNEL_PICKUP_TEST_SENSOR这个宏,需要在如下文件中添加:
mt6769/h3/base/device/mediateksample/k69v1_64/ProjectConfig.mk
mt6769/h3/h38fa_hda/device/mediateksample/k69v1_64/ProjectConfig.mk
.../device/mediateksample/k69v1_64/ProjectConfig.mk
13、/vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/Situation.cpp
在int SituationSensor::HandleToIndex(int handle) {中添加:case ID_PICKUP_TEST: index = pickup_test; break;
14、/vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/Situation.h
在class SituationSensor : public SensorBase {中添加sar,
+ pickup_test, max_situation,
二、添加对应的实现文件
HUB部分
1、vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/VIRT_Driver
在如上目录中添加对应的虚拟sensor驱动文件:pickup_test.c
2、vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/XXX/platform/feature_config/chre.mk添加如下编译配置。
######## Lift and putdown #######
#ifeq ($(CFG_PICKUP_TEST_SUPPORT),yes)
INCLUDES += -I$(SOURCE_DIR)/middleware/contexthub/algo/wakeup_gesture
INCLUDES += -I$(SOURCE_DIR)/middleware/contexthub/VIRT_Driver
C_FILES += $(SOURCE_DIR)/middleware/contexthub/VIRT_Driver/pickup_test.c
C_FILES += $(SOURCE_DIR)/middleware/contexthub/VIRT_Driver/algoDataResample.c
LIBFLAGS += -L$(SOURCE_DIR)/middleware/contexthub/algo/wakeup_gesture -lwakeupgesture
endif
3、vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/XXX/k69v1_64/ProjectConfig.mk中添加宏定义:
CFG_PICKUP_TEST_SUPPORT = yes
kernel部分
4、kernel-4.14/drivers/misc/mediatek/sensors-1.0/situation/pickup_test/目录中添加对应的kernel文件:
Kconfig/Makefile/pickup_test.c/pickup_test.h
5、kernel-4.14/drivers/misc/mediatek/sensors-1.0/situation/目录下的Kconfig和Makefile中添加pickup_test的编译选项:
source "drivers/misc/mediatek/sensors-1.0/situation/pickup_test/Kconfig"obj-$(CONFIG_MTK_PICKUP_TEST_HUB) += pickup_test/
6、kernel-4.14\arch\arm64\configs中的k69v1_64_debug_defconfig和k69v1_64_defconfig中添加CONFIG_MTK_PICKUP_TEST_HUB宏定义。
CONFIG_MTK_PICKUP_TEST_HUB=y
至此,安装SensorTest1-V0.3.apk后,在列表中就可以看到PICKUP_TEST对应的sensor。
但是发现两个问题:
1、通过log来看,数据是能正常上报的,但是apk中无数据刷新。
2、上报抬起或者放下的事件后,无法disable掉该sensor。
如上两点目前还未找到问题原因,有知道的小伙伴可以留言或者私信我。
转载请注明出处!
MTK平台添加虚拟sensor相关推荐
- AndroidQ(10.0) MTK平台添加新分区
65 平台增加一个新分区,用于保存特殊数据,修改文件列表如下 modified: build/make/core/Makefilemodified: build/make/core/config.mk ...
- MTK平台点亮sensor以及mtk开机初始化
MTK点亮sensor Probe:上电–>matach id–>下电 Driver:Kernel部分和Hal部分 dtsi:主要配置GPI的上电逻辑,把camera的上电管脚与平台管脚相 ...
- Android11.0(R) MTK平台添加新分区
mtk 平台增加一个新分区test,修改文件列表如下 modified: device/mediatek/mt6765/init.mt6765.rcmodified: device/mediatek/ ...
- MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些
[DESCRIPTION] MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些 [SOLUTION] KK Hal Support 9 virtual sensors,这些虚拟sen ...
- MTK虚拟sensor梳理
MTK虚拟sensor梳理 一 虚拟sensor注册 以倾斜检查虚拟sensor为例,梳理虚拟sensor的控制流和数据流 倾斜虚拟sensor驱动在SCP virt_driver里tilt_dete ...
- MTK 平台sensor arch 介绍-hal
MTK 平台sensor arch 介绍-hal 一:整体框架 二:具体流程简介 AP-HAL: (1)init & control flow 我们以前文的originchannel 的 ac ...
- MTK手机平台添加资源和菜单的方式
MTK手机平台添加资源和菜单的方式 一. 菜单的修改或增加: 以一个例子的方式介绍如何添加一个菜单,例子如下: 在主菜单的"设置"菜单下增加一个"我的设定&q ...
- MTK 平台sensor arch 介绍-kernel
MTK 平台sensor arch 介绍-kernel AP-kernel 1.文件相关介绍 1.进入到(core) 2.进入到(mtk_nanohub) 3.(lsm6dsm_secondary)是 ...
- MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率
1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...
最新文章
- java 关键字(面试题)
- Nginx源码分析:核心模块剖析及常见问题
- c++ static allocator
- weblogic中数据源_如何在WebLogic Server中创建MySQL数据源
- Spring Boot swagger之前后端分离
- for循环下标 shell_如果再写for循环,我就锤自己
- Another FTP daemon is already running?
- 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象...
- linux最小化连接开放wifi,CentOS最小化安装后启用无线连接网络
- Milogs客户销售工作日志软件系统简介
- 什么是通配符 计算机网络,通配符
- ASP.NET Core 引用其他程序集项目里面的 Controller 控制器
- homelede软路由设置方法_小米路由器3 5G WiFi设置方法
- 编译原理教程_2 文法和语言
- 微信号注册人工服务器,怎么设置微信公众号接入人工客服?
- [学渣版]英语四、六级救急小套路总结
- UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS
- 从 Factor Zoo 到 Factor War,实证资产定价走向何方?
- Pytorch框架学习记录10——线性层
- 真的羡慕玉自寒和烈如歌的爱情