summaryrefslogtreecommitdiffstats
path: root/K2LABI/ABI/ABIFilter.h
diff options
context:
space:
mode:
authorChristian Gromm <christian.gromm@microchip.com>2016-06-21 14:14:04 +0200
committerChristian Gromm <christian.gromm@microchip.com>2016-06-21 14:14:04 +0200
commit860b3c0ccfb2756b8ed77523048952011b74a212 (patch)
treee0672fb5cf923dcf0a4a48a62a69011e1b72976a /K2LABI/ABI/ABIFilter.h
parent742bace60b9c0a0f583d8afe1097d029f468fa03 (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.h81
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);
+};