📄 com.cpp
字号:
// com.cpp : Defines the entry point for the DLL application.
//
#include <windows.h>
#define LIBAPI extern "C" __declspec(dllexport)
#include "com.h"
//int OpenOrClose = 0;
///////////////////////////////////////////////////////////////////////////////
// 全局变量
BOOL g_bHasCreated[2];
HANDLE g_hComm[2];
OVERLAPPED g_osWrite[2];
BOOL forward(UINT nCommID, unsigned int n); //快速前进
BOOL sforward(UINT nCommID, unsigned int n); //慢速前进
BOOL back(UINT nCommID, unsigned int n); //快速后退
BOOL sback(UINT nCommID, unsigned int n); //慢速后退
BOOL right(UINT nCommID, unsigned int n); //顺时针旋转
BOOL left(UINT nCommID, unsigned int n); //逆时针旋转
BOOL nip(UINT nCommID); //镊子夹紧
BOOL loose(UINT nCommID); //镊子松开
///////////////////////////////////////////////////////////////////////////////
// DllMain
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
for(int i = 0; i < 2; i++)
{
g_bHasCreated[i] = FALSE;
g_hComm[i] = NULL;
}
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
// Create Comm
HRESULT SC_CreatCom(int n)
{
DCB dcb;
switch(n)
{
case 0:
{
if(g_bHasCreated)
break;
g_hComm[0] = CreateFile("COM1",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
if(g_hComm[0] == INVALID_HANDLE_VALUE)
return SC_FAILED;
if(!GetCommState(g_hComm[0], &dcb))
return SC_COM_ERROR_GETSTATE;
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if(!SetCommState(g_hComm[0], &dcb))
return SC_FAILED;
g_bHasCreated[0] = TRUE;
}
break;
case 1:
{
if(g_bHasCreated[1])
break;
g_hComm[1] = CreateFile("COM2",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
if(g_hComm[1] == INVALID_HANDLE_VALUE)
return SC_FAILED;
if(!GetCommState(g_hComm[1], &dcb))
return SC_COM_ERROR_GETSTATE;
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if(!SetCommState(g_hComm[1], &dcb))
return SC_FAILED;
g_bHasCreated[1] = TRUE;
}
break;
default:
return SC_COM_ERROR_NUM;
}
return SC_SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////
// Close Comm
HRESULT SC_CloseCom(UINT nCommID, LPVOID lpParam)
{
if(!CloseHandle(g_hComm[nCommID]))
return SC_FAILED;
g_bHasCreated[nCommID] = FALSE;
return SC_SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////
// Motion
HRESULT SC_Move(const UINT type, LPVOID lpParam)
{
LPMOVEPARAM lpMOVE = (LPMOVEPARAM)lpParam;
switch (type)
{
case SC_MOVE_FORWARD:
{
if (!forward(lpMOVE->nCommID, lpMOVE->n))
return SC_FAILED;
}
break;
case SC_MOVE_SFORWARD:
{
if (!sforward(lpMOVE->nCommID, lpMOVE->n))
return SC_FAILED;
}
break;
case SC_MOVE_BACK:
{
if (!back(lpMOVE->nCommID, lpMOVE->n))
return SC_FAILED;
}
break;
case SC_MOVE_SBACK:
{
if (!sback(lpMOVE->nCommID, lpMOVE->n))
return SC_FAILED;
}
break;
case SC_MOVE_RIGHT:
{
if (!right(lpMOVE->nCommID, lpMOVE->n))
return SC_FAILED;
}
break;
case SC_MOVE_LEFT:
{
if (!left(lpMOVE->nCommID, lpMOVE->n))
return SC_FAILED;
}
break;
case SC_MOVE_NIP:
{
if (!nip(lpMOVE->nCommID))
return SC_FAILED;
}
break;
case SC_MOVE_LOOSE:
{
if (!loose(lpMOVE->nCommID))
return SC_FAILED;
}
break;
default:
return SC_MOVE_ERROR;
}
return SC_SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////
// Read Buffer
HRESULT SC_ReadBuffer(UINT nCommID, char *InBuffer, LPVOID lpParam)
{
DWORD nBytesToRead = 4;
DWORD nBytesRead;
DWORD dwError;
COMSTAT cs;
ClearCommError(g_hComm, &dwError, &cs);
if(cs.cbInQue != 4)
return SC_FAILED;
if(!ReadFile(g_hComm[nCommID], InBuffer, nBytesToRead, &nBytesRead, &g_osWrite[nCommID]))
return SC_FAILED;
return SC_SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////
// Global Functions
BOOL forward(UINT nCommID, unsigned int n)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='F';
Tx[2]=0;
Tx[3]=0;
short int *temp=(short int*) &Tx[2];
*temp=n;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL sforward(UINT nCommID, unsigned int n)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='F';
Tx[2]=0;
Tx[3]=0;
short int *temp=(short int*) &Tx[2];
*temp=n;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL back(UINT nCommID, unsigned int n)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='B';
Tx[2]=0;
Tx[3]=0;
short int *temp=(short int*) &Tx[2];
*temp=n;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL sback(UINT nCommID, unsigned int n)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='F';
Tx[2]=0;
Tx[3]=0;
short int *temp=(short int*) &Tx[2];
*temp=n;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL right(UINT nCommID, unsigned int n)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='R';
Tx[2]=0;
Tx[3]=0;
short int *temp=(short int*) &Tx[2];
*temp=n;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL left(UINT nCommID, unsigned int n)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='L';
Tx[2]=0;
Tx[3]=0;
short int *temp=(short int*) &Tx[2];
*temp=n;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL nip(UINT nCommID)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='F';
Tx[2]=0;
Tx[3]=0;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
BOOL loose(UINT nCommID)
{
BOOL fState;
DWORD nBytesToWrite=4;
DWORD nBytesWritten;
char Tx[4];
Tx[0]='C';
Tx[1]='F';
Tx[2]=0;
Tx[3]=0;
fState = WriteFile(g_hComm[nCommID], Tx, nBytesToWrite, &nBytesWritten, &g_osWrite[nCommID]);
return fState;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -