plugin_cmd.h
1.5 KB
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
//Plugin
#include "plugin.h"
#include "plugin_hlpr.h"
BOOL RunCmd(HWND hParent, MTE_CMD cmd, mte_data_struct& dataRead, void* pIntData)
{
BOOL bRet = TRUE;
SMHandle handle = NULL;
do
{
handle = CreateShareMem(PLUGIN_NAME_MTE, sizeof(mte_data_struct));
if(NULL == handle)
{
bRet = FALSE;
break;
}
/* Write mte cmd flag*/
mte_data_struct data;
ZeroMemory(&data, sizeof(data));
data.cmd = cmd;
if(!Write(handle, (void*)(&data), sizeof(data)))
{
bRet = FALSE;
break;
}
/*Send a interrupt to MoDIS to notify it to write data*/
::SendMessage(hParent, PLUGIN_MSG, (WPARAM)PM_READ_READY, (LPARAM)pIntData);
/*Wait for "Write COMPLETE'" event from MoDIS*/
HANDLE handleEvent = CreateEventA(NULL, TRUE, FALSE, PLUGIN_EVENT_MTE);
while (TRUE)
{
DWORD dRet=::MsgWaitForMultipleObjects(1, &handleEvent, FALSE, INFINITE, QS_ALLINPUT);
if (WAIT_OBJECT_0+1 == dRet)
{
MSG msg;
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
break;
}
}
ResetEvent(handleEvent);
CloseHandle(handleEvent);
if(!bRet)
break;
/* Read mte data*/
ZeroMemory(&dataRead, sizeof(dataRead));
if(!Read(handle, (void*)(&dataRead), sizeof(dataRead)))
{
bRet = FALSE;
break;
}
/*Clear SM data*/
ZeroMemory(&data, sizeof(data));
if(!Write(handle, (void*)(&data), sizeof(data)))
{
bRet = FALSE;
break;
}
}while(0);
if(NULL != handle)
DestroyShareMem(handle);
return bRet;
}