UMS9620 展锐平台增加一个虚拟陀螺仪

目录

[一、BP 层移植说明](#一、BP 层移植说明)

(1)、添加一个虚拟陀螺仪驱动

(2)、虚拟陀螺仪编译配置

(3)、虚拟陀螺仪info添加

二、HAL层移植说明

(1)、虚拟陀螺仪算法库移植

(2)、虚拟陀螺仪算法库编译配置

(3)、平台端获取虚拟陀螺仪数据调用

[三、Device 目录移植](#三、Device 目录移植)

(1)、虚拟陀螺相关宏定义


一、BP 层移植说明

(1)、添加一个虚拟陀螺仪驱动

bsp/sensorhub/public/sensor_hub_sprd/public/system/sensor_driver/gyro_drivers 路径增加一个虚拟陀螺仪驱动文件夹virtual_gyro/

(2)、虚拟陀螺仪编译配置

bsp/sensorhub/public/sensor_hub_sprd/public/system/sensor_driver/gyro_drivers 路径中gyro_drivers.cmake

复制代码
if(CONFIG_VIRTUAL_GYRO_LSM6DSL_AKM99018_SUPPORT)
	list(APPEND SRCS
		"system/sensor_driver/gyro_drivers/virtual_gyro/sensor_driver_virtual_gyro_akm99018_lsm6dsl_common.c"
		"system/sensor_driver/gyro_drivers/virtual_gyro/sensor_driver_gyroscope_virtual_gyro.c"
	)
endif()

Kconfig中添加宏定义

复制代码
	config VIRTUAL_GYRO_LSM6DSL_AKM99018_SUPPORT
		bool "VIRTUAL_GYRO_LSM6DSL_AKM99018_SUPPORT"
		depends on SPRD_SENSOR_HUB_SUPPORT
		help
			gyro virtual_gyro_lsm6dsl_akm99018 support status

bsp/sensorhub/public/project/QogirN6Pro_CH/ums9620_2h10 设置宏打开

复制代码
 CONFIG_VIRTUAL_GYRO_LSM6DSL_AKM99018_SUPPORT=y

(3)、虚拟陀螺仪info添加

bsp/sensorhub/public/project/QogirN6Pro_CH/ums9620_2h10/sensor_config.h

cpp 复制代码
struct sensor_hw_info gyro_virtual_hw_info = {
	.position = 2,
	.i2c_info = {
		.interface_freq = 400,
		.interface_num = 0,
		.slave_addr = 0x00,
		.reg_addr_len = 1,
	},
};

struct sensor_property_info {
	char *sensor_name;
	struct sensor_hw_info *info;
} sensor_property_list[]={
	{"acc_lsm6dsl", &acc_qmi8658_hw_info},
	 {"virtual_gyro", &gyro_virtual_hw_info},

二、HAL层移植说明

(1)、虚拟陀螺仪算法库移植

vendor/sprd/modules/sensors/libsensorhub/Virtual_gyro_lib/添加虚拟陀螺仪算法库

(2)、虚拟陀螺仪算法库编译配置

vendor/sprd/modules/sensors/libsensorhub/Android.bp 中定义CPP 中用到的宏

cpp 复制代码
sonng_config_module_type {
    name: "libsensorhub_cc_defaults",
    module_type: "cc_defaults",
    config_namespace: "sensorhubcfg",

    bool_variables: [
        "virtual_gyro",
        "akm_virtual_gyro",
    ],

    properties: [
        "cflags",
        "shared_libs",
        "srcs",
        "local_include_dirs",
    ],
}

libsensorhub_cc_defaults {
    name: "libsensorhub_defaults",
    soong_config_variables: {
        virtual_gyro: {
            srcs: ["Virtual_gyro_lib/virtual_gyro_interface.cpp"],
            local_include_dirs: ["Virtual_gyro_lib"],
            cflags: ["-DSENSORHUB_WITH_VIRTUAL_GYROSCOPE"],
        },

        akm_virtual_gyro: {
            shared_libs: ["libcompasshub"],
            srcs: ["Virtual_gyro_lib/AKMAlgo/akm_vgyro_algo.cpp"],
            cflags: ["-DSENSORHUB_SUPPORT_akm_virtual_gyro"],
        },
   }
}

(3)、平台端获取虚拟陀螺仪数据调用

vendor/sprd/modules/sensors/libsensorhub/Virtual_gyro_lib/virtual_gyro_interface.cpp 调用获取虚拟陀螺仪数据接口

cpp 复制代码
void initVirtualGyroLib(void) {
    struct magChipInfo magChipInfo = {0x00, 0x0c, 0x00};
    float offset_value[3] = {0};
    float fMagSP[9] = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
    float fmagCaPara[4] = {0.0, 0.0, 0.0, 0.5};
    float pa[8] = {18.0, 25.0, 35.0, 0.025, 0.08, 0.85, 1.15, 1.4};
    float pb[4] = {0.1, 0.00002, 0.0002, 0.0001};
    int pc[4] = {20, 15, 10, 2};
    char mag_sensor_str[MAX_MAG_STRING_SIZE];
    int ret;
    SH_ERR("initVirtualGyroLib ::parse mag name paramagname");
    ret = parseMagSensorinfo(mag_sensor_str);
    if(ret < 0) {
        SH_ERR("parse mag name failed");
        return;
    }
#ifdef SENSORHUB_SUPPORT_akm_virtual_gyro
#if 1
    if(!strcmp(mag_sensor_str, "mag_akm09918")) {
        mag_type = AKM;
        akm_wrapper_lib_init(&magChipInfo);
        akm_wrapper_set_offset(offset_value);
        return;
    }
#endif
}

三、Device 目录移植

(1)、虚拟陀螺相关宏定义

device/sprd/mpool/module/vendor/sensor/main.mk

cpp 复制代码
ifeq (akm_virtual_gyro, $(findstring akm_virtual_gyro, $(SENSOR_HUB_VIRTUAL_GYROSCOPE)))
SOONG_CONFIG_sensorhubcfg += akm_virtual_gyro
SOONG_CONFIG_sensorhubcfg_akm_virtual_gyro := true
endif

device/sprd/qogirn6pro/ums9620_2h10/module/sensor/md.mk

cpp 复制代码
SENSOR_HUB_VIRTUAL_GYROSCOPE := akm_virtual_gyro 
相关推荐
被遗忘的旋律.1 天前
Linux驱动开发笔记(二十三)—— regmap
linux·驱动开发·笔记
比奇堡派星星1 天前
如何新加netlink
linux·驱动开发
电脑小管家1 天前
DirectX报错怎么办?快速修复游戏和软件崩溃问题
windows·驱动开发·microsoft·计算机外设·电脑
比奇堡派星星2 天前
Linux4.4使用AW9523
linux·开发语言·arm开发·驱动开发
比奇堡派星星2 天前
cmdline使用详解
linux·arm开发·驱动开发
AI时代原住民2 天前
SDD(Spec驱动开发)实战新范式:SDDAgent驱动SDD端到端开发流
驱动开发
一点晖光2 天前
uview 的u-tabs组件在微信小程序中会出现横向滚动条
微信小程序·安卓·横向滚动条
比奇堡派星星2 天前
Linux 平台设备驱动框架详解
linux·开发语言·驱动开发
春日见3 天前
python3语法学习
linux·运维·服务器·人工智能·驱动开发