kopia lustrzana https://github.com/jamescoxon/dl-fldigi
227 wiersze
4.9 KiB
C++
227 wiersze
4.9 KiB
C++
// ----------------------------------------------------------------------------
|
|
// Copyright (C) 2014
|
|
// David Freese, W1HKJ
|
|
//
|
|
// This file is part of fldigi
|
|
//
|
|
// fldigi is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// fldigi is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#ifndef SERIAL_H
|
|
#define SERIAL_H
|
|
|
|
#include <string>
|
|
void com_to_tty(std::string& port);
|
|
void tty_to_com(std::string& port);
|
|
|
|
#ifndef __MINGW32__
|
|
|
|
#include <termios.h>
|
|
|
|
class Cserial {
|
|
public:
|
|
Cserial();
|
|
~Cserial();
|
|
|
|
//Methods
|
|
bool OpenPort();
|
|
|
|
bool IsOpen() { return fd < 0 ? 0 : 1; };
|
|
void ClosePort();
|
|
|
|
void Device (std::string dev) { device = dev;};
|
|
std::string Device() { return device;};
|
|
|
|
void Baud(int b) { baud = b;};
|
|
int Baud() { return baud;};
|
|
|
|
void Timeout(int tm) { timeout = tm;}
|
|
int Timeout() { return timeout; }
|
|
|
|
void Retries(int r) { retries = r;}
|
|
int Retries() { return retries;}
|
|
|
|
void RTS(bool r){rts = r;}
|
|
bool RTS(){return rts;}
|
|
|
|
void RTSptt(bool b){rtsptt = b;}
|
|
bool RTSptt(){return rtsptt;}
|
|
|
|
void DTR(bool d){dtr = d;}
|
|
bool DTR(){return dtr;}
|
|
|
|
void DTRptt(bool b){dtrptt = b;}
|
|
bool DTRptt(){return dtrptt;}
|
|
|
|
void RTSCTS(bool b){rtscts = b;}
|
|
bool RTSCTS(){return rtscts;}
|
|
void SetPTT(bool b);
|
|
|
|
void RestoreTIO(bool b) { restore_tio = b; }
|
|
bool RestoreTIO() { return restore_tio; }
|
|
|
|
void Stopbits(int n) {stopbits = (n == 1 ? 1 : 2);}
|
|
int Stopbits() { return stopbits;}
|
|
|
|
int ReadBuffer (unsigned char *b, int nbr);
|
|
int WriteBuffer(unsigned char *str, int nbr);
|
|
void FlushBuffer();
|
|
|
|
|
|
private:
|
|
//Members
|
|
std::string device;
|
|
int fd;
|
|
int baud;
|
|
int speed;
|
|
struct termios oldtio, newtio;
|
|
int timeout;
|
|
int retries;
|
|
int status, origstatus;
|
|
bool dtr;
|
|
bool dtrptt;
|
|
bool rts;
|
|
bool rtsptt;
|
|
bool rtscts;
|
|
bool restore_tio;
|
|
int stopbits;
|
|
char bfr[2048];
|
|
//Methods
|
|
bool IOselect();
|
|
};
|
|
|
|
#else //__MINGW32__
|
|
|
|
#include <windows.h>
|
|
|
|
class Cserial {
|
|
public:
|
|
Cserial() {
|
|
rts = dtr = false;
|
|
rtsptt = dtrptt = false;
|
|
rtscts = false;
|
|
baud = CBR_9600;
|
|
stopbits = 2;
|
|
};
|
|
Cserial( std::string portname) {
|
|
device = portname;
|
|
Cserial();
|
|
// OpenPort();
|
|
};
|
|
virtual ~Cserial() {};
|
|
|
|
//Methods
|
|
BOOL OpenPort();
|
|
void ClosePort();
|
|
BOOL ConfigurePort(DWORD BaudRate,BYTE ByteSize,DWORD fParity,BYTE Parity,BYTE StopBits);
|
|
|
|
bool IsBusy() { return busyflag; };
|
|
void IsBusy(bool val) { busyflag = val; };
|
|
bool IsOpen() { return hComm == INVALID_HANDLE_VALUE ? 0 : 1; };
|
|
|
|
BOOL ReadByte(unsigned char &resp);
|
|
int ReadData (unsigned char *b, int nbr);
|
|
int ReadBuffer (unsigned char *b, int nbr) {
|
|
return ReadData (b,nbr);
|
|
}
|
|
|
|
BOOL WriteByte(unsigned char bybyte);
|
|
int WriteBuffer(unsigned char *str, int nbr);
|
|
|
|
BOOL SetCommunicationTimeouts(
|
|
DWORD ReadIntervalTimeout,
|
|
DWORD ReadTotalTimeoutMultiplier,
|
|
DWORD ReadTotalTimeoutConstant,
|
|
DWORD WriteTotalTimeoutMultiplier,
|
|
DWORD WriteTotalTimeoutConstant);
|
|
|
|
BOOL SetCommTimeout();
|
|
|
|
void Timeout(int tm) { timeout = tm; return; };
|
|
int Timeout() { return timeout; };
|
|
void FlushBuffer();
|
|
|
|
void Device (std::string dev) { device = dev;};
|
|
std::string Device() { return device;};
|
|
|
|
void Baud(int b) { baud = b;};
|
|
int Baud() { return baud;};
|
|
|
|
void Retries(int r) { retries = r;}
|
|
int Retries() { return retries;}
|
|
|
|
void RTS(bool r){rts = r;}
|
|
bool RTS(){return rts;}
|
|
|
|
void RTSptt(bool b){rtsptt = b;}
|
|
bool RTSptt(){return rtsptt;}
|
|
|
|
void DTR(bool d){dtr = d;}
|
|
bool DTR(){return dtr;}
|
|
|
|
void DTRptt(bool b){dtrptt = b;}
|
|
bool DTRptt(){return dtrptt;}
|
|
|
|
void RTSCTS(bool b){rtscts = b;}
|
|
bool RTSCTS(){return rtscts;}
|
|
void SetPTT(bool b);
|
|
|
|
void RestoreTIO(bool b) { restore_tio = b; }
|
|
bool RestoreTIO() { return restore_tio; }
|
|
|
|
void Stopbits(int n) {stopbits = (n == 1 ? 1 : 2);}
|
|
int Stopbits() { return stopbits;}
|
|
|
|
//Members
|
|
private:
|
|
std::string device;
|
|
//For use by CreateFile
|
|
HANDLE hComm;
|
|
|
|
//DCB Defined in WinBase.h
|
|
DCB dcb;
|
|
COMMTIMEOUTS CommTimeoutsSaved;
|
|
COMMTIMEOUTS CommTimeouts;
|
|
|
|
//Is the Port Ready?
|
|
BOOL bPortReady;
|
|
|
|
//Number of Bytes Written to port
|
|
DWORD nBytesWritten;
|
|
|
|
//Number of Bytes Read from port
|
|
DWORD nBytesRead;
|
|
|
|
//Number of bytes Transmitted in the cur session
|
|
DWORD nBytesTxD;
|
|
|
|
int timeout;
|
|
bool busyflag;
|
|
|
|
int baud;
|
|
int retries;
|
|
|
|
bool dtr;
|
|
bool dtrptt;
|
|
bool rts;
|
|
bool rtsptt;
|
|
bool rtscts;
|
|
bool restore_tio;
|
|
int stopbits;
|
|
};
|
|
|
|
#endif // __MINGW32__
|
|
|
|
#endif // SERIAL_H
|