OpenHarmony开发者论坛

标题: 驱动上报传感器数据长度为4时,数据接收存在异常 [打印本页]

作者: shixiaocheng    时间: 2024-2-7 09:31
标题: 驱动上报传感器数据长度为4时,数据接收存在异常
【问题描述】
问题现象和发生的背景
编写了一个温度传感器驱动,文件位置//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);
```
读取数据异常
内核日志如下,数据没有问题。
(, 下载次数: 14)

客户端hilog数据如下,存在异常
相关的代码,截图,日志信息
(, 下载次数: 15)

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


我想要达到的结果


【运行环境】
硬件:rk3566
ROM版本:4.0r
DevEvoStudio版本:
SDK版本:

作者: shixiaocheng    时间: 2024-2-19 16:12
经过测试,发现字节数为4时,在客户端读取时会读取到float类型的数值,内部是不是进行了这样一个操作:uint_32 数值除以10.0-->float
作者: 论坛小助手    时间: 2024-2-29 16:18
当前驱动上报到HDI的数据会从float转成uint8,客户端则需要自行将数据从uint8再转换成float
作者: shixiaocheng    时间: 2024-2-29 17:30
回复 论坛小助手: 不对吧,我看了源码,应该是先从uint8转到float,客户端读到的就是float类型
作者: 论坛小助手    时间: 2024-3-1 14:41
回复 shixiaocheng: 驱动获取到数据后,上报给hdi之前先转换成了unit8,hdi收到的数据类型就是unit8的,然后上报给客户端之后,客户端自己转换成float的




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5