Thread: [Com0com-cvs] com2tcp utils.cxx, 1.3, 1.4 utils.h, 1.4, 1.5 com2tcp.cpp, 1.9, 1.10
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2006-11-16 12:51:52
|
Update of /cvsroot/com0com/com2tcp In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv11266 Modified Files: utils.cxx utils.h com2tcp.cpp Log Message: Added ability to set COM port parameters Index: com2tcp.cpp =================================================================== RCS file: /cvsroot/com0com/com2tcp/com2tcp.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** com2tcp.cpp 25 Nov 2005 13:49:23 -0000 1.9 --- com2tcp.cpp 16 Nov 2006 12:51:43 -0000 1.10 *************** *** 2,6 **** * $Id$ * ! * Copyright (c) 2005 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify --- 2,6 ---- * $Id$ * ! * Copyright (c) 2005-2006 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.10 2006/11/16 12:51:43 vfrolov + * Added ability to set COM port parameters + * * Revision 1.9 2005/11/25 13:49:23 vfrolov * Implemented --interface option for client mode *************** *** 47,51 **** * Initial revision * - * */ --- 50,53 ---- *************** *** 523,527 **** } /////////////////////////////////////////////////////////////// ! static HANDLE OpenC0C(const char *pPath, BOOL ignoreDSR) { HANDLE hC0C = CreateFile(pPath, --- 525,529 ---- } /////////////////////////////////////////////////////////////// ! static HANDLE OpenC0C(const char *pPath, const ComParams &comParams) { HANDLE hC0C = CreateFile(pPath, *************** *** 545,556 **** } ! dcb.BaudRate = CBR_19200; ! dcb.ByteSize = 8; ! dcb.Parity = NOPARITY; ! dcb.StopBits = ONESTOPBIT; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; ! dcb.fDsrSensitivity = !ignoreDSR; dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; dcb.fDtrControl = DTR_CONTROL_ENABLE; --- 547,565 ---- } ! if (comParams.BaudRate() > 0) ! dcb.BaudRate = (DWORD)comParams.BaudRate(); ! ! if (comParams.ByteSize() > 0) ! dcb.ByteSize = (BYTE)comParams.ByteSize(); ! ! if (comParams.Parity() >= 0) ! dcb.Parity = (BYTE)comParams.Parity(); ! ! if (comParams.StopBits() >= 0) ! dcb.StopBits = (BYTE)comParams.StopBits(); dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; ! dcb.fDsrSensitivity = !comParams.IgnoreDSR(); dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; dcb.fDtrControl = DTR_CONTROL_ENABLE; *************** *** 593,597 **** } ! printf("OpenC0C(\"%s\") - OK\n", pPath); return hC0C; --- 602,611 ---- } ! printf("OpenC0C(\"%s\", baud=%ld, data=%ld, parity=%s, stop=%s) - OK\n", ! pPath, ! (long)dcb.BaudRate, ! (long)dcb.ByteSize, ! ComParams::ParityStr(dcb.Parity), ! ComParams::StopBitsStr(dcb.StopBits)); return hC0C; *************** *** 700,704 **** static int tcp2com( const char *pPath, ! BOOL ignoreDSR, const char *pIF, const char *pPort, --- 714,718 ---- static int tcp2com( const char *pPath, ! const ComParams &comParams, const char *pIF, const char *pPort, *************** *** 722,729 **** break; ! HANDLE hC0C = OpenC0C(pPath, ignoreDSR); if (hC0C != INVALID_HANDLE_VALUE) { ! InOut(hC0C, hSock, protocol, ignoreDSR, hSockListen); CloseHandle(hC0C); } --- 736,743 ---- break; ! HANDLE hC0C = OpenC0C(pPath, comParams); if (hC0C != INVALID_HANDLE_VALUE) { ! InOut(hC0C, hSock, protocol, comParams.IgnoreDSR(), hSockListen); CloseHandle(hC0C); } *************** *** 765,769 **** static int com2tcp( const char *pPath, ! BOOL ignoreDSR, const char *pIF, const char *pAddr, --- 779,783 ---- static int com2tcp( const char *pPath, ! const ComParams &comParams, const char *pIF, const char *pAddr, *************** *** 772,776 **** const BYTE *pAwakSeq) { ! HANDLE hC0C = OpenC0C(pPath, ignoreDSR); if (hC0C == INVALID_HANDLE_VALUE) { --- 786,790 ---- const BYTE *pAwakSeq) { ! HANDLE hC0C = OpenC0C(pPath, comParams); if (hC0C == INVALID_HANDLE_VALUE) { *************** *** 778,782 **** } ! while (WaitComReady(hC0C, ignoreDSR, pAwakSeq)) { SOCKET hSock = Connect(pIF, pAddr, pPort); --- 792,796 ---- } ! while (WaitComReady(hC0C, comParams.IgnoreDSR(), pAwakSeq)) { SOCKET hSock = Connect(pIF, pAddr, pPort); *************** *** 784,788 **** break; ! InOut(hC0C, hSock, protocol, ignoreDSR); Disconnect(hSock); --- 798,802 ---- break; ! InOut(hC0C, hSock, protocol, comParams.IgnoreDSR()); Disconnect(hSock); *************** *** 805,809 **** fprintf(stderr, " --telnet - use Telnet protocol.\n"); fprintf(stderr, " --terminal <type> - use terminal <type> (RFC 1091).\n"); ! fprintf(stderr, " --ignore-dsr - ignore DSR state.\n"); fprintf(stderr, "\n"); fprintf(stderr, "Client mode options:\n"); --- 819,847 ---- fprintf(stderr, " --telnet - use Telnet protocol.\n"); fprintf(stderr, " --terminal <type> - use terminal <type> (RFC 1091).\n"); ! fprintf(stderr, " --help - show this help.\n"); ! fprintf(stderr, "\n"); ! fprintf(stderr, "COM port options:\n"); ! fprintf(stderr, " --baud <b> - set baud rate to <b> (default is %ld),\n", ! (long)ComParams().BaudRate()); ! fprintf(stderr, " where <b> is %s.\n", ! ComParams::BaudRateLst()); ! fprintf(stderr, " --data <d> - set data bits to <d> (default is %ld), where <d> is\n", ! (long)ComParams().ByteSize()); ! fprintf(stderr, " %s.\n", ! ComParams::ByteSizeLst()); ! fprintf(stderr, " --parity <p> - set parity to <p> (default is %s), where <p> is\n", ! ComParams::ParityStr(ComParams().Parity())); ! fprintf(stderr, " %s.\n", ! ComParams::ParityLst()); ! fprintf(stderr, " --stop <s> - set stop bits to <s> (default is %s), where <s> is\n", ! ComParams::StopBitsStr(ComParams().StopBits())); ! fprintf(stderr, " %s.\n", ! ComParams::StopBitsLst()); ! fprintf(stderr, " --ignore-dsr - ignore DSR state (do not wait DSR to be ON before\n"); ! fprintf(stderr, " connecting to host, do not close connection after\n"); ! fprintf(stderr, " DSR is OFF and do not ignore any bytes received\n"); ! fprintf(stderr, " while DSR is OFF).\n"); ! fprintf(stderr, "\n"); ! fprintf(stderr, " The value d[efault] above means to use current COM port settings.\n"); fprintf(stderr, "\n"); fprintf(stderr, "Client mode options:\n"); *************** *** 825,829 **** const char *pIF = NULL; char **pArgs = &argv[1]; ! BOOL ignoreDSR = FALSE; while (argc > 1) { --- 863,867 ---- const char *pIF = NULL; char **pArgs = &argv[1]; ! ComParams comParams; while (argc > 1) { *************** *** 831,834 **** --- 869,875 ---- break; + if (!strcmp(*pArgs, "--help")) { + Usage(argv[0]); + } else if (!strcmp(*pArgs, "--telnet")) { protocol = prTelnet; *************** *** 836,839 **** --- 877,888 ---- argc--; } else + if (!strcmp(*pArgs, "--ignore-dsr")) { + pArgs++; + argc--; + comParams.SetIgnoreDSR(TRUE); + } else + if (argc < 3) { + Usage(argv[0]); + } else if (!strcmp(*pArgs, "--terminal")) { pArgs++; *************** *** 843,850 **** argc--; } else ! if (!strcmp(*pArgs, "--ignore-dsr")) { pArgs++; argc--; - ignoreDSR = TRUE; } else if (!strcmp(*pArgs, "--awak-seq")) { --- 892,928 ---- argc--; } else ! if (!strcmp(*pArgs, "--baud")) { ! pArgs++; ! argc--; ! comParams.SetBaudRate(*pArgs); ! pArgs++; ! argc--; ! } else ! if (!strcmp(*pArgs, "--data")) { ! pArgs++; ! argc--; ! comParams.SetByteSize(*pArgs); ! pArgs++; ! argc--; ! } else ! if (!strcmp(*pArgs, "--parity")) { ! pArgs++; ! argc--; ! if (!comParams.SetParity(*pArgs)) { ! fprintf(stderr, "Unknown parity value %s\n", *pArgs); ! exit(1); ! } ! pArgs++; ! argc--; ! } else ! if (!strcmp(*pArgs, "--stop")) { ! pArgs++; ! argc--; ! if (!comParams.SetStopBits(*pArgs)) { ! fprintf(stderr, "Unknown stop bits value %s\n", *pArgs); ! exit(1); ! } pArgs++; argc--; } else if (!strcmp(*pArgs, "--awak-seq")) { *************** *** 863,867 **** } else { fprintf(stderr, "Unknown option %s\n", *pArgs); ! Usage(argv[0]); } } --- 941,945 ---- } else { fprintf(stderr, "Unknown option %s\n", *pArgs); ! exit(1); } } *************** *** 888,894 **** if (argc == 4) ! res = com2tcp(pArgs[0], ignoreDSR, pIF, pArgs[1], pArgs[2], *pProtocol, pAwakSeq); else ! res = tcp2com(pArgs[0], ignoreDSR, pIF, pArgs[1], *pProtocol); delete pProtocol; --- 966,972 ---- if (argc == 4) ! res = com2tcp(pArgs[0], comParams, pIF, pArgs[1], pArgs[2], *pProtocol, pAwakSeq); else ! res = tcp2com(pArgs[0], comParams, pIF, pArgs[1], *pProtocol); delete pProtocol; Index: utils.cxx =================================================================== RCS file: /cvsroot/com0com/com2tcp/utils.cxx,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** utils.cxx 3 Oct 2005 13:44:17 -0000 1.3 --- utils.cxx 16 Nov 2006 12:51:43 -0000 1.4 *************** *** 2,6 **** * $Id$ * ! * Copyright (c) 2005 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify --- 2,6 ---- * $Id$ * ! * Copyright (c) 2005-2006 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.4 2006/11/16 12:51:43 vfrolov + * Added ability to set COM port parameters + * * Revision 1.3 2005/10/03 13:44:17 vfrolov * Added Clean() method *************** *** 29,33 **** * Initial revision * - * */ --- 32,35 ---- *************** *** 181,182 **** --- 183,267 ---- } /////////////////////////////////////////////////////////////// + ComParams::ComParams() + : baudRate(CBR_19200), + byteSize(8), + parity(NOPARITY), + stopBits(ONESTOPBIT), + ignoreDSR(FALSE) + { + } + + BOOL ComParams::SetParity(const char *pParity) + { + switch (*pParity) { + case 'n': parity = NOPARITY; break; + case 'o': parity = ODDPARITY; break; + case 'e': parity = EVENPARITY; break; + case 'm': parity = MARKPARITY; break; + case 's': parity = SPACEPARITY; break; + case 'd': parity = -1; break; + default : return FALSE; + } + return TRUE; + } + + BOOL ComParams::SetStopBits(const char *pStopBits) + { + switch (*pStopBits) { + case '1': + if ((pStopBits[1] == '.' || pStopBits[1] == ',') && pStopBits[2] == '5') + stopBits = ONE5STOPBITS; + else + stopBits = ONESTOPBIT; + break; + case '2': stopBits = TWOSTOPBITS; break; + case 'd': stopBits = -1; break; + default : return FALSE; + } + return TRUE; + } + + const char *ComParams::ParityStr(int parity) + { + switch (parity) { + case NOPARITY: return "no"; + case ODDPARITY: return "odd"; + case EVENPARITY: return "even"; + case MARKPARITY: return "mark"; + case SPACEPARITY: return "space"; + case -1: return "default"; + } + return "?"; + } + + const char *ComParams::StopBitsStr(int stopBits) + { + switch (stopBits) { + case ONESTOPBIT: return "1"; + case ONE5STOPBITS: return "1.5"; + case TWOSTOPBITS: return "2"; + case -1: return "default"; + } + return "?"; + } + + const char *ComParams::BaudRateLst() + { + return "positive number or d[efault]"; + } + + const char *ComParams::ByteSizeLst() + { + return "positive number or d[efault]"; + } + + const char *ComParams::ParityLst() + { + return "n[o], o[dd], e[ven], m[ark], s[pace] or d[efault]"; + } + + const char *ComParams::StopBitsLst() + { + return "1, 1.5, 2 or d[efault]"; + } + /////////////////////////////////////////////////////////////// Index: utils.h =================================================================== RCS file: /cvsroot/com0com/com2tcp/utils.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** utils.h 3 Oct 2005 13:44:17 -0000 1.4 --- utils.h 16 Nov 2006 12:51:43 -0000 1.5 *************** *** 2,6 **** * $Id$ * ! * Copyright (c) 2005 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify --- 2,6 ---- * $Id$ * ! * Copyright (c) 2005-2006 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.5 2006/11/16 12:51:43 vfrolov + * Added ability to set COM port parameters + * * Revision 1.4 2005/10/03 13:44:17 vfrolov * Added Clean() method *************** *** 32,36 **** * Initial revision * - * */ --- 35,38 ---- *************** *** 120,123 **** --- 122,158 ---- }; /////////////////////////////////////////////////////////////// + class ComParams + { + public: + ComParams(); + + void SetBaudRate(const char *pBaudRate) { baudRate = atol(pBaudRate); } + void SetByteSize(const char *pByteSize) { byteSize = atoi(pByteSize); } + BOOL SetParity(const char *pParity); + BOOL SetStopBits(const char *pStopBits); + void SetIgnoreDSR(BOOL val) { ignoreDSR = val; } + + static const char *ParityStr(int parity); + static const char *StopBitsStr(int stopBits); + + static const char *BaudRateLst(); + static const char *ByteSizeLst(); + static const char *ParityLst(); + static const char *StopBitsLst(); + + long BaudRate() const { return baudRate; } + int ByteSize() const { return byteSize; } + int Parity() const { return parity; } + int StopBits() const { return stopBits; } + BOOL IgnoreDSR() const { return ignoreDSR; } + + private: + long baudRate; + int byteSize; + int parity; + int stopBits; + BOOL ignoreDSR; + }; + /////////////////////////////////////////////////////////////// #endif // _UTILS_H |