filter.h
Go to the documentation of this file.
1 #ifndef SOCKETCAN_INTERFACE_FILTER_H
2 #define SOCKETCAN_INTERFACE_FILTER_H
3 
4 #include <vector>
5 
6 #include "interface.h"
7 
8 namespace can {
9 
10 class FrameFilter {
11 public:
12  virtual bool pass(const can::Frame &frame) const = 0;
13  virtual ~FrameFilter() {}
14 };
15 typedef boost::shared_ptr<FrameFilter> FrameFilterSharedPtr;
16 
17 class FrameMaskFilter : public FrameFilter {
18 public:
19  static const uint32_t MASK_ALL = 0xffffffff;
20  static const uint32_t MASK_RELAXED = ~Frame::EXTENDED_MASK;
21  FrameMaskFilter(uint32_t can_id, uint32_t mask = MASK_RELAXED, bool invert = false)
22  : mask_(mask), masked_id_(can_id & mask), invert_(invert)
23  {}
24  virtual bool pass(const can::Frame &frame) const{
25  return ((mask_ & frame) == masked_id_) != invert_;
26  }
27 private:
28  const uint32_t mask_;
29  const uint32_t masked_id_;
30  const bool invert_;
31 };
32 
33 class FrameRangeFilter : public FrameFilter {
34 public:
35  FrameRangeFilter(uint32_t min_id, uint32_t max_id, bool invert = false)
36  : min_id_(min_id), max_id_(max_id), invert_(invert)
37  {}
38  virtual bool pass(const can::Frame &frame) const{
39  return (min_id_ <= frame && frame <= max_id_) != invert_;
40  }
41 private:
42  const uint32_t min_id_;
43  const uint32_t max_id_;
44  const bool invert_;
45 };
46 
48 public:
49  typedef std::vector<FrameFilterSharedPtr> FilterVector;
50  FilteredFrameListener(CommInterfaceSharedPtr comm, const Callable &callable, const FilterVector &filters)
51  : CommInterface::FrameListener(callable),
52  filters_(filters),
53  listener_(comm->createMsgListener(Callable(this, &FilteredFrameListener::filter)))
54  {}
55 private:
56  void filter(const Frame &frame) {
57  for(FilterVector::const_iterator it=filters_.begin(); it != filters_.end(); ++it) {
58  if((*it)->pass(frame)){
59  (*this)(frame);
60  break;
61  }
62  }
63  }
64  const std::vector<FrameFilterSharedPtr> filters_;
66 };
67 
68 } // namespace can
69 
70 #endif /*SOCKETCAN_INTERFACE_FILTER_H*/
const uint32_t max_id_
Definition: filter.h:43
FilteredFrameListener(CommInterfaceSharedPtr comm, const Callable &callable, const FilterVector &filters)
Definition: filter.h:50
Definition: asio_base.h:11
const bool invert_
Definition: filter.h:44
const uint32_t min_id_
Definition: filter.h:42
virtual bool pass(const can::Frame &frame) const
Definition: filter.h:24
const bool invert_
Definition: filter.h:30
boost::shared_ptr< CommInterface > CommInterfaceSharedPtr
Definition: interface.h:159
std::vector< FrameFilterSharedPtr > FilterVector
Definition: filter.h:49
virtual bool pass(const can::Frame &frame) const
Definition: filter.h:38
const uint32_t masked_id_
Definition: filter.h:29
virtual ~FrameFilter()
Definition: filter.h:13
boost::shared_ptr< FrameFilter > FrameFilterSharedPtr
Definition: filter.h:15
const std::vector< FrameFilterSharedPtr > filters_
Definition: filter.h:64
void filter(const Frame &frame)
Definition: filter.h:56
virtual bool pass(const can::Frame &frame) const =0
FrameRangeFilter(uint32_t min_id, uint32_t max_id, bool invert=false)
Definition: filter.h:35
FrameListener::ListenerConstSharedPtr FrameListenerConstSharedPtr
Definition: interface.h:130
CommInterface::FrameListenerConstSharedPtr listener_
Definition: filter.h:65
const uint32_t mask_
Definition: filter.h:28
FrameMaskFilter(uint32_t can_id, uint32_t mask=MASK_RELAXED, bool invert=false)
Definition: filter.h:21


socketcan_interface
Author(s): Mathias Lüdtke
autogenerated on Sat May 4 2019 02:40:41