From 3592d5518234c932e057beb51ed86498c16fbaff Mon Sep 17 00:00:00 2001 From: SnickeyX Date: Fri, 10 Jun 2022 15:45:25 +0100 Subject: [PATCH 1/4] changes to get imus to work --- src/debugging/can_listener.cpp | 4 ++-- src/sensors/imu.cpp | 7 ++++--- src/utils/io/spi.cpp | 9 ++++++--- src/utils/io/spi.hpp | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/debugging/can_listener.cpp b/src/debugging/can_listener.cpp index 7539fce7..c9b8fd96 100644 --- a/src/debugging/can_listener.cpp +++ b/src/debugging/can_listener.cpp @@ -21,7 +21,7 @@ bool CanListener::hasId(uint32_t id, bool extended) log_.debug("received extended CAN message; skipping"); return false; } - return ids_.contains(id); + return ids_.find(id) != ids_.end(); } void CanListener::subscribe(const uint32_t id) @@ -31,7 +31,7 @@ void CanListener::subscribe(const uint32_t id) void CanListener::unsubscribe(const uint32_t id) { - if (!ids_.contains(id)) { + if (ids_.find(id) == ids_.end()) { log_.error("tried to unsubscribe from unknown node_id"); return; } diff --git a/src/sensors/imu.cpp b/src/sensors/imu.cpp index 568d0b71..8590a278 100644 --- a/src/sensors/imu.cpp +++ b/src/sensors/imu.cpp @@ -29,7 +29,7 @@ static constexpr uint8_t kPwrMgmt1 = 0x06; // userbank 0 static constexpr uint8_t kPwrMgmt2 = 0x07; // userbank 0 // Configuration -static constexpr uint8_t kReadFlag = 0x80; // unable to find in datasheet +static constexpr uint8_t kReadFlag = 0x80; // msb is 1 which signifies a read operation for SPI // Configuration bits Imu // constexpr uint8_t kBitsFs250Dps = 0x00; @@ -286,12 +286,13 @@ data::ImuData Imu::getData() } } else { log_.debug("Getting Imu data"); - uint8_t response[8]; + uint8_t response[6]; int16_t bit_data; float value; std::array acceleration_data; - readBytes(kAccelXoutH, response, 8); + // Reading six bytes - first two give x-acceleration, next two give y-acceleration, last two give z-acceleration (high and low byte pairs) + readBytes(kAccelXoutH, response, 6); for (size_t i = 0; i < 3; ++i) { bit_data = ((int16_t)response[i * 2] << 8) | response[i * 2 + 1]; value = static_cast(bit_data); diff --git a/src/utils/io/spi.cpp b/src/utils/io/spi.cpp index 5f721d6b..bcad5079 100644 --- a/src/utils/io/spi.cpp +++ b/src/utils/io/spi.cpp @@ -96,7 +96,7 @@ Spi &Spi::getInstance() Spi::Spi(Logger &log) : spi_fd_(-1), hw_(0), ch_(0), log_(log) { - const char device[] = "/dev/spidev1.0"; // spidev1.0 for SPI0 + const char device[] = "/dev/spidev0.0"; // spidev1.0 for SPI0 spi_fd_ = open(device, O_RDWR, 0); if (spi_fd_ < 0) { @@ -105,7 +105,7 @@ Spi::Spi(Logger &log) : spi_fd_(-1), hw_(0), ch_(0), log_(log) } // set clock frequency - setClock(Clock::k1MHz); + setClock(Clock::k500KHz); uint8_t bits = SPI_BITS; // need to change this value if (ioctl(spi_fd_, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0) { @@ -149,7 +149,7 @@ bool Spi::initialise() ch_ = &hw_->ch0; log_.info("Mapping successfully created %d", sizeof(SPI_HW)); - log_.info("revision 0x%x", hw_->revision); + //log_.info("revision 0x%x", hw_->revision); return true; } @@ -157,6 +157,9 @@ void Spi::setClock(Clock clk) { uint32_t data; switch (clk) { + case Clock::k500KHz: + data = 500000; + break; case Clock::k1MHz: data = 1000000; break; diff --git a/src/utils/io/spi.hpp b/src/utils/io/spi.hpp index c22d03e9..07188752 100644 --- a/src/utils/io/spi.hpp +++ b/src/utils/io/spi.hpp @@ -15,7 +15,7 @@ class Spi { public: static Spi &getInstance(); - enum class Clock { k1MHz, k4MHz, k16MHz, k20MHz }; + enum class Clock { k500KHz, k1MHz, k4MHz, k16MHz, k20MHz }; void setClock(Clock clk); From 715201737cbddc9e5b41280001844a571f6cd051 Mon Sep 17 00:00:00 2001 From: SnickeyX Date: Sat, 11 Jun 2022 09:52:39 +0100 Subject: [PATCH 2/4] fixed comment --- src/utils/io/spi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/io/spi.cpp b/src/utils/io/spi.cpp index bcad5079..bb934a3a 100644 --- a/src/utils/io/spi.cpp +++ b/src/utils/io/spi.cpp @@ -96,7 +96,7 @@ Spi &Spi::getInstance() Spi::Spi(Logger &log) : spi_fd_(-1), hw_(0), ch_(0), log_(log) { - const char device[] = "/dev/spidev0.0"; // spidev1.0 for SPI0 + const char device[] = "/dev/spidev0.0"; // spidev0.0 for SPI0 spi_fd_ = open(device, O_RDWR, 0); if (spi_fd_ < 0) { From b0b666671b3ab10c743e153881d8314dc0dd99a5 Mon Sep 17 00:00:00 2001 From: SnickeyX Date: Thu, 23 Jun 2022 12:34:29 +0100 Subject: [PATCH 3/4] removed unnecessary comment --- src/utils/io/spi.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/io/spi.cpp b/src/utils/io/spi.cpp index bb934a3a..89c5d772 100644 --- a/src/utils/io/spi.cpp +++ b/src/utils/io/spi.cpp @@ -149,7 +149,6 @@ bool Spi::initialise() ch_ = &hw_->ch0; log_.info("Mapping successfully created %d", sizeof(SPI_HW)); - //log_.info("revision 0x%x", hw_->revision); return true; } From 1183500bc113d082c135bd9c637b8324dbcec83c Mon Sep 17 00:00:00 2001 From: SnickeyX Date: Tue, 28 Jun 2022 12:34:12 +0100 Subject: [PATCH 4/4] fixed gpio pip exporting issue --- src/sensors/main.cpp | 2 +- src/utils/io/gpio.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sensors/main.cpp b/src/sensors/main.cpp index 99b94692..6e52e5ad 100644 --- a/src/sensors/main.cpp +++ b/src/sensors/main.cpp @@ -387,7 +387,7 @@ std::optional> Main::brakePressurePinsFromFile(utils::Logge } const auto brake_pressure_pin_array = config_object["brake_pressure_pins"].GetArray(); if (brake_pressure_pin_array.Size() != data::Sensors::kNumBrakePressure) { - log.error("Found %d brake sensor pins but %d were expected in configuration file at %s", + log.error("Found %d brake pressure pins but %d were expected in configuration file at %s", brake_pressure_pin_array.Size(), data::Sensors::kNumBrakePressure, path.c_str()); } std::vector brake_pressure_pins; diff --git a/src/utils/io/gpio.cpp b/src/utils/io/gpio.cpp index 93775753..e451ff9c 100644 --- a/src/utils/io/gpio.cpp +++ b/src/utils/io/gpio.cpp @@ -133,7 +133,7 @@ void Gpio::exportGPIO() // let the kernel know we are using this pin int fd; uint32_t len; - fd = open("/sys/class/gpio/export", O_WRONLY); + fd = open("/sys/class/gpio/export", O_RDWR); if (fd < 0) { log_.error("could not open export file"); return;