• Lv0
    粉丝4

积分177 / 贡献0

提问26答案被采纳5文章2

驱动上报传感器数据长度为4时,数据接收存在异常

shixiaocheng 显示全部楼层 发表于 2024-2-7 09:31:52
【问题描述】
问题现象和发生的背景
编写了一个温度传感器驱动,文件位置//drivers/peripheral/sensor/chipset/temperature/temperature_sht4x.c,在其中读取传感器数据并设置传感器时间上报时设置数据长度为4时,如
```

event.sensorId = SENSOR_TAG_TEMPERATURE;
    event.mode = SENSOR_WORK_MODE_REALTIME;
    event.dataLen = 4;
    event.data = (uint8_t *)&temperature;

```
客户端读取数据代码
```
int8_t *sensorData=(uint8_t *)event->data;
printf("sensor sensorId[%d] data[0x%x], data len:%d\n",sensorId, *(uint32_t *)sensorData, dataLen);
```
读取数据异常
内核日志如下,数据没有问题。
fakename.png

客户端hilog数据如下,存在异常
相关的代码,截图,日志信息
fakename.png

请问有人知道是什么原因吗
我尝试过的解决方法和结果


我想要达到的结果


【运行环境】
硬件:rk3566
ROM版本:4.0r
DevEvoStudio版本:
SDK版本:
您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论4

shixiaocheng

沙发 发表于 2024-2-19 16:12:34
经过测试,发现字节数为4时,在客户端读取时会读取到float类型的数值,内部是不是进行了这样一个操作:uint_32 数值除以10.0-->float

论坛小助手 官方账号

板凳 发表于 2024-2-29 16:18:22
当前驱动上报到HDI的数据会从float转成uint8,客户端则需要自行将数据从uint8再转换成float

shixiaocheng

发表于 2024-2-29 17:30  IP属地: - 中国福建省厦门市 中国电信IDC

回复 论坛小助手: 不对吧,我看了源码,应该是先从uint8转到float,客户端读到的就是float类型

论坛小助手

发表于 2024-3-1 14:41  IP属地: 广东省广州市

回复 shixiaocheng: 驱动获取到数据后,上报给hdi之前先转换成了unit8,hdi收到的数据类型就是unit8的,然后上报给客户端之后,客户端自己转换成float的

【2 条回复】

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部