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/ABI.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/ABI.h')
-rw-r--r-- | K2LABI/ABI/ABI.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/K2LABI/ABI/ABI.h b/K2LABI/ABI/ABI.h new file mode 100644 index 0000000..791bb3b --- /dev/null +++ b/K2LABI/ABI/ABI.h @@ -0,0 +1,80 @@ +#pragma once +#include "windows-adapter.h" +#include "K2LABI.h" +#include "K2LIPC.h" +#include "SLock.h" +#include "ABIFilter.h" +#include "SEvent.h" +#define MAX_CONTEXT_OBJECT 256 + +using namespace K2L::Automotive::ABI; +using namespace K2L::Automotive::IPC; + +class CABI : public IABI, public IIPCListener +{ +public: + CABI(); + ~CABI(); + + int Init (AbiIpcDevice* pInitData); + int Init (AbiIpcDevice* pInitData, int prio); + int Deinit (void); + void Start (IABIListener* pListener); + void Stop (void); + void RegisterBusContext (Bus bus, void* context); + void UnregisterBusContext (Bus bus); + void* GetBusContext (Bus bus); + bool IsSpyMode (void); + void SetSpyMode (bool bSpyMode); + BYTE* SendRequest(BYTE ifc, BYTE function, BYTE* data, int len, int& resultLen, BYTE& errorCode); + BYTE* SendRequest(BYTE ifc, BYTE function, BYTE* data, int len, int& resultLen, BYTE& errorCode, int timeout); + void EndRequest(); + + void AddIdIntervalFilter (Bus bus, unsigned short handle, unsigned int minId, unsigned int maxId); + void AddMaskedIdFilter (Bus bus, unsigned short handle, unsigned int id, unsigned int mask); + void RemoveFilter (unsigned short handle); + + void OnMessage(IIpc* pIpc, BYTE channel, BYTE errorCode, BYTE* pPacket, int nLen); + void OnError(IIpc* pIpc); + void OnMessageLost(IIpc* pIpc); +public: + //Will be accessed by the IPC receive callback, which is in static context + IIpc* m_pIpcCommands; + IIpc* m_pIpcEvents; + +private: + inline void OnCommandResponse(IIpc* pIpc, BYTE channel, BYTE errorCode, BYTE* pPacket, int nLen); + inline void OnEvent(IIpc* pIpc, BYTE channel, BYTE errorCode, BYTE* pPacket, int nLen); + + inline void DecodeCommon(BYTE* pPacket, int nLen, BYTE channel); + inline void DecodeCanChannels(BYTE* pPacket, int nLen, Bus bus, BYTE protocol, BYTE eventType); + inline void DecodeMostChannels(BYTE* pPacket, int nLen, Bus bus, BYTE protocol, BYTE eventType); + inline void DecodeLinChannels(BYTE* pPacket, int nLen, Bus bus, BYTE protocol, BYTE eventType); + inline void DecodeFlexRayChannels(BYTE* pPacket, int nLen, Bus bus, BYTE protocol, BYTE eventType); + inline void DecodeRelayChannels(BYTE* pPacket, int nLen, Bus bus, BYTE protocol, BYTE eventType); + inline void DecodeMostEthernetChannels(BYTE* pPacket, int nLen, Bus bus, BYTE protocol, BYTE eventType); + + inline int Init(); + inline BYTE ReadByte(BYTE*& pBuffer); + inline unsigned short ReadUInt16(BYTE*& pBuffer); + inline unsigned long ReadUInt32(BYTE*& pBuffer); + inline unsigned long long ReadUInt64(BYTE*& pBuffer); +private: + AbiIpcDevice* m_abiDevice; + + IABIListener* m_pAbiListener; + bool m_bStarted; + bool m_bSpyMode; + void* m_objectMap[MAX_CONTEXT_OBJECT]; + + CEvent m_requestEvent; + CLock m_lock; + + BYTE m_errorCode; + BYTE* m_pResult; + int m_nResultLength; + + CABIFilter m_filter; + + DWORD m_dwUniqueId; +}; |