pick up bring up sensor1.0

  • 1.pick up对比
  • 2.SCP
    • 1.添加驱动文件
    • 2.添加编译环境(打开开关)
      • 注:编译过程中如果显示内存不够
    • 3.修改底层数据上报方式
  • 3.Kernel层设置
    • 1.打开开关
    • 2.修改上报方式
    • 3.修改数据上报方式
  • 4.HAL层
    • 1.修改sensor信息
    • 2.定义宏开关
  • 注:写的不对的地方请告知,欢迎指正。
  • 5.部分修改与改进(实践)
    • 1.第一部分修改
    • 2.第二部分修改
    • 3.第三部分修改
    • 4.第四部分修改
    • 5.第五部分修改

1.pick up对比

pick up 也就是手机中的抬起亮屏。

物理陀螺仪版本的pick up 底层驱动pickup.c                    (陀螺仪辅助精度高)
虚拟陀螺仪版本的pick up 不使用陀螺仪,驱动文件 acc_pickup.c  (没有陀螺仪辅助精度低)

移植三部分: HAL----Kernel----SCP

2.SCP

1.添加驱动文件

路径:
vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/VIRT_Driver

2.添加编译环境(打开开关)

路径:
vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/平台/机型/ProjectConfig.mk
CFG_MOTION_SUPPORT = yes
CFG_PICKUP_SUPPORT = yes            //定义的开关(该注释不能添加进代码)
CFG_WIN_ORIENTATION_SUPPORT = yes
路径:
vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/平台/platform/feature_config/chre.mk
######## pickup ########
ifeq ($(CFG_PICKUP_SUPPORT),yes)
C_FILES  += $(SOURCE_DIR)/middleware/contexthub/VIRT_Driver/pickup.c
endif

注:编译过程中如果显示内存不够

路径:
vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/平台/platform/Setting.ini
pedometer:9600
pickup:9500             //扩大pickup的内存大小
stationary:2898

3.修改底层数据上报方式

路径:vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/contexthub_fw.c
static void initSensorReportingInfo(void)
{....sensorReportingMode[SENSOR_TYPE_PICK_UP_GESTURE] = onChange;            //修改为onchange的模式sensorAccurancyMode[SENSOR_TYPE_PICK_UP_GESTURE] = SENSOR_STATUS_ACCURACY_HIGH;...
}static void contextHubTransferOnChangeSensor(uint8_t mtk_type, const struct mtkActiveSensor *sensor)
{...case SENSOR_TYPE_PICK_UP_GESTURE:  //新增//osLog(LOG_INFO, "mtk_type: %d send flush action\n", mtk_type);dummy.value[0] = (int32_t)(sensor->buffer.single[numSamples].idata);ret = contextHubSramFifoWrite(&dummy);if (ret == SRAM_FIFO_FULL)contextHubSramFifoRead();break;...
}

3.Kernel层设置

1.打开开关

路径1:
kernel-4.14/arch/arm64/configs/$project_defconfig
路径2:
kernel-4.14/arch/arm64/configs/$project_debug_defconfig
CONFIG_MTK_TILTDETECTHUB=y
CONFIG_MTK_PICKUPHUB=y              //打开这个开关
CONFIG_CUSTOM_KERNEL_SENSORHUB=y

2.修改上报方式

路径:
kernel-4.14/drivers/misc/mediatek/sensors-1.0/sensorHub/SCP_nanoHub/SCP_nanoHub.c
mSensorState[SENSOR_TYPE_PICK_UP_GESTURE].sensorType =SENSOR_TYPE_PICK_UP_GESTURE;mSensorState[SENSOR_TYPE_PICK_UP_GESTURE].rate = SENSOR_RATE_ONCHANGE;      //onchange类型mSensorState[SENSOR_TYPE_PICK_UP_GESTURE].timestamp_filter = false;

3.修改数据上报方式

路径:
kernel-4.14/drivers/misc/mediatek/sensors-1.0/situation/pickup_gesture/pickup_gesture.c
static int pickup_gesture_recv_data(struct data_unit_t *event,void *reserved)
{int err = 0;if (event->flush_action == FLUSH_ACTION)pr_debug("pickup_gesture do not support flush\n");else if (event->flush_action == DATA_ACTION)err = situation_data_report_t(ID_PICK_UP_GESTURE,(uint32_t)event->data[0], (int64_t)event->time_stamp);    //report的方式 如果编译报错可以保持其默认配置暂不修改return err;
}

4.HAL层

1.修改sensor信息

