/* * This file is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #pragma once #include #include #include "Semaphores.h" #include "AP_HAL_QURT.h" #include "Scheduler.h" #define HAL_QURT_DEVICE_STACK_SIZE 8192 namespace QURT { class DeviceBus { public: DeviceBus(AP_HAL::Scheduler::priority_base _thread_priority); struct DeviceBus *next; HAL_Semaphore semaphore; AP_HAL::Device::PeriodicHandle register_periodic_callback(uint32_t period_usec, AP_HAL::Device::PeriodicCb, AP_HAL::Device *hal_device); bool adjust_timer(AP_HAL::Device::PeriodicHandle h, uint32_t period_usec); void bus_thread(void); private: struct callback_info { struct callback_info *next; AP_HAL::Device::PeriodicCb cb; uint32_t period_usec; uint64_t next_usec; } *callbacks; AP_HAL::Scheduler::priority_base thread_priority; bool thread_started; AP_HAL::Device *hal_device; }; }