STM32: Added basic OS abstraction (ChibiOS event), test app for this, minor changes in Makefile

This commit is contained in:
Pavel Kirienko
2014-04-02 21:56:44 +04:00
parent b465c0a303
commit 9c08f54e65
7 changed files with 203 additions and 4 deletions
@@ -0,0 +1,42 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#pragma once
#if UAVCAN_STM32_CHIBIOS
# include <hal.h>
#else
# error "Unknown OS"
#endif
#include <uavcan/driver/can.hpp>
namespace uavcan_stm32
{
enum { CanFiltersPerIface = 14 };
class CanIface : public uavcan::ICanIface
{
CAN_TypeDef* can_;
uavcan::uint64_t error_cnt_;
public:
virtual uavcan::int16_t send(const uavcan::CanFrame& frame, uavcan::MonotonicTime tx_deadline,
uavcan::CanIOFlags flags);
virtual uavcan::int16_t receive(uavcan::CanFrame& out_frame, uavcan::MonotonicTime& out_ts_monotonic,
uavcan::UtcTime& out_ts_utc, uavcan::CanIOFlags& out_flags);
virtual uavcan::int16_t configureFilters(const uavcan::CanFilterConfig* filter_configs,
uavcan::uint16_t num_configs);
virtual uavcan::uint16_t getNumFilters() const { return CanFiltersPerIface; }
virtual uavcan::uint64_t getErrorCount() const { return error_cnt_; }
};
}
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#pragma once
#if UAVCAN_STM32_CHIBIOS
# include <ch.hpp>
#else
# error "Unknown OS"
#endif
#include <uavcan/uavcan.hpp>
namespace uavcan_stm32
{
#if UAVCAN_STM32_CHIBIOS
class Event
{
chibios_rt::CounterSemaphore sem_;
public:
Event() : sem_(0) { }
bool wait(uavcan::MonotonicDuration duration);
void signal();
void signalFromInterrupt();
};
#endif
}
@@ -0,0 +1,8 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#pragma once
#include <uavcan_stm32/can.hpp>
#include <uavcan_stm32/thread.hpp>