#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; }