路径:
vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/SensorList.cpp
#ifdef CUSTOM_KERNEL_PICK_UP_SENSORmemset(&sensor, 0, sizeof(struct sensor_t));sensor.name = "XXXXXX";                          //X代表自定义sensor.vendor = "XXXXX";                         //X代表自定义sensor.version = PICK_UP_VERSION;sensor.handle = ID_PICK_UP_GESTURE + ID_OFFSET;sensor.type =  XXXXXXXX;                         //X代表传感器类型sensor.maxRange = PICK_UP_RANGE;sensor.resolution = PICK_UP_RESOLUTION;sensor.power = PICK_UP_POWER;sensor.minDelay = PICK_UP_MAXDELAY;sensor.fifoReservedEventCount = PICK_UP_FIFO_RESERVE_COUNT;sensor.fifoMaxEventCount = PICK_UP_FIFO_MAX_COUNT;sensor.stringType = "XXXXXXX";                  //X代表自定义sensor.maxDelay = PICK_UP_MAXDELAY;sensor.flags = SENSOR_FLAG_ON_CHANGE_MODE|SENSOR_FLAG_WAKE_UP;mSensorList.push_back(sensor);
#endif

2.定义宏开关

路径:
device/xiaomi/机型/ProjectConfig.mk
CUSTOM_KERNEL_PICK_UP_SENSOR = yes          //打开pickup的,这里因为将这个增加到上面的AUTO_ADD_GLOBAL_DEFINE_BY_NAME里面了,所以不需要在.mk中再定义了!
...
CUSTOM_KERNEL_WAKE_GESTURE_SENSOR = no          //关闭谷歌原生

注:写的不对的地方请告知,欢迎指正。

5.部分修改与改进(实践)

1.第一部分修改

路径:device/XXX/机型
文件:ProjectConfig.mk
CUSTOM_KERNEL_PEDOMETERENSOR
+CUSTOM_KERNEL_PICK_UP_SENSOR       //添加pickup hal层的开关(效果ui会出现button)
CUSTOM_KERNEL_SIGNIFICANT_MOTION_SENSOR
CUSTOM_KERNEL_ORIENTATION_SENSOR = yes
+CUSTOM_KERNEL_PICK_UP_SENSOR = yes  //添加pickup hal层的开关(效果ui会出现button)

两个都添加是没有问题的,添加任意一个也是没问题的,默认的谷歌的pickup改成no(2定义宏开关)

2.第二部分修改

路径:alps/vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/mt6768/merlin
文件:ProjectConfig.mk
CFG_GLANCE_SUPPORT = yes
+CFG_PICKUP_SUPPORT = no
+CFG_ACC_PICKUP_SUPPORT = yes
CFG_LIFT_PUTDOWN_SUPPORT = yes

3.第三部分修改

路径:alps/kernel-4.14/drivers/misc/mediatek/sensors-1.0/sensorHub/SCP_nanoHub
文件:SCP_nanoHub.c
mSensorState[SENSOR_TYPE_PICK_UP_GESTURE].sensorType =SENSOR_TYPE_PICK_UP_GESTURE;
+mSensorState[SENSOR_TYPE_PICK_UP_GESTURE].rate = SENSOR_RATE_ONCHANGE;
mSensorState[SENSOR_TYPE_PICK_UP_GESTURE].timestamp_filter = false;

4.第四部分修改

路径:alps/vendor/mediatek/proprietary/hardware/sensor/sensors-1.0
文件:SensorList.cpp
修改参考上面的  1.修改sensor信息

5.第五部分修改

路径:alps/vendor/mediatek/proprietary/tinysys/freertos/source
文件1:middleware/contexthub/contexthub_fw.c
文件2:middleware/contexthub/VIRT_Driver/acc_pickup.c
文件3:middleware/contexthub/VIRT_Driver/pickup.c
文件4:project/CM4_A/mt6768/lancelot/ProjectConfig.mk
文件5:project/CM4_A/mt6768/platform/feature_config/chre.mk
文件6:project/CM4_A/mt6768/platform/Setting.ini
文件7:project/CM4_A/mt6768/shiva/ProjectConfig.mk

文件1

修改1
sensorAccurancyMode[SENSOR_TYPE_SHAKE] = SENSOR_STATUS_ACCURACY_HIGH;
+sensorReportingMode[SENSOR_TYPE_PICK_UP_GESTURE] = onChange;
sensorAccurancyMode[SENSOR_TYPE_PICK_UP_GESTURE] = SENSOR_STATUS_ACCURACY_HIGH;
修改2
case SENSOR_TYPE_SAR:
....
break:
+        case SENSOR_TYPE_PICK_UP_GESTURE:
+            //osLog(LOG_INFO, "mtk_type: %d send flush action\n", mtk_type);
+           dummy.value[0] = (int32_t)(sensor->buffer.single[numSamples].idata);
+            ret = contextHubSramFifoWrite(&dummy);
+            if (ret == SRAM_FIFO_FULL)
+                contextHubSramFifoRead();
+            break;

