From 67274cf5ddef3d39af58e31a8054b61b87ca0c53 Mon Sep 17 00:00:00 2001 From: Junnan Wu Date: Mon, 9 Sep 2024 10:51:37 +0800 Subject: [PATCH] scmi: modify return value of function reading_get According to the document of "System Control and Management Interface", The sensor_value_low and sensor_value_high in SENSOR_READING structure shoud be int32 instead of uint32. Signed-off-by: Junnan Wu --- vhost-device-scmi/src/devices/iio.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/vhost-device-scmi/src/devices/iio.rs b/vhost-device-scmi/src/devices/iio.rs index 5e8758d..3c56f58 100644 --- a/vhost-device-scmi/src/devices/iio.rs +++ b/vhost-device-scmi/src/devices/iio.rs @@ -280,8 +280,8 @@ impl SensorT for IIOSensor { let mut result = vec![]; for axis in &self.axes { let value = self.read_axis(axis)?; - result.push(MessageValue::Unsigned((value & 0xFFFFFFFF) as u32)); - result.push(MessageValue::Unsigned((value >> 32) as u32)); + result.push(MessageValue::Signed((value & 0xFFFFFFFF) as i32)); + result.push(MessageValue::Signed((value >> 32) as i32)); result.push(MessageValue::Unsigned(0)); result.push(MessageValue::Unsigned(0)); } @@ -784,8 +784,8 @@ mod tests { // custom exponent = 2 // applied and rounded: 45037037598 = 0xA7C6AA81E assert_eq!(result.len(), 4); - assert_eq!(result.first().unwrap(), &MessageValue::Unsigned(0x7C6AA81E)); - assert_eq!(result.get(1).unwrap(), &MessageValue::Unsigned(0xA)); + assert_eq!(result.first().unwrap(), &MessageValue::Signed(0x7C6AA81E)); + assert_eq!(result.get(1).unwrap(), &MessageValue::Signed(0xA)); assert_eq!(result.get(2).unwrap(), &MessageValue::Unsigned(0)); assert_eq!(result.get(3).unwrap(), &MessageValue::Unsigned(0)); } @@ -801,8 +801,8 @@ mod tests { sensor.initialize().unwrap(); let result = sensor.reading_get().unwrap(); assert_eq!(result.len(), 4); - assert_eq!(result.first().unwrap(), &MessageValue::Unsigned(0x5A)); - assert_eq!(result.get(1).unwrap(), &MessageValue::Unsigned(0)); + assert_eq!(result.first().unwrap(), &MessageValue::Signed(0x5A)); + assert_eq!(result.get(1).unwrap(), &MessageValue::Signed(0)); assert_eq!(result.get(2).unwrap(), &MessageValue::Unsigned(0)); assert_eq!(result.get(3).unwrap(), &MessageValue::Unsigned(0)); } @@ -823,13 +823,16 @@ mod tests { sensor.initialize().unwrap(); let result = sensor.reading_get().unwrap(); assert_eq!(result.len(), 12); - assert_eq!(result.first().unwrap(), &MessageValue::Unsigned(22)); - assert_eq!(result.get(4).unwrap(), &MessageValue::Unsigned(60)); - assert_eq!(result.get(8).unwrap(), &MessageValue::Unsigned(150)); + assert_eq!(result.first().unwrap(), &MessageValue::Signed(22)); + assert_eq!(result.get(4).unwrap(), &MessageValue::Signed(60)); + assert_eq!(result.get(8).unwrap(), &MessageValue::Signed(150)); for i in 0..12 { - if i % 4 != 0 { + if i % 4 == 2 || i % 4 == 3 { assert_eq!(result.get(i).unwrap(), &MessageValue::Unsigned(0)); } + if i % 4 == 1 { + assert_eq!(result.get(i).unwrap(), &MessageValue::Signed(0)); + } } } }