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架构的可以看下面的博客 ...
随机推荐
- ecahrts实现动态刷新(隔几秒重新显示)
代码: <script> var chartDom = document.getElementById('main3'); var myChart = echarts.init(chart ...
- CCF201812-1小明上学
题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿 ...
- 关于Symbol.iterator 学习笔记
1.可以部署在对象上的一个遍历器 2. 遍历器是一个函数,需要返回一个含有一个next 方法的对象 const likeArray = {0:'a', 1: 'b', 2: 'c',3: 'd'. l ...
- Kubernetes架构-图解
- rpm方式安装mysql
一.系统标准化采样 1)查看centos系统版本 [root@fp-web-126 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 ...
- UML中类关系表示与Java代码中的对应关系
UML中类关系表示与Java代码中的对应关系 1. 类的UML表示法 上图中,Employee 类有两个String类型的私有属性和一个返回值为String类型public 方法 getName(); ...
- docker方式安装zabbix
这个示例展现了如何运行支持MySQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及Zabbix Java gateway. 1. 启动一个空的MyS ...
- GRPC-go版本
GRPC-go版本 1.安装GO,protobuf 只适合有梯子的 GO的安装没必要说了 protobuf :https://github.com/protocolbuffers/protobuf/r ...
- Codeforces Round #752 (Div. 2) A B C
Problem - A - Codeforces Problem - B - Codeforces Problem - C - Codeforces A. Era 每个a[i] - i 表示的是当前a ...
- redis无损数据迁移
在dba眼中,redis仅仅是一个缓存,不适合作为存储来使用,不管是redis-sentinel集群还是cluster集群,在redis主节点发生意外宕机时没有机制来保证主从节点数据的一致性.但是,很 ...