1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*******************************************************************************
* Copyright (C) ST-Ericsson SA 2011
* License terms: 3-clause BSD license
******************************************************************************/
#ifndef _LCMINTERFACE_H_
#define _LCMINTERFACE_H_
#include "t_communication_service.h"
#include "t_bulk_protocol.h"
#include "t_a2_protocol.h"
#ifdef _WIN32
#include "WinApiWrappers.h"
#else
#include "LinuxApiWrappers.h"
typedef void *HMODULE;
#endif
typedef ErrorCode_e(*CommunicationInitialize_t)(void *Object_p, Communication_t **Communication_pp, Family_t Family, HashDevice_t *HashDevice_p, CommunicationDevice_t *CommunicationDevice_p, Do_CEH_Call_t CommandCallback_p, BuffersInterface_t *Buffers_p, TimersInterface_t *Timers_p, QueueInterface_t *Queue_p);
typedef ErrorCode_e(*CommunicationShutdown_t)(Communication_t **Communication_pp);
typedef ErrorCode_e(*CommunicationPoll_t)(Communication_t *Communication_p);
typedef ErrorCode_e(*CommunicationSetFamily_t)(Communication_t *Communication_p, Family_t Family, Do_CEH_Call_t CEHCallback);
typedef ErrorCode_e(*CommunicationSend_t)(Communication_t *Communication_p, void *InputData_p);
typedef ErrorCode_e(*CommunicationSetProtocolTimeouts_t)(Communication_t *Communication_p, void *TimeoutData_p);
typedef ErrorCode_e(*CommunicationGetProtocolTimeouts_t)(Communication_t *Communication_p, void *TimeoutData_p);
typedef char*(*CommunicationGetVersion_t)(Communication_t *Communication_p);
typedef ErrorCode_e(*CommunicationCancelReceiver_t)(Communication_t *Communication_p, uint8 PacketsBeforeTransferStop);
typedef ErrorCode_e(*R15CommandSend_t)(Communication_t *Communication_p, CommandData_t *CmdData_p);
typedef ErrorCode_e(*R15CommandResetSessionCounters_t)(const Communication_t *const Communication_p);
typedef ErrorCode_e(*R15BulkStartSession_t)(Communication_t *Communication_p, TL_BulkVectorList_t *BulkVector_p, const uint64 Offset);
typedef ErrorCode_e(*R15BulkCloseSession_t)(Communication_t *Communication_p, TL_BulkVectorList_t *BulkVector_p);
typedef TL_BulkVectorList_t*(*R15BulkCreateVector_t)(const Communication_t *const Communication_p, const uint32 BulkVector, uint32 Length, const uint32 BuffSize, TL_BulkVectorList_t *CreatedBulkVector_p);
typedef TL_BulkSessionState_t (*R15BulkGetStatusSession_t)(const Communication_t *const Communication_p, const TL_BulkVectorList_t *BulkVector_p);
typedef uint32(*R15BulkDestroyVector_t)(const Communication_t *const Communication_p, TL_BulkVectorList_t *BulkVector_p, boolean ReqReleaseBuffer);
typedef uint32(*R15BulkOpenSession_t)(const Communication_t *const Communication_p, const uint16 SessionId, const TL_SessionMode_t Mode, uint32 Length);
typedef void (*R15BulkSetCallbacks_t)(Communication_t *Communication_p, void *BulkCommandCallback_p, void *BulkDataCallback_p, void *BulkDataEndOfDump_p);
typedef void (*R15BulkBuffersRelease_t)(Communication_t *Communication_p, void *BulkBuffersRelease_p);
typedef ErrorCode_e(*A2CommandSend_t)(Communication_t *Communication_p, A2_CommandData_t *CmdData_p);
typedef void (*A2SpeedflashStart_t)(Communication_t *Communication_p);
typedef void (*A2SpeedflashSetLastBlock_t)(Communication_t *Communication_p);
typedef ErrorCode_e(*A2SpeedflashWriteBlock_t)(Communication_t *Communication_p, const void *Buffer, const size_t BufferSize);
typedef struct {
CommunicationInitialize_t Initialize_Fn;
CommunicationShutdown_t Shutdown_Fn;
CommunicationPoll_t Poll_Fn;
CommunicationSetFamily_t SetFamily_Fn;
CommunicationSend_t Send_Fn;
CommunicationSetProtocolTimeouts_t SetProtocolTimeouts_Fn;
CommunicationGetProtocolTimeouts_t GetProtocolTimeouts_Fn;
CommunicationGetVersion_t GetVersion_Fn;
CommunicationCancelReceiver_t CancelReceiver_Fn;
} CommunicationInterface_t;
typedef struct {
R15CommandSend_t Send_Fn;
R15CommandResetSessionCounters_t ResetSessionCounters_Fn;
} R15CommandInterface_t;
typedef struct {
R15BulkStartSession_t StartSession_Fn;
R15BulkCloseSession_t CloseSession_Fn;
R15BulkCreateVector_t CreateVector_Fn;
R15BulkGetStatusSession_t GetStatusSession_Fn;
R15BulkDestroyVector_t DestroyVector_Fn;
R15BulkOpenSession_t OpenSession_Fn;
R15BulkSetCallbacks_t SetCallbacks_Fn;
R15BulkBuffersRelease_t SetBuffersRelease_Fn;
} R15BulkInterface_t;
typedef struct {
A2CommandSend_t Send_Fn;
A2SpeedflashStart_t SpeedflashStart_Fn;
A2SpeedflashSetLastBlock_t SpeedflashSetLastBlock_Fn;
A2SpeedflashWriteBlock_t SpeedflashWriteBlock_Fn;
} A2CommandInterface_t;
typedef enum {
UNKNOWN_LCM = 0,
LDR_LCM = 1,
PC_LCM = 2
} LCM_t;
class LcmInterface
{
public:
LcmInterface();
virtual ~LcmInterface();
ErrorCode_e CommunicationInitialize(void *Object_p, Family_t Family, HashDevice_t *HashDevice_p, CommunicationDevice_t *CommunicationDevice_p, Do_CEH_Call_t CommandCallback_p, BuffersInterface_t *Buffers_p, TimersInterface_t *Timers_p, QueueInterface_t *Queue_p);
ErrorCode_e CommunicationPoll();
ErrorCode_e CommunicationSend(void *InputData_p);
ErrorCode_e CommunicationSetFamily(Family_t family, Do_CEH_Call_t CEHCallback);
ErrorCode_e CommunicationSetProtocolTimeouts(void *TimeoutData_p);
ErrorCode_e CommunicationGetProtocolTimeouts(void *TimeoutData_p);
ErrorCode_e CommunicationCheckVersion(char *LCMVersion_p, LCM_t LCM_type);
ErrorCode_e CommunicationShutdown();
ErrorCode_e CommunicationCancelReceiver(uint8 PacketsBeforeReceiverStop);
ErrorCode_e CommandSend(CommandData_t *CmdData_p);
ErrorCode_e CommandResetSessionCounters();
void BulkSetCallbacks(void *BulkCommandCallback_p, void *BulkDataCallback_p, void *BulkDataEndOfDump_p);
void BulkBuffersRelease(void *BulkBufferRelease_p);
uint32 BulkOpenSession(const uint16 SessionId, const TL_SessionMode_t Mode, uint32 Length);
TL_BulkVectorList_t *BulkCreateVector(const uint32 BulkVector, uint32 Length, const uint32 BuffSize, TL_BulkVectorList_t *CreatedBulkVector_p);
ErrorCode_e BulkStartSession(TL_BulkVectorList_t *BulkVector_p, const uint64 Offset);
uint32 BulkDestroyVector(TL_BulkVectorList_t *BulkVector_p, boolean ReqReleaseBuffer);
ErrorCode_e BulkCloseSession(TL_BulkVectorList_t *BulkVector_p);
ErrorCode_e A2CommandSend(A2_CommandData_t *CmdData_p);
void A2SpeedflashStart();
void A2SpeedflashSetLastBlock();
ErrorCode_e A2SpeedflashWriteBlock(const void *Buffer, const size_t BufferSize);
void *getLCMContext() {
return m_pCommunication;
}
private:
Communication_t *m_pCommunication;
ErrorCode_e lcmError_;
public:
static void SetLCMLibPath(const char *lcmLibPath);
static int LoadLCMLibrary();
static void CloseLCMLibrary();
private:
static CommunicationInterface_t Communication;
static R15CommandInterface_t R15Command;
static R15BulkInterface_t R15Bulk;
static A2CommandInterface_t A2Command;
static HMODULE m_hDLL;
static char *m_pchLCMLibPath;
static CCriticalSectionObject m_CriticalSection;
};
#endif // _LCMINTERFACE_H_
|