summaryrefslogtreecommitdiff
path: root/src/drivers/spi.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-09-29 15:17:10 +1000
committerjacqueline <me@jacqueline.id.au>2023-09-29 15:17:32 +1000
commitba940baa0aff05ad26d265f32f1d185a1f410373 (patch)
treeaca7e4ef8049039b7eb92160732d711db15873cf /src/drivers/spi.cpp
parentc53802f308f57f0d829f5a02baf9e9fe8219c301 (diff)
downloadtangara-fw-ba940baa0aff05ad26d265f32f1d185a1f410373.tar.gz
Add a lock around the SPI bus
This seems to have been the cause of recurring deadlocks that have been difficult to repo.
Diffstat (limited to 'src/drivers/spi.cpp')
-rw-r--r--src/drivers/spi.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/drivers/spi.cpp b/src/drivers/spi.cpp
index 93bf9cde..ba461b67 100644
--- a/src/drivers/spi.cpp
+++ b/src/drivers/spi.cpp
@@ -20,6 +20,8 @@ static const gpio_num_t kSpiSdoPin = GPIO_NUM_23;
static const gpio_num_t kSpiSdiPin = GPIO_NUM_19;
static const gpio_num_t kSpiSclkPin = GPIO_NUM_18;
+static std::mutex sSpiMutex{};
+
esp_err_t init_spi(void) {
spi_bus_config_t config = {
.mosi_io_num = kSpiSdoPin,
@@ -52,4 +54,8 @@ esp_err_t deinit_spi(void) {
return spi_bus_free(kSpiHost);
}
+std::lock_guard<std::mutex> acquire_spi(void) {
+ return std::lock_guard<std::mutex>{sSpiMutex};
+}
+
} // namespace drivers