Browse Source

AP_HAL: add common Event interface

zr-v5.1
Siddharth Purohit 5 years ago committed by Andrew Tridgell
parent
commit
697e4141cb
  1. 1
      libraries/AP_HAL/AP_HAL.h
  2. 2
      libraries/AP_HAL/AP_HAL_Namespace.h
  3. 33
      libraries/AP_HAL/EventHandle.cpp
  4. 44
      libraries/AP_HAL/EventHandle.h
  5. 3
      libraries/AP_HAL/board/chibios.h
  6. 3
      libraries/AP_HAL/board/linux.h
  7. 5
      libraries/AP_HAL/board/sitl.h
  8. 1
      libraries/AP_HAL_ChibiOS/AP_HAL_ChibiOS_Namespace.h

1
libraries/AP_HAL/AP_HAL.h

@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
#include "RCOutput.h"
#include "Scheduler.h"
#include "Semaphores.h"
#include "EventHandle.h"
#include "Util.h"
#include "OpticalFlow.h"
#include "Flash.h"

2
libraries/AP_HAL/AP_HAL_Namespace.h

@ -26,6 +26,8 @@ namespace AP_HAL { @@ -26,6 +26,8 @@ namespace AP_HAL {
class RCInput;
class RCOutput;
class Scheduler;
class EventHandle;
class EventSource;
class Semaphore;
class OpticalFlow;
class DSP;

33
libraries/AP_HAL/EventHandle.cpp

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
#include "EventHandle.h"
#include <AP_HAL/AP_HAL.h>
bool AP_HAL::EventHandle::register_event(uint32_t evt_mask)
{
WITH_SEMAPHORE(sem);
evt_mask_ |= evt_mask;
return true;
}
bool AP_HAL::EventHandle::unregister_event(uint32_t evt_mask)
{
WITH_SEMAPHORE(sem);
evt_mask_ &= ~evt_mask;
return true;
}
bool AP_HAL::EventHandle::wait(uint64_t duration)
{
if (evt_src_ == nullptr) {
return false;
}
return evt_src_->wait(duration, this);
}
bool AP_HAL::EventHandle::set_source(AP_HAL::EventSource* src)
{
WITH_SEMAPHORE(sem);
evt_src_ = src;
evt_mask_ = 0;
return true;
}

44
libraries/AP_HAL/EventHandle.h

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
#pragma once
#include "AP_HAL_Namespace.h"
#include <stdint.h>
#include "AP_HAL_Boards.h"
class AP_HAL::EventSource {
public:
// generate event from thread context
virtual void signal(uint32_t evt_mask) = 0;
// generate event from interrupt context
virtual void signalI(uint32_t evt_mask) { signal(evt_mask); }
// Wait on an Event handle, method for internal use by EventHandle
virtual bool wait(uint64_t duration, AP_HAL::EventHandle* evt_handle) = 0;
};
class AP_HAL::EventHandle {
public:
//Set event source
virtual bool set_source(AP_HAL::EventSource* src);
AP_HAL::EventSource* get_source() { return evt_src_; }
// return true if event type was successfully registered
virtual bool register_event(uint32_t evt_mask);
// return true if event type was successfully unregistered
virtual bool unregister_event(uint32_t evt_mask);
// return true if event was triggered within the duration
virtual bool wait(uint64_t duration);
virtual uint32_t get_evt_mask() const { return evt_mask_; }
private:
// Mask of events to be handeled,
// Max 32 events can be handled per event handle
uint32_t evt_mask_;
AP_HAL::EventSource *evt_src_;
HAL_Semaphore sem;
};

3
libraries/AP_HAL/board/chibios.h

@ -60,6 +60,9 @@ @@ -60,6 +60,9 @@
#include <AP_HAL_ChibiOS/Semaphores.h>
#define HAL_Semaphore ChibiOS::Semaphore
#include <AP_HAL/EventHandle.h>
#define HAL_EventHandle AP_HAL::EventHandle
/* string names for well known SPI devices */
#define HAL_BARO_MS5611_NAME "ms5611"
#ifndef HAL_BARO_MS5611_SPI_INT_NAME

3
libraries/AP_HAL/board/linux.h

@ -347,4 +347,5 @@ @@ -347,4 +347,5 @@
#include <AP_HAL_Linux/Semaphores.h>
#define HAL_Semaphore Linux::Semaphore
#include <AP_HAL/EventHandle.h>
#define HAL_EventHandle AP_HAL::EventHandle

5
libraries/AP_HAL/board/sitl.h

@ -58,6 +58,11 @@ @@ -58,6 +58,11 @@
#include <AP_HAL_SITL/Semaphores.h>
#define HAL_Semaphore HALSITL::Semaphore
#include <AP_HAL/EventHandle.h>
#define HAL_EventHandle AP_HAL::EventHandle
#define HAL_NUM_CAN_IFACES 2
#ifndef HAL_BOARD_STORAGE_DIRECTORY
#define HAL_BOARD_STORAGE_DIRECTORY "."
#endif

1
libraries/AP_HAL_ChibiOS/AP_HAL_ChibiOS_Namespace.h

@ -14,6 +14,7 @@ namespace ChibiOS { @@ -14,6 +14,7 @@ namespace ChibiOS {
class RCOutput;
class Scheduler;
class Semaphore;
class EventSource;
class SPIBus;
class SPIDesc;
class SPIDevice;

Loading…
Cancel
Save