Merged in paulpatience/nuttx-apps/uavcan (pull request #24)

Uavcan
This commit is contained in:
Gregory Nutt 2015-11-12 12:33:37 -06:00
commit 1dd862e574
2 changed files with 19 additions and 15 deletions

View File

@ -44,30 +44,31 @@
#include <uavcan_stm32/uavcan_stm32.hpp>
/****************************************************************************
* Private Data
* Configuration
****************************************************************************/
#if CONFIG_UAVCAN_RX_QUEUE_CAPACITY > 0
static uavcan_stm32::CanInitHelper<CONFIG_UAVCAN_RX_QUEUE_CAPACITY> can;
#else
static uavcan_stm32::CanInitHelper<> can;
#if CONFIG_UAVCAN_RX_QUEUE_CAPACITY == 0
# undef CONFIG_UAVCAN_RX_QUEUE_CAPACITY
# define CONFIG_UAVCAN_RX_QUEUE_CAPACITY
#endif
/****************************************************************************
* Private Functions
****************************************************************************/
static void delay_callable()
static void delay(void)
{
std::usleep(can.getRecommendedListeningDelay().toUSec());
std::usleep(uavcan_stm32::CanInitHelper<CONFIG_UAVCAN_RX_QUEUE_CAPACITY>::
getRecommendedListeningDelay().toUSec());
}
/****************************************************************************
* Public Functions
****************************************************************************/
uavcan::ICanDriver& getCanDriver()
uavcan::ICanDriver &getCanDriver(void)
{
static uavcan_stm32::CanInitHelper<CONFIG_UAVCAN_RX_QUEUE_CAPACITY> can;
static bool initialized = false;
if (!initialized)
@ -78,7 +79,7 @@ uavcan::ICanDriver& getCanDriver()
int retries = 0;
#endif
while (can.init(delay_callable, bitrate) < 0)
while (can.init(delay, bitrate) < 0)
{
#if CONFIG_UAVCAN_INIT_RETRIES > 0
retries++;
@ -95,7 +96,7 @@ uavcan::ICanDriver& getCanDriver()
return can.driver;
}
uavcan::ISystemClock& getSystemClock()
uavcan::ISystemClock &getSystemClock(void)
{
return uavcan_stm32::SystemClock::instance();
}

View File

@ -42,14 +42,16 @@
#include <cstdio>
#include <cstdlib>
#include <nuttx/arch.h>
#include <uavcan/uavcan.hpp>
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
uavcan::ICanDriver& getCanDriver();
uavcan::ISystemClock& getSystemClock();
extern uavcan::ICanDriver &getCanDriver(void);
extern uavcan::ISystemClock &getSystemClock(void);
/****************************************************************************
* Public Functions
@ -65,14 +67,15 @@ int main(int argc, FAR char *argv[])
extern "C" int uavcan_main(int argc, FAR char *argv[])
#endif
{
uavcan::Node<CONFIG_EXAMPLES_UAVCAN_NODE_MEM_POOL_SIZE>
up_cxxinitialize();
static uavcan::Node<CONFIG_EXAMPLES_UAVCAN_NODE_MEM_POOL_SIZE>
node(getCanDriver(), getSystemClock());
int ret;
node.setNodeID(CONFIG_EXAMPLES_UAVCAN_NODE_ID);
node.setName(CONFIG_EXAMPLES_UAVCAN_NODE_NAME);
ret = node.start();
int ret = node.start();
if (ret < 0)
{
std::fprintf(stderr, "ERROR: node.start failed: %d\n", ret);