当前位置: 首页 > news >正文

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

目录

一、BP 层移植说明

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

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

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

二、HAL层移植说明

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

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

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

三、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

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 中用到的宏

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 调用获取虚拟陀螺仪数据接口

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

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

SENSOR_HUB_VIRTUAL_GYROSCOPE := akm_virtual_gyro
http://www.jsqmd.com/news/211459/

相关文章:

  • 学术 PPT “破壁” 指南!虎贲等考 AI 让汇报从 “合格” 到 “惊艳”
  • springboot基于vue的火车票订票管理系统_xbfej00y
  • 课程论文卷不动了?虎贲等考 AI:3 小时解锁 “学霸级” 范本,知识点 + 逻辑双在线
  • go 测试框架test
  • 基于STM32单片机的云平台智能窗帘/晾衣架控制系统 Wifi物联网传输 蓝牙系统设计 定时开关 光线采集 雨滴感应 成品套件 DIY设计 实物+源程序+原理图+仿真+其它资料(832-7)
  • 【视觉多模态】- 3D建模尝试 III(室内静态多视角,建模成功)
  • 基于STM32单片机的智能窗帘/晾衣架控制系统 物联网无线控制 蓝牙WIFI传输 定时开关 光线采集 雨滴感应 防盗报警成品套件 DIY设计 实物+源程序+原理图+仿真+其它资料(832-4/5/6)
  • 四层PCB板设计
  • 队列集详解
  • 基于STM32单片机的智能窗帘/晾衣架控制系统 蓝牙系统设计 定时开关 光线采集 雨滴感应 成品套件 DIY设计 实物+源程序+原理图+仿真+其它资料(832-0/1/2)
  • 点击【历史对话】按钮时会弹出下拉列表,现在需要增加一个功能:点击页面其他区域时隐藏这个下拉列表
  • redis存储空间复杂度和时间复杂度的平衡
  • CPU密集型任务与I/O密集型任务详解
  • bss段、data段、text段、heap堆、stack栈的基本概念
  • 【SRC 挖洞赚钱实测】单高危漏洞 2W+!低中高危赏金拆解,挖漏洞平均日收入算给你看
  • 破防了!Java 卷到月薪 8K,转网安直接年薪 40 万 +,2025 自救路线图全公开!
  • 抗干扰更强!8路PWM输出模块:隔离RS485/CAN通讯+占空比精准调节
  • 多元场景通吃的秘密!8路PWM输出模块——集中控制+独立调节,双重模式更灵活
  • 副业封神!挖 SRC 漏洞一个就赚 2W+,网安人轻松躺赚,平均日收入看完馋哭了!
  • 2026年六大GEO优化公司能力测评:技术纵深决定AI搜索霸权
  • 在Windows上编译、安装Rust
  • 救命!失业党狂喜!零成本学网安 3 个月,避开万元培训班,月薪 12K 成功逆袭!
  • 艾莉丝努力练剑的256天创作纪念日:在代码星河中逐梦前行
  • pycocotools绘制标注结果(bbox,segment,pose)
  • 深度测评9个AI论文工具,助本科生轻松搞定毕业论文!
  • 2025 Java 转网安必看:从技能迁移到岗位选择,附 40-150 万安全岗薪资拆解!
  • 从0到1讲解什么是JVM:Java程序员必须掌握的核心知识(附Spring Boot实战案例)
  • 满足成本与性能双重要求:AWS中为访问私有子网EC2的Lambda实施优化方案
  • 网安小白狂喜!Web 安全入门指南:OWASP Top 10 + 漏洞实战,收藏这篇就够了!
  • Spring循环依赖:原理、限制与解决方案深度解析