#include "stdafx.h" #include "ExternLightControlAKPNV.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #define ASCII_LF 0x0A #define ASCII_CR 0x0D ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CExternLightControlAKPNV::CExternLightControlAKPNV() { m_hLightControl = NULL; } CExternLightControlAKPNV::~CExternLightControlAKPNV() { CloseControl(); } BOOL CExternLightControlAKPNV::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 CExternLightControlAKPNV::CloseControl() { if (m_hLightControl) CloseHandle(m_hLightControl); m_hLightControl = NULL; return TRUE; } BOOL CExternLightControlAKPNV::SetLightControlValue(int nChannel, int nValue) { if (nChannel < 0 || nChannel > MAX_LAMP_CHANNEL) return FALSE; if (!m_hLightControl) return FALSE; int nHigh = nValue / 16; int nLow = nValue % 16; CString hex("0123456789ABCDEF"); char Data[50]; memset(&Data[0],0x00,sizeof(Data)); sprintf_s(Data, "C%c%c%c%c%c", hex.GetAt(nChannel+1), hex.GetAt(nHigh), hex.GetAt(nLow), ASCII_CR, ASCII_LF); DWORD NumberOfBytesWritten; BOOL bRet = WriteFile( m_hLightControl,(LPCVOID) Data,6,(LPDWORD) &NumberOfBytesWritten,NULL); m_nLightValue = nValue; return bRet; } BOOL CExternLightControlAKPNV::IsTurnOnLamp(int iIdxChannel) { return TRUE; } BOOL CExternLightControlAKPNV::TurnOnOffLamp(int nChannel,BOOL bOn) { if (nChannel < 0 || nChannel > MAX_LAMP_CHANNEL) return FALSE; if (!m_hLightControl) return FALSE; char Data[50]; memset(&Data[0],0x00,sizeof(Data)); if(bOn == TRUE) sprintf_s(Data, "AP11%c%c", ASCII_CR, ASCII_LF); else sprintf_s(Data, "AP00%c%c", ASCII_CR, ASCII_LF); DWORD NumberOfBytesWritten; BOOL bRet = WriteFile( m_hLightControl,(LPCVOID) Data,6,(LPDWORD) &NumberOfBytesWritten,NULL); return bRet; }