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架构的可以看下面的博客 ...
随机推荐
- python正则表达式替换或去除指定字符
代码: import re regEx = "[\n""|]" # 去除字符串中的换行符.中文冒号.|,需要去除什么字符就在里面写什么字符 str= re.su ...
- Python使用函数实现杨辉三角
运行效果: 可在函数中指定阶层数,输出对应的杨辉三角 源代码如下: 1 # -*-coding:utf-8 -*- 2 ''' 3 chapter4_do.py 4 函数yanghui(n)用于输出n ...
- 微信小程序HTTP接口请求封装
1.方法封装(新建文件夹util,工具文件,在文件夹下创建request.js文件,用于对方法封装)request.js: var app = getApp(); //项目URL相同部分,减轻代码量, ...
- Spring Framework 学习笔记——核心技术之Spring IOC
Spring Framework 官网文档学习笔记--核心技术之Spring IOC 官方文档 spring-framework-5.3.9 1. Spring Framework 核心技术 1.1 ...
- Cookie与Session、CBV添加装饰器
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- 自己写的一个Hash文件校验软件
原因 学校网络安全课讲到了Hash函数,老师提了一句上机操作的时候可以用自己的写的文件校验软件,所以我干脆就自己写一个. 说明 支持算法 MD5 SHA1 SHA256 SHA512 SHA384 为 ...
- 解决pycharm的爬虫乱码问题(初步了解各种编码格式)
Ascii码(American Standard Code for Information Interchange,美国信息互换标准代码):最初计算机只在美国使用时,只用8位的字节来组合出256(2的 ...
- 记一次docker安装成功,启动失败的原因
问题 按照错误提示,先查看docker的状态: systemctl status docker 可以看到,非常明显的一行大红字:Failed to start Docker Application C ...
- JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- 【已解决】Redis错误:Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。
报错:redis服务在window下启动,报错: Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成. ...