一、添加一个新的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相关推荐

  1. AndroidQ(10.0) MTK平台添加新分区

    65 平台增加一个新分区,用于保存特殊数据,修改文件列表如下 modified: build/make/core/Makefilemodified: build/make/core/config.mk ...

  2. MTK平台点亮sensor以及mtk开机初始化

    MTK点亮sensor Probe:上电–>matach id–>下电 Driver:Kernel部分和Hal部分 dtsi:主要配置GPI的上电逻辑,把camera的上电管脚与平台管脚相 ...

  3. Android11.0(R) MTK平台添加新分区

    mtk 平台增加一个新分区test,修改文件列表如下 modified: device/mediatek/mt6765/init.mt6765.rcmodified: device/mediatek/ ...

  4. MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些

    [DESCRIPTION] MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些 [SOLUTION] KK Hal Support 9 virtual sensors,这些虚拟sen ...

  5. MTK虚拟sensor梳理

    MTK虚拟sensor梳理 一 虚拟sensor注册 以倾斜检查虚拟sensor为例,梳理虚拟sensor的控制流和数据流 倾斜虚拟sensor驱动在SCP virt_driver里tilt_dete ...

  6. MTK 平台sensor arch 介绍-hal

    MTK 平台sensor arch 介绍-hal 一:整体框架 二:具体流程简介 AP-HAL: (1)init & control flow 我们以前文的originchannel 的 ac ...

  7. MTK手机平台添加资源和菜单的方式

    MTK手机平台添加资源和菜单的方式 一. 菜单的修改或增加: 以一个例子的方式介绍如何添加一个菜单,例子如下:       在主菜单的"设置"菜单下增加一个"我的设定&q ...

  8. MTK 平台sensor arch 介绍-kernel

    MTK 平台sensor arch 介绍-kernel AP-kernel 1.文件相关介绍 1.进入到(core) 2.进入到(mtk_nanohub) 3.(lsm6dsm_secondary)是 ...

  9. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

最新文章

  1. java 关键字(面试题)
  2. Nginx源码分析:核心模块剖析及常见问题
  3. c++ static allocator
  4. weblogic中数据源_如何在WebLogic Server中创建MySQL数据源
  5. Spring Boot swagger之前后端分离
  6. for循环下标 shell_如果再写for循环,我就锤自己
  7. Another FTP daemon is already running?
  8. 《Entity Framework 6 Recipes》中文翻译系列 (24) ------ 第五章 加载实体和导航属性之查询内存对象...
  9. linux最小化连接开放wifi,CentOS最小化安装后启用无线连接网络
  10. Milogs客户销售工作日志软件系统简介
  11. 什么是通配符 计算机网络,通配符
  12. ASP.NET Core 引用其他程序集项目里面的 Controller 控制器
  13. homelede软路由设置方法_小米路由器3 5G WiFi设置方法
  14. 编译原理教程_2 文法和语言
  15. 微信号注册人工服务器,怎么设置微信公众号接入人工客服?
  16. [学渣版]英语四、六级救急小套路总结
  17. UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS
  18. 从 Factor Zoo 到 Factor War,实证资产定价走向何方?
  19. Pytorch框架学习记录10——线性层
  20. 真的羡慕玉自寒和烈如歌的爱情

热门文章

  1. 百度开发者认证流程及所需信息
  2. 【EVE-NG】模拟器打不开/分不到地址
  3. VBA一键给代码加注释(翻译表名、字段名)
  4. 常用数据结构与常用算法,
  5. (stm32)DT35与ADS8320
  6. linux上oracle导入mysql_Linux 下 oracle 导入数据库—数据泵方式导入dmp文件
  7. tp5框架配置多个Cache
  8. 2022牛客多校第一场A、C、D、G、I、J
  9. 结构优化设计及matlab实现,基于ANSYS和MATLAB的结构优化设计
  10. opencv——PNG格式图像读取转换函数