|
#include "stdafx.h"
|
#include "ExternLightControlLCP.h"
|
|
#ifdef _DEBUG
|
#undef THIS_FILE
|
static char THIS_FILE[]=__FILE__;
|
#define new DEBUG_NEW
|
#endif
|
|
//////////////////////////////////////////////////////////////////////
|
// Construction/Destruction
|
//////////////////////////////////////////////////////////////////////
|
|
CExternLightControlLCP::CExternLightControlLCP()
|
{
|
m_hLightControl = NULL;
|
}
|
|
CExternLightControlLCP::~CExternLightControlLCP()
|
{
|
CloseControl();
|
}
|
|
BOOL CExternLightControlLCP::OpenControl(int nPort)
|
{
|
m_nPort = nPort;
|
|
DCB dcb;
|
|
CString strPort;
|
strPort.Format(_T("COM%d"), nPort);
|
|
m_hLightControl = CreateFile( strPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
if (m_hLightControl == INVALID_HANDLE_VALUE)
|
{
|
CloseHandle(m_hLightControl);
|
m_hLightControl = NULL;
|
return FALSE;
|
}
|
|
dcb.DCBlength = sizeof(DCB);
|
if (GetCommState(m_hLightControl,(LPDCB) &dcb))
|
{
|
dcb.DCBlength = sizeof(DCB);
|
dcb.BaudRate = CBR_9600;
|
dcb.ByteSize = 8;
|
dcb.fParity = FALSE;
|
dcb.Parity = NOPARITY;
|
// dcb.StopBits = 1;
|
dcb.fOutxCtsFlow = 0;
|
dcb.fOutxDsrFlow = 0;
|
dcb.fOutX = 0;
|
dcb.fInX = 0;
|
|
if (!SetCommState(m_hLightControl,(LPDCB) &dcb))
|
{
|
CloseHandle(m_hLightControl);
|
m_hLightControl = NULL;
|
return FALSE;
|
}
|
}
|
else
|
{
|
CloseHandle(m_hLightControl);
|
m_hLightControl = NULL;
|
return FALSE;
|
}
|
|
return TRUE;
|
}
|
|
BOOL CExternLightControlLCP::CloseControl()
|
{
|
if (m_hLightControl)
|
CloseHandle(m_hLightControl);
|
m_hLightControl = NULL;
|
|
return TRUE;
|
}
|
|
BOOL CExternLightControlLCP::SetLightControlValue(int nChannel, int nValue)
|
{
|
if (nChannel < 0 || nChannel > MAX_LAMP_CHANNEL)
|
return FALSE;
|
if (!m_hLightControl)
|
return FALSE;
|
|
|
CString tmp;
|
char Outbuf[10];
|
DWORD NumberOfBytesWritten;
|
|
//tmp.Format(_T("%c%cw%4.4u%c"), 0x02, nChannel+0x30, nValue, 0x03);
|
tmp.Format(_T("%c%cw%04d%c"), 0x02, nChannel+0x30, nValue, 0x03);
|
|
int nLength = tmp.GetLength();
|
ZeroMemory(Outbuf,sizeof(char)*10);
|
|
sprintf_s(Outbuf,"%c%c%c%c%c%c%c%c",tmp.GetAt(0),tmp.GetAt(1),tmp.GetAt(2),tmp.GetAt(3),tmp.GetAt(4),tmp.GetAt(5),tmp.GetAt(6),tmp.GetAt(7));
|
|
BOOL bRet = WriteFile( m_hLightControl,(LPCVOID) Outbuf,8,(LPDWORD) &NumberOfBytesWritten,NULL);
|
|
m_nLightValue = nValue;
|
|
return bRet;
|
}
|
|
BOOL CExternLightControlLCP::IsTurnOnLamp(int iIdxChannel)
|
{
|
|
return TRUE;
|
}
|
|
BOOL CExternLightControlLCP::TurnOnOffLamp(int nChannel,BOOL bOn)
|
{
|
if (nChannel < 0 || nChannel > MAX_LAMP_CHANNEL)
|
return FALSE;
|
if (!m_hLightControl)
|
return FALSE;
|
|
char Outbuf[10];
|
ZeroMemory(Outbuf,sizeof(char)*10);
|
|
Outbuf[0] = 0x02;
|
Outbuf[1] = nChannel+0x30;
|
if(bOn == TRUE)
|
Outbuf[2] = 'o';
|
else
|
Outbuf[2] = 'f';
|
Outbuf[3] = 0x03;
|
|
DWORD NumberOfBytesWritten;
|
BOOL bRet = WriteFile( m_hLightControl,(LPCVOID) Outbuf,4,(LPDWORD) &NumberOfBytesWritten,NULL);
|
|
return bRet;
|
}
|