MTK 虚拟 sensor bring up (pick up) sensor2.0
阅读原文时间:2022年06月02日阅读:1

pick up bring up sensor2.0

1.SCP侧的配置

路径:
vendor/mediatek/proprietary/tinysys/scp/middleware/contexthub/VIRT_Driver


路径:
vendor/mediatek/proprietary/tinysys/scp/project/RVxx_A/project.mk


CFG_PICKUP_SUPPORT = yes


路径:
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


路径:
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;
}


路径:
/vendor/mediatek/proprietary/hardware/contexthub/firmware/inc/sensType.h


#define SENS_TYPE_PICK_UP 40

2.kernel层的配置

注: 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,
};


路径:
 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层的修改

路径:  /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;
 ...
}


路径:
 /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;
 ...
 }
}


路径:
/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);

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章