diff options
author | Christian Gromm <christian.gromm@microchip.com> | 2016-06-21 14:14:04 +0200 |
---|---|---|
committer | Christian Gromm <christian.gromm@microchip.com> | 2016-06-21 14:14:04 +0200 |
commit | 860b3c0ccfb2756b8ed77523048952011b74a212 (patch) | |
tree | e0672fb5cf923dcf0a4a48a62a69011e1b72976a /K2LABI/ABI/ABIFilter.h | |
parent | 742bace60b9c0a0f583d8afe1097d029f468fa03 (diff) |
src: can-lin: initial source import
This patch adds the sources needed for the HVAC and iDrive applications.
Change-Id: I53148a5d11c34787dd11295939bbaf8702c64dcb
Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
Diffstat (limited to 'K2LABI/ABI/ABIFilter.h')
-rw-r--r-- | K2LABI/ABI/ABIFilter.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/K2LABI/ABI/ABIFilter.h b/K2LABI/ABI/ABIFilter.h new file mode 100644 index 0000000..ccdda8f --- /dev/null +++ b/K2LABI/ABI/ABIFilter.h @@ -0,0 +1,81 @@ +#pragma once + +#include "windows-adapter.h" +#include "K2LABI.h" +#include <vector> + +using namespace K2L::Automotive::ABI; + +class IFilterEntry +{ +public: + virtual ~IFilterEntry(){} + + virtual unsigned short Handle() = 0; + virtual bool Match(unsigned int id) = 0; +}; + +class IntervalIdFilterEntry : public IFilterEntry +{ +private: + IntervalIdFilterEntry(){} + + unsigned short m_handle; + unsigned int m_min; + unsigned int m_max; +public: + IntervalIdFilterEntry(unsigned short handle, unsigned int min, unsigned int max); + virtual ~IntervalIdFilterEntry(){} + + unsigned short Handle(); + bool Match(unsigned int id); +}; + +class MaskedIdFilterEntry : public IFilterEntry +{ +private: + MaskedIdFilterEntry(){} + + unsigned short m_handle; + unsigned int m_id; + unsigned int m_mask; +public: + MaskedIdFilterEntry(unsigned short handle, unsigned int id, unsigned int mask); + virtual ~MaskedIdFilterEntry(){} + + unsigned short Handle(); + bool Match(unsigned int id); +}; + +class CIdFilter +{ +private: + std::vector<IFilterEntry*> m_filters; + CRITICAL_SECTION m_criticalSection; + +public: + CIdFilter(); + virtual ~CIdFilter(); + + void AddIntervalFilter(unsigned short handle, unsigned int min, unsigned int max); + void AddMaskedFilter(unsigned short handle, unsigned int id, unsigned int mask); + void RemoveFilter(unsigned short handle); + + bool Match(unsigned int id); +}; + +class CABIFilter +{ +private: + CIdFilter* m_filters[256]; + +public: + CABIFilter(); + virtual ~CABIFilter(); + + void AddIntervalFilter(Bus bus, unsigned short handle, unsigned int min, unsigned int max); + void AddMaskedFilter(Bus bus, unsigned short handle, unsigned int id, unsigned int mask); + void RemoveFilter(unsigned short handle); + + bool Match(Bus bus, unsigned int id); +}; |