From 2d17735fb9468debbbd1f5dce1b242be24f68e13 Mon Sep 17 00:00:00 2001 From: John McInnes Date: Sun, 22 Dec 2024 21:35:09 -0900 Subject: [PATCH] Fixed signal strength functions to not divide by 1000 and to interpret as signed. --- src/sfeQwiicXM125.cpp | 58 ++++++++++++++++++------------------------- src/sfeQwiicXM125.h | 22 ++++++++-------- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/src/sfeQwiicXM125.cpp b/src/sfeQwiicXM125.cpp index a62eeb0..ef2b009 100644 --- a/src/sfeQwiicXM125.cpp +++ b/src/sfeQwiicXM125.cpp @@ -353,9 +353,9 @@ int32_t QwDevXM125::getDistanceMeasureDistanceError(uint32_t &error) return retVal; } -int32_t QwDevXM125::getDistanceTemperature(uint32_t &temperature) +int32_t QwDevXM125::getDistanceTemperature(int32_t &temperature) { - int32_t retVal; + uint32_t retVal; uint32_t regVal = 0; // Read from 16-Bit Register @@ -363,8 +363,8 @@ int32_t QwDevXM125::getDistanceTemperature(uint32_t &temperature) retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_RESULT, (uint8_t*)®Val, 4, readBytes); regVal = __builtin_bswap32(regVal); - // Mask unused bits from register - temperature = (regVal & SFE_XM125_DISTANCE_TEMPERATURE_MASK) >> SFE_XM125_DISTANCE_TEMPERATURE_MASK_SHIFT; + // Mask unused bits from register + temperature = (int16_t)((regVal & SFE_XM125_DISTANCE_TEMPERATURE_MASK) >> SFE_XM125_DISTANCE_TEMPERATURE_MASK_SHIFT); return retVal; } @@ -449,93 +449,83 @@ int32_t QwDevXM125::getDistancePeak9Distance(uint32_t &peak) return retVal; } -int32_t QwDevXM125::getDistancePeak0Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak0Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK0_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak1Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak1Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK1_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak2Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak2Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK2_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak3Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak3Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK3_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak4Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak4Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK4_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak5Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak5Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK5_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak6Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak6Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK6_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak7Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak7Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK7_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak8Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak8Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK8_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } -int32_t QwDevXM125::getDistancePeak9Strength(uint32_t &peak) +int32_t QwDevXM125::getDistancePeak9Strength(int32_t &peak) { size_t readBytes = 0; int32_t retVal = _theBus->readRegister16Region(SFE_XM125_DISTANCE_PEAK9_STRENGTH, (uint8_t*)&peak, 4, readBytes); - peak = __builtin_bswap32(peak); - peak = peak/1000; + peak = (signed)__builtin_bswap32(peak); return retVal; } diff --git a/src/sfeQwiicXM125.h b/src/sfeQwiicXM125.h index 6e29431..55e9e05 100644 --- a/src/sfeQwiicXM125.h +++ b/src/sfeQwiicXM125.h @@ -79,7 +79,7 @@ class QwDevXM125 /// only be used for relative temperature measurements. /// @param temperature Relative tempertaure of device /// @return Error code (0 no error) - int32_t getDistanceTemperature(uint32_t &temperature); + int32_t getDistanceTemperature(int32_t &temperature); /// @brief This function returns the distance to peak 0 /// Note: This value is a factor 1000 larger than the RSS value @@ -134,52 +134,52 @@ class QwDevXM125 /// @brief This function returns the strength of peak 0 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak0Strength(uint32_t &peak); + int32_t getDistancePeak0Strength(int32_t &peak); /// @brief This function returns the strength of peak 1 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak1Strength(uint32_t &peak); + int32_t getDistancePeak1Strength(int32_t &peak); /// @brief This function returns the strength of peak 2 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak2Strength(uint32_t &peak); + int32_t getDistancePeak2Strength(int32_t &peak); /// @brief This function returns the strength of peak 3 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak3Strength(uint32_t &peak); + int32_t getDistancePeak3Strength(int32_t &peak); /// @brief This function returns the strength of peak 4 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak4Strength(uint32_t &peak); + int32_t getDistancePeak4Strength(int32_t &peak); /// @brief This function returns the strength of peak 5 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak5Strength(uint32_t &peak); + int32_t getDistancePeak5Strength(int32_t &peak); /// @brief This function returns the strength of peak 6 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak6Strength(uint32_t &peak); + int32_t getDistancePeak6Strength(int32_t &peak); /// @brief This function returns the strength of peak 7 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak7Strength(uint32_t &peak); + int32_t getDistancePeak7Strength(int32_t &peak); /// @brief This function returns the strength of peak 8 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak8Strength(uint32_t &peak); + int32_t getDistancePeak8Strength(int32_t &peak); /// @brief This function returns the strength of peak 9 /// Note: This value is a factor 1000 larger than the RSS value /// @return Error code (0 no error) - int32_t getDistancePeak9Strength(uint32_t &peak); + int32_t getDistancePeak9Strength(int32_t &peak); /// @brief This function returns the start of measured interval /// in millimeters.