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_SENSOR
memset(&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 bring up (pick up) sensor2.0

    pick up bring up sensor2.0 1.SCP侧的配置 (1) 放置驱动pickup.c (2) 添加底层驱动文件编译开关 (3) 加入编译文件 (4) 增加数据上报方式 (5)修改 ...

  2. 联发科 (MTK) sensor bring up

    MT6768平台 1.添加驱动文件 2.添加硬件配置支持 3.添加硬件配置 4.添加编译配置 5.分配空间(非必要,当代码量超过当前空间大小时将会报错,根据报错log改大小即可.) 6.兼容配置 7. ...

  3. MTK 平台sensor arch 介绍-hal

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

  4. MTK 平台sensor arch 介绍-scp

    架构介绍 路径:vendor/mediatek/proprietary/tinysys/scp 1.[build]编译相关 2.[driver]scp 的driver,I2C,power,eint 3 ...

  5. 高通(QCOM)sensor bring up

    高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...

  6. 在IIS7.5上添加.NET4.0程序的虚拟目录时提示ASP.NET 4.0尚未在 Web 服务器上注册

    使用VS2010创建web应用程序时出现如下提示: ASP.NET 4.0尚未在 Web 服务器上注册. 解决方法: 首先IIS应用程序池添加 net framework4.0版本. 接着找到C:\W ...

  7. Android sensor架构分析

      一.其主要框架如下图所示:     二.sensor的JNI层:android_hardware_SensorManager.cpp (frameworks\base\core\jni) 注册JN ...

  8. Mtk Ft6306 touch 驱动 .

    1.1.    MTK Touch 驱动的组成Mtk  Touch  driver 驱动包括:Mtk platform 虚拟平台设备驱动.Module touch IC 驱动.Input subsys ...

  9. 高通HAL层之Sensor HAL

    高通的HAL层其实分为两种,一种是直接从kernel这边报数据上来的,由sensor HAL层来监听,另一种是走ADSP的模式,HAL层是通过qmi的形式进行监听的: 走ADSP架构的可以看下面的博客 ...

随机推荐

  1. 体温数据上传程序开发+获取时间的三种方法+DB Browser下载及安装

    今天开始了体温上传程序的开发 今日所学: 获取时间 (21条消息) (转)安卓获取时间的三种方法_sharpeha的博客-CSDN博客_安卓获取时间 DB Browser安装教程 (20条消息) sq ...

  2. Shiro 安全框架详解二(概念+权限案例实现)

    Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...

  3. Java 多选框的全选、多选、反选(JQuery 实现)

    jQuery 实现全选.多选.反选 学习内容: 需求 总结: 学习内容: 需求 jQuery 实现全选.多选.反选 实现代码 <!DOCTYPE html> <html lang=& ...

  4. mysql基本操作1

    数据库的分类 --1.关系型数据库-----用"表"保存数据,相关数据存入一张表中   --2.非关系型数据库-----键值数据库-----对象数据库 ###主流关系型数据库-Or ...

  5. python---实现单例模式

    """ 单例模式 单利模式是一种设计模式, 应用该模式的类只会生成一个实例, 可以保证在程序的不同位置 都可以且仅可以取到同一个对象实例. 如果实例不存在, 会创建一个实 ...

  6. HTTP长连接和短连接及应用情景

    HTTP短连接 HTTP/1.0中默认使用短连接, 客户端和服务器进行一次HTTP操作, 就需要建立一次连接, 任务结束连接也关闭. 当客户端浏览器访问的web网页中包含其他的web资源时, 每遇到一 ...

  7. 想减少代码量,快设置一个有感知的 Aware Spring Bean

    摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ...

  8. 2021.11.04 P1392 取数(多路归并)

    2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...

  9. oracle提交后再回滚解决办法

    BEGIN; 刚才改错数据,直接commit了,rollback了下,没效果,经过google,oracle有个 闪回 功能,经测试,可用. -- 查询闪回id 如:06001B00054E0000 ...

  10. Python识别图片中的文字

    1 import os,glob 2 def photo_compression(original_imgage,tmp_image_path): 3 '''图片备份.压缩:param origina ...