MTK 虚拟 sensor bring up (pick up) sensor2.0
pick up bring up sensor2.0
1.SCP侧的配置
(1) 放置驱动pickup.c
路径:
vendor/mediatek/proprietary/tinysys/scp/middleware/contexthub/VIRT_Driver
(2) 添加底层驱动文件编译开关
路径:
vendor/mediatek/proprietary/tinysys/scp/project/RVxx_A/project.mk
CFG_PICKUP_SUPPORT = yes
(3) 加入编译文件
路径:
vendor/mediatek/proprietary/tinysys/scp/project/RVxx_A//platform/features/chre.mk
######## pickup ########
ifeq ($(CFG_PICKUP_SUPPORT),yes)
C_FILES += $(SCP_MIDDLEWARE_DIR)/contexthub/VIRT_Driver/pickup.c
endif
(4) 增加数据上报方式
路径:
vendor/mediatek/proprietary/tinysys/scp/middleware/contexthub/contexthub_fw.h
#define SENSOR_TYPE_PICK_UP_GESTURE 25 /* these three type can be confirguratured */
typedef enum {
GESTURE_NONE,
SHAKE,
TAP,
TWIST,
FLIP,
SNAPSHOT,
ANSWERCALL,
PICKUP,
GESTURE_MAX
} gesture_type_t;
路径:
vendor/mediatek/proprietary/tinysys/scp/middleware/contexthub/contexthub_fw.c
uint8_t chreTypeToMtkType(uint8_t sensortype)
{
...
case SENS_TYPE_PICK_UP:
return SENSOR_TYPE_PICK_UP_GESTURE;
...
}
uint8_t mtkTypeToChreType(uint8_t sensortype)
{
...
case SENSOR_TYPE_PICK_UP_GESTURE:
return SENS_TYPE_PICK_UP;
...
}
static void initSensorReportingInfo(void)
{
...
sensorReportingMode[SENSOR_TYPE_PICK_UP_GESTURE] = 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:
case SENSOR_TYPE_FOD:
case SENSOR_TYPE_AOD:
case SENSOR_TYPE_NONUI:
osLog(LOG_INFO, "mtk_type: %d send flush action\n", mtk_type);
dummy.value[0] = (int32_t)(sensor->buffer.single[numSamples].idata);
break;
}
(5)修改SENS的type
路径:
/vendor/mediatek/proprietary/hardware/contexthub/firmware/inc/sensType.h
#define SENS_TYPE_PICK_UP 40
2.kernel层的配置
(1) 修改hf_sensor_type.h
注: type的顺序和ID的顺序需要对应
路径:
kernel-4.14/drivers/misc/mediatek/sensor/2.0/core/hf_sensor_type.h
enum {
...
SENSOR_TYPE_PICK_UP_GESTURE,
...
SENSOR_TYPE_SENSOR_MAX,
};
enum {
...
ID_PICK_UP_GESTURE,
...
ID_SENSOR_MAX,
};
(2) 修改mtk_nanohub.c
路径:
kernel-4.14/drivers/misc/mediatek/sensor/2.0/mtk_nanohub/mtk_nanohub.c
static void mtk_nanohub_init_sensor_info(void)
{
...
p = &sensor_state[SENSOR_TYPE_PICK_UP_GESTURE];
p->sensorType = SENSOR_TYPE_PICK_UP_GESTURE;
p->rate = SENSOR_RATE_ONCHANGE;
p->gain = 1;
strlcpy(p->name, "pickup", sizeof(p->name));
strlcpy(p->vendor, "mtk", sizeof(p->vendor));
...
}
static int mtk_nanohub_report_to_manager(struct data_unit_t *data)
{
...
case ID_PICK_UP_GESTURE:
event.timestamp = data->time_stamp;
event.sensor_type = id_to_type(data->sensor_type);
event.action = data->flush_action;
event.word[0] = data->smd_t.state;
break;
...
}
3.HAL层的修改
(1) 首先修改HfManager.cpp和kernel通信
路径: /vendor/mediatek/proprietary/hardware/sensor/2.0/core/HfManager.cpp
int HfLooper::eventConvertAll(sensors_event_t *dst, hf_manager_event *src) {
...
case SENSOR_TYPE_PICK_UP_GESTURE:
dst->type = 33171036;
dst->data[0] = (float)src->word[0] / gain;
ALOGE("SENSOR_TYPE_PICK_UP_GESTURE in hal data=%d\n", src->word[0]);
break;
...
}
(2) 添加sensortype:这个在55之前,不需要添加,应该是沿用了MTK的定义
(3) 加入通道
路径:
/vendor/mediatek/proprietary/hardware/sensor/2.0/hal/SensorContext.cpp
static int findChannel(int sensor_handle) {
switch (sensor_handle) {
...
case SENSOR_TYPE_PICK_UP_GESTURE:
return ORIGIN_CHANNEL;
...
}
}
(4) 修改sensorList
路径:
/vendor/mediatek/proprietary/hardware/sensor/2.0/hal/SensorList.cpp
memset(&sensor, 0, sizeof(struct sensor_t));
sensor.name = "pickup Wakeup";
sensor.vendor = "XXXX";
sensor.version = PICK_UP_VERSION;
sensor.handle = SENSOR_TYPE_PICK_UP_GESTURE;
sensor.type = XXXXXXX;
sensor.maxRange = PICK_UP_RANGE;
sensor.resolution = PICK_UP_RESOLUTION;
sensor.power = PICK_UP_POWER;
sensor.minDelay = PICK_UP_MINDELAY;
sensor.fifoReservedEventCount = PICK_UP_FIFO_RESERVE_COUNT;
sensor.fifoMaxEventCount = PICK_UP_FIFO_MAX_COUNT;
sensor.stringType = "XXX pick up sensor";
sensor.maxDelay = PICK_UP_MAXDELAY;
sensor.flags = SENSOR_FLAG_SPECIAL_REPORTING_MODE|SENSOR_FLAG_WAKE_UP;
mSensorList.push_back(sensor);
MTK 虚拟 sensor bring up (pick up) sensor2.0的更多相关文章
- MTK 虚拟 sensor bring up (pick up) sensor1.0
pick up bring up sensor1.0 1.pick up对比 2.SCP 1.添加驱动文件 2.添加编译环境(打开开关) 注:编译过程中如果显示内存不够 3.修改底层数据上报方式 3. ...
- 联发科 (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架构的可以看下面的博客 ...
随机推荐
- Android实现蓝牙远程连接遇到的问题
主要问到的问题:1.uuid获取不到,一直为空,后来发现android4.2之前使用uuid这种方法,目前尽量不使用uuid方式 2.socket.connect()出错,报read failed, ...
- 【.NET 6】使用EF Core 访问Oracle+Mysql+PostgreSQL并进行简单增改操作与性能比较
前言 唠嗑一下.都在说去O或者开源,但是对于数据库选型来说,很多人却存在着误区.例如,去O,狭义上讲,是去Oracle数据库.但是从广义上来说,是去Oracle公司产品或者具有漂亮国垄断地位和需要商 ...
- python---插入排序的实现
插入排序 思想 列表被分为有序区和无序区两个部分, 最初有序区只有一个元素, 每次从无序区选择一个元素, 插入到有序区的位置, 直到无序区变空 import random from cal_tim ...
- linux磁盘分区fdisk命令操作(实践)
写这篇的目的,还是要把整个过程完整的记录下来,特别是小细节的地方,通常很多情况是一知半解,平时不实践操作只凭看是没有用的,所以做这个行业就是要多动手,多学习,多思考慢慢你的思路也会打开.练就自己的学习 ...
- 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...
- switch 和 if else if else 有什么区别
1. 一般情况下,它们两个语句可以相互替换 2. switch..case语句通常处理case为比较确定值的情况,而if...else...语句更加灵活,常用于范围判断(大于.等于某个范围) 3. ...
- 集合——Collection接口,List接口
集合:对象的容器,定义了对多个对象进行操作的常用方法.可实现数组的功能 集合和数组的区别: 数组长度固定,集合长度不固定 数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型. 集合的位置 ...
- 读完学会shell语法,shell脚本80%已经学会
第3章 shell语法讲解 3.1 shell运算讲解 3.1.1 运算符的讲解 3.1.2 shell运算方式的讲解 3.1.2.1 $(())运算 [root@m01 test_init] # a ...
- GO语言学习——Go语言基础之流程控制一
Go语言基础之流程控制 if else(分支结构) package main import "fmt" // if条件判断 func main(){ // age := 19 // ...
- keil工程当中实现printf重定向串口打印
之前是完全不知道printf可以重定向设置 最近才发现还有这等好事,可以让printf直接实现串口打印 在网上找了很多资料,终于实现了我想要的效果 原理:printf是通过调用底部的fputc来实现打 ...