MTK 虚拟 sensor bring up (pick up) sensor1.0
pick up bring up sensor1.0
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的更多相关文章
- MTK 虚拟 sensor bring up (pick up) sensor2.0
pick up bring up sensor2.0 1.SCP侧的配置 (1) 放置驱动pickup.c (2) 添加底层驱动文件编译开关 (3) 加入编译文件 (4) 增加数据上报方式 (5)修改 ...
- 联发科 (MTK) sensor bring up
MT6768平台 1.添加驱动文件 2.添加硬件配置支持 3.添加硬件配置 4.添加编译配置 5.分配空间(非必要,当代码量超过当前空间大小时将会报错,根据报错log改大小即可.) 6.兼容配置 7. ...
- MTK 平台sensor arch 介绍-hal
MTK 平台sensor arch 介绍-hal 一:整体框架 二:具体流程简介 AP-HAL: (1)init & control flow 我们以前文的originchannel 的 ac ...
- MTK 平台sensor arch 介绍-scp
架构介绍 路径:vendor/mediatek/proprietary/tinysys/scp 1.[build]编译相关 2.[driver]scp 的driver,I2C,power,eint 3 ...
- 高通(QCOM)sensor bring up
高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...
- 在IIS7.5上添加.NET4.0程序的虚拟目录时提示ASP.NET 4.0尚未在 Web 服务器上注册
使用VS2010创建web应用程序时出现如下提示: ASP.NET 4.0尚未在 Web 服务器上注册. 解决方法: 首先IIS应用程序池添加 net framework4.0版本. 接着找到C:\W ...
- Android sensor架构分析
一.其主要框架如下图所示: 二.sensor的JNI层:android_hardware_SensorManager.cpp (frameworks\base\core\jni) 注册JN ...
- Mtk Ft6306 touch 驱动 .
1.1. MTK Touch 驱动的组成Mtk Touch driver 驱动包括:Mtk platform 虚拟平台设备驱动.Module touch IC 驱动.Input subsys ...
- 高通HAL层之Sensor HAL
高通的HAL层其实分为两种,一种是直接从kernel这边报数据上来的,由sensor HAL层来监听,另一种是走ADSP的模式,HAL层是通过qmi的形式进行监听的: 走ADSP架构的可以看下面的博客 ...
随机推荐
- 体温数据上传程序开发+获取时间的三种方法+DB Browser下载及安装
今天开始了体温上传程序的开发 今日所学: 获取时间 (21条消息) (转)安卓获取时间的三种方法_sharpeha的博客-CSDN博客_安卓获取时间 DB Browser安装教程 (20条消息) sq ...
- Shiro 安全框架详解二(概念+权限案例实现)
Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...
- Java 多选框的全选、多选、反选(JQuery 实现)
jQuery 实现全选.多选.反选 学习内容: 需求 总结: 学习内容: 需求 jQuery 实现全选.多选.反选 实现代码 <!DOCTYPE html> <html lang=& ...
- mysql基本操作1
数据库的分类 --1.关系型数据库-----用"表"保存数据,相关数据存入一张表中 --2.非关系型数据库-----键值数据库-----对象数据库 ###主流关系型数据库-Or ...
- python---实现单例模式
""" 单例模式 单利模式是一种设计模式, 应用该模式的类只会生成一个实例, 可以保证在程序的不同位置 都可以且仅可以取到同一个对象实例. 如果实例不存在, 会创建一个实 ...
- HTTP长连接和短连接及应用情景
HTTP短连接 HTTP/1.0中默认使用短连接, 客户端和服务器进行一次HTTP操作, 就需要建立一次连接, 任务结束连接也关闭. 当客户端浏览器访问的web网页中包含其他的web资源时, 每遇到一 ...
- 想减少代码量,快设置一个有感知的 Aware Spring Bean
摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ...
- 2021.11.04 P1392 取数(多路归并)
2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...
- oracle提交后再回滚解决办法
BEGIN; 刚才改错数据,直接commit了,rollback了下,没效果,经过google,oracle有个 闪回 功能,经测试,可用. -- 查询闪回id 如:06001B00054E0000 ...
- Python识别图片中的文字
1 import os,glob 2 def photo_compression(original_imgage,tmp_image_path): 3 '''图片备份.压缩:param origina ...