Add support for .ini file,
Add support for extended messages (advanced protocol), Add handy command lines for Power, Volume in db, and Mute.
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[]=__FILE__;
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
@@ -25,23 +25,18 @@ static char THIS_FILE[]=__FILE__;
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
CSerialPort::CSerialPort()
|
||||
: m_PortHandle(INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CSerialPort::CSerialPort() : m_PortHandle(INVALID_HANDLE_VALUE) {
|
||||
|
||||
}
|
||||
|
||||
CSerialPort::~CSerialPort()
|
||||
{
|
||||
CSerialPort::~CSerialPort() {
|
||||
Close();
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Open(LPCTSTR PortName, uint32_t BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits, uint32_t DesiredAccess)
|
||||
{
|
||||
bool CSerialPort::Open(LPCTSTR PortName, uint32_t BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits, uint32_t DesiredAccess) {
|
||||
Close();
|
||||
m_PortHandle = CreateFile(PortName, DesiredAccess, 0, NULL, OPEN_EXISTING, 0, 0);
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DCB dcb;
|
||||
CString s;
|
||||
dcb.DCBlength = sizeof(dcb);
|
||||
@@ -67,7 +62,7 @@ BOOL CSerialPort::Open(LPCTSTR PortName, uint32_t BaudRate, BYTE ByteSize, BYTE
|
||||
dcb.fInX = 0;
|
||||
dcb.fOutX = 0;
|
||||
dcb.fDtrControl = DTR_CONTROL_DISABLE; //DTR and RTS 0
|
||||
dcb.fRtsControl = RTS_CONTROL_DISABLE;
|
||||
dcb.fRtsControl = RTS_CONTROL_DISABLE;
|
||||
|
||||
SetCommState(m_PortHandle, &dcb);
|
||||
|
||||
@@ -78,186 +73,116 @@ BOOL CSerialPort::Open(LPCTSTR PortName, uint32_t BaudRate, BYTE ByteSize, BYTE
|
||||
touts.WriteTotalTimeoutConstant = 1;
|
||||
touts.WriteTotalTimeoutMultiplier = 0;
|
||||
SetCommTimeouts(m_PortHandle, &touts);
|
||||
|
||||
|
||||
//SetCommMask (m_PortHandle, EV_CTS | EV_DSR | EV_RING | EV_RLSD);
|
||||
PurgeComm(m_PortHandle, PURGE_TXCLEAR | PURGE_RXCLEAR);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Open COM Error: %i\n", GetLastError());
|
||||
return FALSE; // Use GetLastError() to know the reason
|
||||
return true;
|
||||
} else {
|
||||
return false; // Use GetLastError() to know the reason
|
||||
}
|
||||
}
|
||||
|
||||
void CSerialPort::Close()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
void CSerialPort::Close() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
CloseHandle(m_PortHandle);
|
||||
m_PortHandle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CSerialPort::IsOpen()
|
||||
{
|
||||
bool CSerialPort::IsOpen() {
|
||||
return (m_PortHandle != INVALID_HANDLE_VALUE);
|
||||
}
|
||||
|
||||
uint32_t CSerialPort::Read(LPVOID Buffer, uint32_t BufferSize)
|
||||
{
|
||||
uint32_t CSerialPort::Read(LPVOID Buffer, uint32_t BufferSize) {
|
||||
DWORD Res(0);
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
ReadFile(m_PortHandle, Buffer, BufferSize, &Res, NULL);
|
||||
}
|
||||
return Res;
|
||||
return Res;
|
||||
}
|
||||
|
||||
uint32_t CSerialPort::Write(const LPVOID Buffer, uint32_t BufferSize)
|
||||
{
|
||||
uint32_t CSerialPort::Write(const LPVOID Buffer, uint32_t BufferSize) {
|
||||
DWORD Res(0);
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
(void)WriteFile(m_PortHandle, Buffer, BufferSize, &Res, NULL);
|
||||
}
|
||||
return Res;
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Get_CD_State()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Get_CD_State() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DWORD ModemStat;
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat))
|
||||
{
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat)) {
|
||||
return (ModemStat & MS_RLSD_ON) > 0; //Not sure
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Get_CTS_State()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Get_CTS_State() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DWORD ModemStat;
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat))
|
||||
{
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat)) {
|
||||
return (ModemStat & MS_CTS_ON) > 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Get_DSR_State()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Get_DSR_State() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DWORD ModemStat;
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat))
|
||||
{
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat)) {
|
||||
return (ModemStat & MS_DSR_ON) > 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Get_RI_State()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Get_RI_State() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DWORD ModemStat;
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat))
|
||||
{
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat)) {
|
||||
return (ModemStat & MS_RING_ON) > 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CSerialPort::Set_DTR_State(bool state) {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
if (0 == EscapeCommFunction(m_PortHandle, (state ? SETDTR : CLRDTR))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSerialPort::Set_DTR_State(BOOL state)
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
EscapeCommFunction(m_PortHandle, (state ? SETDTR : CLRDTR));
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Get_DTR_State()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Get_DTR_State() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DWORD ModemStat;
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat))
|
||||
{
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat)) {
|
||||
return (ModemStat & MS_DSR_ON) > 0; //Not sure
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CSerialPort::Set_RTS_State(BOOL state)
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Set_RTS_State(bool state) {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
if (0 == EscapeCommFunction(m_PortHandle, (state ? SETRTS : CLRRTS))) {
|
||||
printf("Set_RTS_State(%d) failed.\n", state ? 1 : 0);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL CSerialPort::Get_RTS_State()
|
||||
{
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
bool CSerialPort::Get_RTS_State() {
|
||||
if (m_PortHandle != INVALID_HANDLE_VALUE) {
|
||||
DWORD ModemStat;
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat))
|
||||
{
|
||||
if (GetCommModemStatus(m_PortHandle, &ModemStat)) {
|
||||
return (ModemStat & MS_CTS_ON) > 0; //Not sure
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -24,20 +24,20 @@
|
||||
class CSerialPort
|
||||
{
|
||||
public:
|
||||
void Set_RTS_State(BOOL state);
|
||||
void Set_DTR_State(BOOL state);
|
||||
BOOL Get_RTS_State();
|
||||
BOOL Get_DTR_State();
|
||||
BOOL Get_RI_State();
|
||||
BOOL Get_DSR_State();
|
||||
BOOL Get_CTS_State();
|
||||
BOOL Get_CD_State();
|
||||
bool Set_RTS_State(bool state);
|
||||
bool Set_DTR_State(bool state);
|
||||
bool Get_RTS_State();
|
||||
bool Get_DTR_State();
|
||||
bool Get_RI_State();
|
||||
bool Get_DSR_State();
|
||||
bool Get_CTS_State();
|
||||
bool Get_CD_State();
|
||||
virtual uint32_t Write(const LPVOID Buffer, uint32_t BufferSize);
|
||||
virtual uint32_t Read(LPVOID Buffer, uint32_t BufferSize);
|
||||
virtual BOOL IsOpen();
|
||||
virtual bool IsOpen();
|
||||
virtual void Close();
|
||||
// Use PortName usually "COM1:" ... "COM4:" note that the name must end by ":"
|
||||
virtual BOOL Open(LPCTSTR PortName, uint32_t BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits, uint32_t DesiredAccess = GENERIC_READ|GENERIC_WRITE);
|
||||
virtual bool Open(LPCTSTR PortName, uint32_t BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits, uint32_t DesiredAccess = GENERIC_READ|GENERIC_WRITE);
|
||||
CSerialPort();
|
||||
virtual ~CSerialPort();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user