文件2

私有驱动,不可公开

文件3

私有驱动,不可公开

文件4

CFG_GLANCE_SUPPORT = yes
+CFG_PICKUP_SUPPORT = no
+CFG_ACC_PICKUP_SUPPORT = yes
CFG_LIFT_PUTDOWN_SUPPORT = yes

文件5

######## pickup ########
ifeq ($(CFG_PICKUP_SUPPORT),yes)
C_FILES  += $(SOURCE_DIR)/middleware/contexthub/VIRT_Driver/pickup.c
endif+######## use ACC pickup ########
+ifeq ($(CFG_ACC_PICKUP_SUPPORT),yes)
+C_FILES  += $(SOURCE_DIR)/middleware/contexthub/VIRT_Driver/acc_pickup.c
+endif

文件6

[SCP]
C-lib:15000      //修改值
......
pedometer:10400
pickup:10000    //修改值
stationary:3044

文件7

CFG_GLANCE_SUPPORT = yes
+CFG_PICKUP_SUPPORT = no
+CFG_ACC_PICKUP_SUPPORT = yes
CFG_LIFT_PUTDOWN_SUPPORT = yes

MTK 虚拟 sensor bring up (pick up) sensor1.0相关推荐

  1. MTK虚拟sensor梳理

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

  2. mtk android 笔记,Android驱动笔记(9)——MTK平台Sensor Bring Up

    sensor的img位于scp.img 9.1.在成熟的平台Bring Up 在已知的平台上驱动并验证一个器件是很常见的工作.因为管脚等基本不需要重新配置.所以只需要按照一般步骤驱动即可.驱动代码位置 ...

  3. MTK平台添加虚拟sensor

    一.添加一个新的sensor类型 HUB部分 1./vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/ ...

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

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

  5. [Android][sensor]物理sensor bring up流程

    物理sensor bring up流程 物理sensor就是实体sensor,现实存在的.从硬件直接获取数据的sensor. 常见的物理sensor有:加速度acceleration.陀螺仪gyros ...

  6. MTK camera flashlight bring up

    MTK camera flashlight bring up MTK camera flashlight bring up 一查看硬件原理图 front camera rear camera key ...

  7. MTK 平台sensor arch 介绍-hal

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

  8. MTK 平台CTP bring up

    MTK 平台CTP bring up 记录MTK平台 CTP bring up的过程 一.TP的基础原理 二.bring up步骤 1.找到代码目录: 2.需要修改的地方一般为makefile,dts ...

  9. 1.高通SEE 虚拟sensor分析

    在SEE中,处理硬件sensor,高通实现的platform sensor,还有一类是通过硬件sensor等各种数据计算,抽象出来的虚拟sensor. 我们以高通提供的参考为例,看如何添加一个虚拟se ...

最新文章

  1. 使用Vue+Spring Boot实现Excel上传
  2. java怎么复制动态数组_Java 数组排序复制等操作(Java Arraycopy)
  3. Linux LXC基本配置选项
  4. ABAP中常见的接口技术类型
  5. python自动写作软件_有哪些适合长文的轻量级写作软件值得推荐?
  6. Initial load DNL_CUST_PROD0 并找出SAP S4表和CRM表的mapping关系
  7. struts2核心配置
  8. 4999元!iQOO 9 Pro赛道版今日预售:创新性采用芳纶纤维材质
  9. java 整数相乘_Java中两个int相乘的结果是怎么算的?
  10. arm linux开机第一屏,小白求助大神T1刷机提示成功,但开机卡在斐讯白屏界面。...
  11. 什么是3D建模?一文帮助小白了解建模全流程!
  12. Frame-Relay基础及配置学习笔记
  13. 如何加密文件及文件夹
  14. win7系统安装硬盘格式转换问题
  15. Visual Studio 2019背景美化(背景透明化+自定义背景图片)
  16. 录屏储存失败因为5823_屏幕录制储存失败因为-5823怎么找回
  17. 认识浏览器:浏览器内核/页面加载/DOM和DOM树
  18. Redis基础-下载安装、配置、数据类型、指令、Jedis、持久化
  19. NVIDIA NX刷机,配置深度学习环境
  20. 审稿周期较快的SCI期刊总结:人工智能,神经网络,CV

热门文章

  1. 用Javascript删除HTML元素
  2. 基于esky实现python应用的自动升级
  3. quartus II使用
  4. Landsat8遥感影像批量分割(Arcmap实现)
  5. 三维扫描系列 点云绪论
  6. Linux下批量重命名文件或文件夹(rename命令)
  7. 商业数据分析的典型方法
  8. 北大SQL数据库视频教程
  9. Linux命令 - userdel命令
  10. 【Logback】<appender>标签详解