MTK 虚拟 sensor bring up (pick up) sensor1.0
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相关推荐
- MTK虚拟sensor梳理
MTK虚拟sensor梳理 一 虚拟sensor注册 以倾斜检查虚拟sensor为例,梳理虚拟sensor的控制流和数据流 倾斜虚拟sensor驱动在SCP virt_driver里tilt_dete ...
- mtk android 笔记,Android驱动笔记(9)——MTK平台Sensor Bring Up
sensor的img位于scp.img 9.1.在成熟的平台Bring Up 在已知的平台上驱动并验证一个器件是很常见的工作.因为管脚等基本不需要重新配置.所以只需要按照一般步骤驱动即可.驱动代码位置 ...
- MTK平台添加虚拟sensor
一.添加一个新的sensor类型 HUB部分 1./vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/ ...
- MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些
[DESCRIPTION] MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些 [SOLUTION] KK Hal Support 9 virtual sensors,这些虚拟sen ...
- [Android][sensor]物理sensor bring up流程
物理sensor bring up流程 物理sensor就是实体sensor,现实存在的.从硬件直接获取数据的sensor. 常见的物理sensor有:加速度acceleration.陀螺仪gyros ...
- MTK camera flashlight bring up
MTK camera flashlight bring up MTK camera flashlight bring up 一查看硬件原理图 front camera rear camera key ...
- MTK 平台sensor arch 介绍-hal
MTK 平台sensor arch 介绍-hal 一:整体框架 二:具体流程简介 AP-HAL: (1)init & control flow 我们以前文的originchannel 的 ac ...
- MTK 平台CTP bring up
MTK 平台CTP bring up 记录MTK平台 CTP bring up的过程 一.TP的基础原理 二.bring up步骤 1.找到代码目录: 2.需要修改的地方一般为makefile,dts ...
- 1.高通SEE 虚拟sensor分析
在SEE中,处理硬件sensor,高通实现的platform sensor,还有一类是通过硬件sensor等各种数据计算,抽象出来的虚拟sensor. 我们以高通提供的参考为例,看如何添加一个虚拟se ...
最新文章
- 使用Vue+Spring Boot实现Excel上传
- java怎么复制动态数组_Java 数组排序复制等操作(Java Arraycopy)
- Linux LXC基本配置选项
- ABAP中常见的接口技术类型
- python自动写作软件_有哪些适合长文的轻量级写作软件值得推荐?
- Initial load DNL_CUST_PROD0 并找出SAP S4表和CRM表的mapping关系
- struts2核心配置
- 4999元!iQOO 9 Pro赛道版今日预售:创新性采用芳纶纤维材质
- java 整数相乘_Java中两个int相乘的结果是怎么算的?
- arm linux开机第一屏,小白求助大神T1刷机提示成功,但开机卡在斐讯白屏界面。...
- 什么是3D建模?一文帮助小白了解建模全流程!
- Frame-Relay基础及配置学习笔记
- 如何加密文件及文件夹
- win7系统安装硬盘格式转换问题
- Visual Studio 2019背景美化(背景透明化+自定义背景图片)
- 录屏储存失败因为5823_屏幕录制储存失败因为-5823怎么找回
- 认识浏览器:浏览器内核/页面加载/DOM和DOM树
- Redis基础-下载安装、配置、数据类型、指令、Jedis、持久化
- NVIDIA NX刷机,配置深度学习环境
- 审稿周期较快的SCI期刊总结:人工智能,神经网络,CV