新素材网站房建设计网站

张小明 2026/1/13 6:58:03
新素材网站,房建设计网站,百度推广引流,滨州做网站1#xff0c; 整合软陀螺和地磁驱动之前提供的驱动软陀螺驱动接口是和地磁驱动接口分开#xff0c;相当于地磁和驱动完全是独立的。HUB的驱动路径下创建一个virtual_gyro 的驱动#xff0c;分别又virtual_common.c 和 mag_acc_common.c 和.h 文件构成#xff0c; mag_acc_c…1 整合软陀螺和地磁驱动之前提供的驱动软陀螺驱动接口是和地磁驱动接口分开相当于地磁和驱动完全是独立的。HUB的驱动路径下创建一个virtual_gyro 的驱动分别又virtual_common.c 和 mag_acc_common.c 和.h 文件构成 mag_acc_common.c实现地磁和加速度enable,disable,get_data 接口然后在virtual_gyro_common.c中的实现软陀螺接口。下面是软陀螺接口一些实现例如virtual_gyro_enable()会调用enable_mag,enable_acc接口virtual_gyro_disable)会调用disable_mag,disable_acc接口同理virtual_gyro_get_data接口会调用get_mag_data()和get_acc_data() 接口。这种方式不仅浪费了sensorhub 空间还会造成接口冗余。static int virtual_gyro_sensor_enable() { if (!acc_lsm6dsl_enable() !mag_enable()) { SENSORHUB_TRACE(virtual gyro enable); enable_state[DRV_GYROSCOPE] 1; return NO_ERROR; } else SENSORHUB_TRACE(virtual gyro enable fail); } static int virtual_gyro_sensor_disable() { if (!enable_state[DRV_ACCELEROMETER]) // acc_lsm6dsl_disable(); if (!enable_state[DRV_MAGNETIC_FIELD]) mag_disable(); enable_state[DRV_GYROSCOPE] 0; SENSORHUB_TRACE(virtual gyro disable sensor successed!\n); return NO_ERROR; } static int virtual_gyro_sensor_get_data(struct sensor_data *sensor_data, uint64_t timestamp) { struct sensor_data acc_sensor_data; struct sensor_data mag_sensor_data; static struct sensor_event sensor_event_data; acc_lsm6dsl_read_data(acc_sensor_data); memcpy(sensor_event_data.data[0], acc_sensor_data.data[0], sizeof(float) * 3); mag_read_data(mag_sensor_data); memcpy(sensor_event_data.data[3], mag_sensor_data.uncali_data[0], sizeof(float) * 3); SENSORHUB_TRACE(virtual gyro raw data %f, %f, %f, %f, %f, %f, sensor_event_data.data[0], sensor_event_data.data[1], sensor_event_data.data[2], sensor_event_data.data[3], sensor_event_data.data[4], sensor_event_data.data[5]); sensor_event_data.sensor_handle GYROSCOPE; sensor_event_data.timestamp timestamp; sensor_process_base_sensor_data(sensor_event_data); return NO_ERROR; }ums9620e 平台对接口进行升级平台给virtual_gyro定义了一个公共的结构体,这个结构体的内容是mag 和acc 的接口和flag, vendor 开发商直接在mag驱动mag_init 和 acc驱动acc_init 分别给mag和acc 接口赋值即可而在virtual_gyro_common.c 分别回调初始化的接口。struct virtual_gyro_driver_func { void *mag_enable(), void *mag_disable(), void *mag_read_data(struct sensor_data *sensor_data, uint64_t timestamp), uint8_t mag_init_flag, void *acc_enable(), void *acc_disable(), void *acc_read_data(struct sensor_data *sensor_data, uint64_t timestamp), };升级后的virtual_gyro_common.c 接口实现tatic int virtual_gyro_sensor_enable() { if((!virtual_gyro_driver_func.acc_enable) || (!virtual_gyro_driver_func.mag_enable)) { SENSORHUB_TRACE(acc or mag enable is NULL); return FAIL; } virtual_gyro_driver_func.acc_enable(); virtual_gyro_driver_func.mag_enable(); enable_state[DRV_GYROSCOPE] 1; SENSORHUB_TRACE(virtual gyro enable); return NO_ERROR; } static int virtual_gyro_sensor_disable() { if((!virtual_gyro_driver_func.acc_disable) || (!virtual_gyro_driver_func.mag_disable)) { SENSORHUB_TRACE(acc or mag disable is NULL); return FAIL; } if (!enable_state[DRV_ACCELEROMETER]) virtual_gyro_driver_func.acc_disable(); if (!enable_state[DRV_MAGNETIC_FIELD]) virtual_gyro_driver_func.mag_disable(); enable_state[DRV_GYROSCOPE] 0; SENSORHUB_TRACE(virtual gyro disable sensor successed!\n); return NO_ERROR; } static int virtual_gyro_sensor_get_data(struct sensor_data *sensor_data, uint64_t timestamp) { struct sensor_data acc_sensor_data; struct sensor_data mag_sensor_data; static struct sensor_event sensor_event_data; if ((!virtual_gyro_driver_func.acc_read_data) || (!virtual_gyro_driver_func.mag_read_data)) { SENSORHUB_TRACE(acc or mag read data is NULL); return FAIL; } virtual_gyro_driver_func.acc_read_data(acc_sensor_data, timestamp); memcpy(sensor_event_data.data[0], acc_sensor_data.data[0], sizeof(float) * 3); mag_af6133e_read_data( mag_sensor_data, timestamp); memcpy(sensor_event_data.data[3], mag_gyro_data_af6133e, sizeof(float) * 3); if (mag_vendor_och_flag) { mag_och_read_data( mag_sensor_data, timestamp); memcpy(sensor_event_data.data[3], mag_gyro_data_och sizeof(float) * 3); } SENSORHUB_TRACE(ja virtual gyro raw data %f, %f, %f, %f, %f, %f\n, sensor_event_data.data[0], sensor_event_data.data[1], sensor_event_data.data[2], sensor_event_data.data[3], sensor_event_data.data[4], sensor_event_data.data[5]); sensor_event_data.sensor_handle GYROSCOPE; sensor_event_data.timestamp timestamp; sensor_process_base_sensor_data(sensor_event_data); return NO_ERROR; }2, 算法库移植主要是软陀螺算法包包括算法库计算软陀螺数据vendor/sprd/modules/sensors/libsensorhub/路径下主要是定义一软陀螺算法接口还有lib 算法库编译相关的andriod.bp 文件。3 调试过程遇到的问题算法库编译完成后刷机到手机手机会死机抓dmesg log 一直报下面的错误根据error log 大概意思sensors.unisoc.so 这个库会关联到libOcsAlgo.so 但是在odm/lib64 下面没有找到这个库。后面通过在代码路径out 下面搜索libOcsAlgo .so 是可以搜到路径是vendor/lib64 下面而其他家的mag 库路径是odm/lib64 下面这个是出问题的地方后面通过对比库编译的Andriod.bp 文件发现友商的是左边有问题的是右边进一步查找这个属性看到这个是一个定义分区的宏所以这个是问题的rootcause。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做临时网站黄冈市建设工程信息网

