From f039a37971647ff786c546c38cafd412820e5ab3 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 28 Nov 2016 10:18:52 +1100 Subject: [PATCH] HAL_PX4: set names on all bus threads --- libraries/AP_HAL_PX4/Device.cpp | 24 ++++++++++++++++++++++-- libraries/AP_HAL_PX4/Device.h | 5 +++-- libraries/AP_HAL_PX4/I2CDevice.cpp | 2 +- libraries/AP_HAL_PX4/SPIDevice.cpp | 2 +- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/libraries/AP_HAL_PX4/Device.cpp b/libraries/AP_HAL_PX4/Device.cpp index ec527452f1..e15fef037a 100644 --- a/libraries/AP_HAL_PX4/Device.cpp +++ b/libraries/AP_HAL_PX4/Device.cpp @@ -34,6 +34,24 @@ static const AP_HAL::HAL &hal = AP_HAL::get_HAL(); void *DeviceBus::bus_thread(void *arg) { struct DeviceBus *binfo = (struct DeviceBus *)arg; + + // setup a name for the thread + char name[] = "XXX:X"; + switch (binfo->hal_device->bus_type()) { + case AP_HAL::Device::BUS_TYPE_I2C: + snprintf(name, sizeof(name), "I2C:%u", + binfo->hal_device->bus_num()); + break; + + case AP_HAL::Device::BUS_TYPE_SPI: + snprintf(name, sizeof(name), "SPI:%u", + binfo->hal_device->bus_num()); + break; + default: + break; + } + pthread_setname_np(pthread_self(), name); + while (!_px4_thread_should_exit) { uint64_t now = AP_HAL::micros64(); DeviceBus::callback_info *callback; @@ -81,7 +99,7 @@ void *DeviceBus::bus_thread(void *arg) return nullptr; } -AP_HAL::Device::PeriodicHandle DeviceBus::register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb cb) +AP_HAL::Device::PeriodicHandle DeviceBus::register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb cb, AP_HAL::Device *_hal_device) { if (!thread_started) { thread_started = true; @@ -95,7 +113,9 @@ AP_HAL::Device::PeriodicHandle DeviceBus::register_periodic_callback(uint32_t pe param.sched_priority = thread_priority; (void)pthread_attr_setschedparam(&thread_attr, ¶m); pthread_attr_setschedpolicy(&thread_attr, SCHED_FIFO); - + + hal_device = _hal_device; + pthread_create(&thread_ctx, &thread_attr, &DeviceBus::bus_thread, this); } DeviceBus::callback_info *callback = new DeviceBus::callback_info; diff --git a/libraries/AP_HAL_PX4/Device.h b/libraries/AP_HAL_PX4/Device.h index 667a778640..8eeda33462 100644 --- a/libraries/AP_HAL_PX4/Device.h +++ b/libraries/AP_HAL_PX4/Device.h @@ -29,9 +29,9 @@ public: struct DeviceBus *next; Semaphore semaphore; - AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb); + AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb, AP_HAL::Device *hal_device); static void *bus_thread(void *arg); - + private: struct callback_info { struct callback_info *next; @@ -42,6 +42,7 @@ private: uint8_t thread_priority; pthread_t thread_ctx; bool thread_started; + AP_HAL::Device *hal_device; }; } diff --git a/libraries/AP_HAL_PX4/I2CDevice.cpp b/libraries/AP_HAL_PX4/I2CDevice.cpp index 07487ea2f4..1c24eecd21 100644 --- a/libraries/AP_HAL_PX4/I2CDevice.cpp +++ b/libraries/AP_HAL_PX4/I2CDevice.cpp @@ -141,7 +141,7 @@ AP_HAL::Device::PeriodicHandle I2CDevice::register_periodic_callback(uint32_t pe return nullptr; } struct DeviceBus &binfo = businfo[_busnum]; - return binfo.register_periodic_callback(period_usec, cb); + return binfo.register_periodic_callback(period_usec, cb, this); } diff --git a/libraries/AP_HAL_PX4/SPIDevice.cpp b/libraries/AP_HAL_PX4/SPIDevice.cpp index 5b0ba6f1ca..889037c9c0 100644 --- a/libraries/AP_HAL_PX4/SPIDevice.cpp +++ b/libraries/AP_HAL_PX4/SPIDevice.cpp @@ -223,7 +223,7 @@ AP_HAL::Semaphore *SPIDevice::get_semaphore() AP_HAL::Device::PeriodicHandle SPIDevice::register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb cb) { - return bus.register_periodic_callback(period_usec, cb); + return bus.register_periodic_callback(period_usec, cb, this); } bool SPIDevice::adjust_periodic_callback(AP_HAL::Device::PeriodicHandle h, uint32_t period_usec)