MSVC++ portability changes by Bernie Bright:
Lib/Serial/serial.[ch]xx: Initial Windows support - incomplete. Simulator/Astro/stars.cxx: typo? included <stdio> instead of <cstdio> Simulator/Cockpit/hud.cxx: Added Standard headers Simulator/Cockpit/panel.cxx: Redefinition of default parameter Simulator/Flight/flight.cxx: Replaced cout with FG_LOG. Deleted <stdio.h> Simulator/Main/fg_init.cxx: Simulator/Main/GLUTmain.cxx: Simulator/Main/options.hxx: Shuffled <fg_serial.hxx> dependency Simulator/Objects/material.hxx: Simulator/Time/timestamp.hxx: VC++ friend kludge Simulator/Scenery/tile.[ch]xx: Fixed using std::X declarations Simulator/Main/views.hxx: Added a constant
This commit is contained in:
parent
fab6d05157
commit
123c816048
@ -22,20 +22,36 @@
|
|||||||
// (Log is kept at end of this file)
|
// (Log is kept at end of this file)
|
||||||
|
|
||||||
|
|
||||||
#include <errno.h>
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <termios.h>
|
# include <config.h>
|
||||||
#include <sys/types.h>
|
#endif
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
#include "Include/compiler.h"
|
||||||
#include <unistd.h>
|
#ifdef FG_HAVE_STD_INCLUDE
|
||||||
|
# include <cerrno>
|
||||||
|
#else
|
||||||
|
# include <errno.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
// maybe include something???
|
||||||
|
#else
|
||||||
|
# include <termios.h>
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/stat.h>
|
||||||
|
# include <fcntl.h>
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <Debug/logstream.hxx>
|
#include <Debug/logstream.hxx>
|
||||||
|
|
||||||
#include "serial.hxx"
|
#include "serial.hxx"
|
||||||
|
|
||||||
|
|
||||||
fgSERIAL::fgSERIAL() {
|
fgSERIAL::fgSERIAL()
|
||||||
dev_open = false;
|
: dev_open(false)
|
||||||
|
{
|
||||||
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
fgSERIAL::fgSERIAL(const string& device, int baud) {
|
fgSERIAL::fgSERIAL(const string& device, int baud) {
|
||||||
@ -50,11 +66,44 @@ fgSERIAL::~fgSERIAL() {
|
|||||||
// closing the port here screws us up because if we would even so
|
// closing the port here screws us up because if we would even so
|
||||||
// much as make a copy of an fgSERIAL object and then delete it,
|
// much as make a copy of an fgSERIAL object and then delete it,
|
||||||
// the file descriptor gets closed. Doh!!!
|
// the file descriptor gets closed. Doh!!!
|
||||||
|
|
||||||
// close(fd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fgSERIAL::open_port(const string& device) {
|
bool fgSERIAL::open_port(const string& device) {
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
|
||||||
|
fd = CreateFile( device.c_str(),
|
||||||
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
|
0, // dwShareMode
|
||||||
|
NULL, // lpSecurityAttributes
|
||||||
|
OPEN_EXISTING,
|
||||||
|
FILE_FLAG_OVERLAPPED,
|
||||||
|
NULL );
|
||||||
|
if ( fd == INVALID_HANDLE_VALUE )
|
||||||
|
{
|
||||||
|
LPVOID lpMsgBuf;
|
||||||
|
FormatMessage(
|
||||||
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL,
|
||||||
|
GetLastError(),
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
||||||
|
(LPTSTR) &lpMsgBuf,
|
||||||
|
0,
|
||||||
|
NULL );
|
||||||
|
|
||||||
|
FG_LOG( FG_SERIAL, FG_ALERT, "Error opening serial device \""
|
||||||
|
<< device << "\" " << (const char*) lpMsgBuf );
|
||||||
|
LocalFree( lpMsgBuf );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
dev_open = true;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
struct termios config;
|
struct termios config;
|
||||||
|
|
||||||
fd = open(device.c_str(), O_RDWR | O_NONBLOCK);
|
fd = open(device.c_str(), O_RDWR | O_NONBLOCK);
|
||||||
@ -97,16 +146,29 @@ bool fgSERIAL::open_port(const string& device) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool fgSERIAL::close_port() {
|
bool fgSERIAL::close_port() {
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
CloseHandle( fd );
|
||||||
|
#else
|
||||||
close(fd);
|
close(fd);
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool fgSERIAL::set_baud(int baud) {
|
bool fgSERIAL::set_baud(int baud) {
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
struct termios config;
|
struct termios config;
|
||||||
speed_t speed = B9600;
|
speed_t speed = B9600;
|
||||||
|
|
||||||
@ -158,9 +220,20 @@ bool fgSERIAL::set_baud(int baud) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string fgSERIAL::read_port() {
|
string fgSERIAL::read_port() {
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
|
||||||
|
string result = "";
|
||||||
|
return result;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
const int max_count = 1024;
|
const int max_count = 1024;
|
||||||
char buffer[max_count+1];
|
char buffer[max_count+1];
|
||||||
int count;
|
int count;
|
||||||
@ -183,9 +256,48 @@ string fgSERIAL::read_port() {
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int fgSERIAL::write_port(const string& value) {
|
int fgSERIAL::write_port(const string& value) {
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
|
||||||
|
LPCVOID lpBuffer = value.c_str();
|
||||||
|
DWORD nNumberOfBytesToWrite = value.length();
|
||||||
|
DWORD lpNumberOfBytesWritten;
|
||||||
|
OVERLAPPED lpOverlapped;
|
||||||
|
|
||||||
|
if ( WriteFile( fd,
|
||||||
|
lpBuffer,
|
||||||
|
nNumberOfBytesToWrite,
|
||||||
|
&lpNumberOfBytesWritten,
|
||||||
|
&lpOverlapped ) == 0 )
|
||||||
|
{
|
||||||
|
LPVOID lpMsgBuf;
|
||||||
|
FormatMessage(
|
||||||
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL,
|
||||||
|
GetLastError(),
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
|
||||||
|
(LPTSTR) &lpMsgBuf,
|
||||||
|
0,
|
||||||
|
NULL );
|
||||||
|
|
||||||
|
FG_LOG( FG_SERIAL, FG_ALERT, "Serial I/O write error: "
|
||||||
|
<< (const char*) lpMsgBuf );
|
||||||
|
LocalFree( lpMsgBuf );
|
||||||
|
return int(lpNumberOfBytesWritten);
|
||||||
|
}
|
||||||
|
|
||||||
|
return int(lpNumberOfBytesWritten);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
static bool error = false;
|
static bool error = false;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
@ -217,10 +329,29 @@ int fgSERIAL::write_port(const string& value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.9 1999/02/02 20:13:23 curt
|
||||||
|
// MSVC++ portability changes by Bernie Bright:
|
||||||
|
//
|
||||||
|
// Lib/Serial/serial.[ch]xx: Initial Windows support - incomplete.
|
||||||
|
// Simulator/Astro/stars.cxx: typo? included <stdio> instead of <cstdio>
|
||||||
|
// Simulator/Cockpit/hud.cxx: Added Standard headers
|
||||||
|
// Simulator/Cockpit/panel.cxx: Redefinition of default parameter
|
||||||
|
// Simulator/Flight/flight.cxx: Replaced cout with FG_LOG. Deleted <stdio.h>
|
||||||
|
// Simulator/Main/fg_init.cxx:
|
||||||
|
// Simulator/Main/GLUTmain.cxx:
|
||||||
|
// Simulator/Main/options.hxx: Shuffled <fg_serial.hxx> dependency
|
||||||
|
// Simulator/Objects/material.hxx:
|
||||||
|
// Simulator/Time/timestamp.hxx: VC++ friend kludge
|
||||||
|
// Simulator/Scenery/tile.[ch]xx: Fixed using std::X declarations
|
||||||
|
// Simulator/Main/views.hxx: Added a constant
|
||||||
|
//
|
||||||
// Revision 1.8 1999/01/20 13:42:21 curt
|
// Revision 1.8 1999/01/20 13:42:21 curt
|
||||||
// Tweaked FDM interface.
|
// Tweaked FDM interface.
|
||||||
// Testing check sum support for NMEA serial output.
|
// Testing check sum support for NMEA serial output.
|
||||||
|
@ -30,8 +30,17 @@
|
|||||||
# error This library requires C++
|
# error This library requires C++
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "Include/compiler.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
FG_USING_STD(string);
|
||||||
|
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
# include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// if someone know how to do this all with C++ streams let me know
|
// if someone know how to do this all with C++ streams let me know
|
||||||
// #include <stdio.h>
|
// #include <stdio.h>
|
||||||
@ -39,10 +48,15 @@
|
|||||||
|
|
||||||
class fgSERIAL
|
class fgSERIAL
|
||||||
{
|
{
|
||||||
|
#if defined( WIN32 ) && !defined( __CYGWIN__) && !defined( __CYGWIN32__ )
|
||||||
|
typedef HANDLE fd_type;
|
||||||
|
#else
|
||||||
|
typedef int fd_type;
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
int fd;
|
fd_type fd;
|
||||||
bool dev_open;
|
bool dev_open;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -66,6 +80,22 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.3 1999/02/02 20:13:24 curt
|
||||||
|
// MSVC++ portability changes by Bernie Bright:
|
||||||
|
//
|
||||||
|
// Lib/Serial/serial.[ch]xx: Initial Windows support - incomplete.
|
||||||
|
// Simulator/Astro/stars.cxx: typo? included <stdio> instead of <cstdio>
|
||||||
|
// Simulator/Cockpit/hud.cxx: Added Standard headers
|
||||||
|
// Simulator/Cockpit/panel.cxx: Redefinition of default parameter
|
||||||
|
// Simulator/Flight/flight.cxx: Replaced cout with FG_LOG. Deleted <stdio.h>
|
||||||
|
// Simulator/Main/fg_init.cxx:
|
||||||
|
// Simulator/Main/GLUTmain.cxx:
|
||||||
|
// Simulator/Main/options.hxx: Shuffled <fg_serial.hxx> dependency
|
||||||
|
// Simulator/Objects/material.hxx:
|
||||||
|
// Simulator/Time/timestamp.hxx: VC++ friend kludge
|
||||||
|
// Simulator/Scenery/tile.[ch]xx: Fixed using std::X declarations
|
||||||
|
// Simulator/Main/views.hxx: Added a constant
|
||||||
|
//
|
||||||
// Revision 1.2 1998/11/30 17:15:30 curt
|
// Revision 1.2 1998/11/30 17:15:30 curt
|
||||||
// Having the class destructor close the fd was a bad idea ... especially if you
|
// Having the class destructor close the fd was a bad idea ... especially if you
|
||||||
// ever make a copy of the instance and then subsequently destroy either.
|
// ever make a copy of the instance and then subsequently destroy either.
|
||||||
|
Loading…
Reference in New Issue
Block a user