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 
相关推荐
charlie1145141911 天前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
XD7429716361 天前
科技早报晚报|2026年5月2日:Spec 驱动开发、空口隔离交付与时序预测 Copilot,今天最值得跟进的 3 个机会
驱动开发·科技·copilot·开源项目·科技新闻·开发者工具
神一样的老师2 天前
【兆易创新GD32VW553开发板试用】红外遥控接入天气时钟实战
驱动开发·单片机·嵌入式硬件
charlie1145141912 天前
嵌入式Linux驱动开发——新字符设备驱动 API 概览
linux·运维·驱动开发
莎士比亚的文学花园2 天前
Linux驱动开发(4)——总线驱动
驱动开发
智者知已应修善业2 天前
【用一片74LS139和一片74Ls00,设计带高电平有效使能输入端的3线-8线译码器】2023-10-16
驱动开发·经验分享·笔记·硬件架构·硬件工程
Ghost Face...3 天前
LS2K PCIe驱动开发全链路解析
驱动开发
Joseph Cooper3 天前
Linux Power Management 子系统:从 suspend/resume 到 Runtime PM、PM QoS
linux·驱动开发·linux kernel·嵌入式linux·电源管理
北京自在科技3 天前
Find Hub App 小更新
android·ios·安卓·findmy·airtag
d111111111d3 天前
移植MQTT到STM32
驱动开发