PyTorch-CUDA-v2.7镜像中编译安装xformers库的操作指南 在当前大规模 Transformer 模型遍地开花的背景下,从视觉大模型到扩散生成系统,显存瓶颈成了压在每个开发者头上的“达摩克利斯之剑”。尤其是当序列长度突破 1024,甚至迈向 8k 时&…

张小明 2026/1/9 4:51:08 网站建设

有什么网站是学做吃的网站500兆空间多少钱

第一章:开源Open-AutoGLM本地搭建概述开源Open-AutoGLM是一个面向自动化图学习任务的可扩展框架,支持图神经网络的快速构建、训练与部署。其模块化设计允许研究人员和开发者灵活集成自定义组件,适用于节点分类、链接预测和图生成等多种场景。…

张小明 2026/1/8 23:00:46 网站建设

免费网站alexa排名查询大连网站建设外包公司

基于 AnythingLLM 的智能客服原型设计与实现 在企业服务数字化转型的浪潮中,客户对响应速度和回答准确性的期待正以前所未有的速度攀升。传统客服系统依赖人工培训和静态知识库,面对不断更新的产品政策、复杂的用户问题时常常力不从心。更棘手的是&…

张小明 2026/1/10 7:11:31 网站建设

泉州 网站建设网站网站制作网站

目录 一、技术演进 二、核心优势 1. 高可靠 2. 高性能 3. 高安全 4. 高兼容 5. 易管理与易使用 三、理论创新 四、未来展望 结语 在数字化浪潮席卷全球、数据成为核心生产要素的当下,数据库作为数据存储、管理与分析的关键基础设施,其自主可控能力直…

张小明 2026/1/8 21:06:45 网站建设

怎样做百度网站推广wordpress 干扰码插件

一个深度用户的真实体验与价值分析在信息爆炸的电商时代,你是否也经历过这样的困扰:同一件商品,在不同平台的价格差异让人眼花缭乱;复杂的满减、优惠券、预付定金规则,算到头大也未必拿到最优价;刚买完就降…

张小明 2025/12/30 4:28:43 网站建设

营销crm系统网站设计cnzz统计 wordpress

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 vue3和nodejs开发的基于 Spring Boot 的旅行指南攻略游记…

张小明 2026/1/13 1:51:56 网站建设