X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2Fjoyclient.cxx;h=954b4e55c7e251d84c61b86a74f5f2c0d57d5c04;hb=92010f9f9483082bbf83638a49e08053f53c5daa;hp=bf546544bf34b38dc1605568fd711d0ebfd9835d;hpb=39f4bea43e26d724692b4ae6919b2bb7df74e847;p=flightgear.git diff --git a/src/Network/joyclient.cxx b/src/Network/joyclient.cxx index bf546544b..954b4e55c 100644 --- a/src/Network/joyclient.cxx +++ b/src/Network/joyclient.cxx @@ -22,10 +22,10 @@ #include +#include #include -#include "iochannel.hxx" #include "joyclient.hxx" @@ -39,15 +39,15 @@ FGJoyClient::~FGJoyClient() { // open hailing frequencies bool FGJoyClient::open() { if ( is_enabled() ) { - FG_LOG( FG_IO, FG_ALERT, "This shouldn't happen, but the channel " + SG_LOG( SG_IO, SG_ALERT, "This shouldn't happen, but the channel " << "is already in use, ignoring" ); return false; } - FGIOChannel *io = get_io_channel(); + SGIOChannel *io = get_io_channel(); if ( ! io->open( get_direction() ) ) { - FG_LOG( FG_IO, FG_ALERT, "Error opening channel communication layer." ); + SG_LOG( SG_IO, SG_ALERT, "Error opening channel communication layer." ); return false; } @@ -59,29 +59,50 @@ bool FGJoyClient::open() { // process work for this port bool FGJoyClient::process() { - FGIOChannel *io = get_io_channel(); + SGIOChannel *io = get_io_channel(); int length = sizeof(int[2]); - if ( get_direction() == out ) { - FG_LOG( FG_IO, FG_ALERT, "joyclient protocol is read only" ); + if ( get_direction() == SG_IO_OUT ) { + SG_LOG( SG_IO, SG_ALERT, "joyclient protocol is read only" ); return false; - } else if ( get_direction() == in ) { - FG_LOG( FG_IO, FG_DEBUG, "Searching for data." ); - while ( io->read( (char *)(& buf), length ) == length ) { - FG_LOG( FG_IO, FG_DEBUG, "Success reading data." ); - int *msg; - msg = (int *)buf; - FG_LOG( FG_IO, FG_DEBUG, "X = " << msg[0] << " Y = " << msg[1] ); - double aileron = ((double)msg[0] / 2048.0) - 1.0; - double elevator = ((double)msg[1] / 2048.0) - 1.0; - if ( fabs(aileron) < 0.05 ) { - aileron = 0.0; + } else if ( get_direction() == SG_IO_IN ) { + SG_LOG( SG_IO, SG_DEBUG, "Searching for data." ); + if ( io->get_type() == sgFileType ) { + if ( io->read( (char *)(& buf), length ) == length ) { + SG_LOG( SG_IO, SG_DEBUG, "Success reading data." ); + int *msg; + msg = (int *)buf; + SG_LOG( SG_IO, SG_DEBUG, "X = " << msg[0] << " Y = " + << msg[1] ); + double aileron = ((double)msg[0] / 2048.0) - 1.0; + double elevator = ((double)msg[1] / 2048.0) - 1.0; + if ( fabs(aileron) < 0.05 ) { + aileron = 0.0; + } + if ( fabs(elevator) < 0.05 ) { + elevator = 0.0; + } + globals->get_controls()->set_aileron( aileron ); + globals->get_controls()->set_elevator( -elevator ); } - if ( fabs(elevator) < 0.05 ) { - elevator = 0.0; + } else { + while ( io->read( (char *)(& buf), length ) == length ) { + SG_LOG( SG_IO, SG_DEBUG, "Success reading data." ); + int *msg; + msg = (int *)buf; + SG_LOG( SG_IO, SG_DEBUG, "X = " << msg[0] << " Y = " + << msg[1] ); + double aileron = ((double)msg[0] / 2048.0) - 1.0; + double elevator = ((double)msg[1] / 2048.0) - 1.0; + if ( fabs(aileron) < 0.05 ) { + aileron = 0.0; + } + if ( fabs(elevator) < 0.05 ) { + elevator = 0.0; + } + globals->get_controls()->set_aileron( aileron ); + globals->get_controls()->set_elevator( -elevator ); } - controls.set_aileron( aileron ); - controls.set_elevator( -elevator ); } } @@ -91,7 +112,7 @@ bool FGJoyClient::process() { // close the channel bool FGJoyClient::close() { - FGIOChannel *io = get_io_channel(); + SGIOChannel *io = get_io_channel(); set_enabled( false );