From 33878c8ac86df2e12705a1d9676afc4aed916e53 Mon Sep 17 00:00:00 2001 From: Manuel Stahl Date: Fri, 20 Jan 2017 17:40:34 +0100 Subject: [PATCH] Add support for listen only mode --- FlexCAN.cpp | 12 +++++++++++- FlexCAN.h | 2 ++ README.md | 10 +++++++++- keywords.txt | 3 ++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/FlexCAN.cpp b/FlexCAN.cpp index 7ad1312..49076a3 100644 --- a/FlexCAN.cpp +++ b/FlexCAN.cpp @@ -115,6 +115,17 @@ void FlexCAN::setFilter(const CAN_filter_t &filter, uint8_t n) } } +// ------------------------------------------------------------- +void FlexCAN::enableListenOnlyMode(void) +{ + FLEXCAN0_CTRL1 |= FLEXCAN_CTRL_LOM; +} + +// ------------------------------------------------------------- +void FlexCAN::disableListenOnlyMode(void) +{ + FLEXCAN0_CTRL1 &= ~FLEXCAN_CTRL_LOM; +} // ------------------------------------------------------------- int FlexCAN::available(void) @@ -223,4 +234,3 @@ int FlexCAN::write(const CAN_message_t &msg) return 1; } - diff --git a/FlexCAN.h b/FlexCAN.h index 19e92e8..d8075d7 100644 --- a/FlexCAN.h +++ b/FlexCAN.h @@ -35,6 +35,8 @@ class FlexCAN begin(defaultMask); } void setFilter(const CAN_filter_t &filter, uint8_t n); + void enableListenOnlyMode(void); + void disableListenOnlyMode(void); void end(void); int available(void); int write(const CAN_message_t &msg); diff --git a/README.md b/README.md index e94ffd8..1b01d30 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,15 @@ Enable the CAN to start actively participating on the CANbus. Enable reception **setFilter(filter, number)** Set the receive filter selected by number, 0-7. When using filters it is required to set them all. If the application uses less than 8 filters, duplicate one filter for the unused ones. +**enableListenOnlyMode()** +Enable the listen only mode. Can only be set before calling begin() or after end(). +In this mode, transmission is disabled, all error counters are frozen and the module +operates in a CAN Error Passive mode. Only messages acknowledged by another +CAN station will be received. + +**disableListenOnlyMode()** +Disable the listen only mode. Can only be set before calling begin() or after end(). + The mask and filter are **CAN_filter_t** type structures. ###Caller Blocking Support @@ -59,4 +68,3 @@ The timeout monitoring mechanism calls **yield()** until a buffer is found or th ###In-order Transmission Caller blocking can be used to **write()** frames guaranteed in-order to the bus. When caller blocking is selected for **write()** (non-zero timeout specified), a single hardware transmit buffer is used. - diff --git a/keywords.txt b/keywords.txt index 3ef5764..a70f350 100644 --- a/keywords.txt +++ b/keywords.txt @@ -2,6 +2,8 @@ FlexCAN KEYWORD1 begin KEYWORD2 setFilter KEYWORD2 +enableListenOnlyMode KEYWORD2 +disableListenOnlyMode KEYWORD2 end KEYWORD2 read KEYWORD2 write KEYWORD2 @@ -9,4 +11,3 @@ available KEYWORD2 CAN_message_t KEYWORD1 CAN_filter_t KEYWORD1 -