4 changed files with 105 additions and 39 deletions
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
This program 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. |
||||
|
||||
This program 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/>.
|
||||
*/ |
||||
/*
|
||||
base class for serially-attached simulated devices |
||||
*/ |
||||
|
||||
#include "SIM_SerialDevice.h" |
||||
#include <stdio.h> |
||||
#include <unistd.h> |
||||
#include <fcntl.h> |
||||
|
||||
using namespace SITL; |
||||
|
||||
SerialDevice::SerialDevice() |
||||
{ |
||||
int tmp[2]; |
||||
if (pipe(tmp) == -1) { |
||||
AP_HAL::panic("pipe() failed"); |
||||
} |
||||
fd_my_end = tmp[1]; |
||||
fd_their_end = tmp[0]; |
||||
|
||||
// close file descriptors on exec:
|
||||
fcntl(fd_my_end, F_SETFD, FD_CLOEXEC); |
||||
fcntl(fd_their_end, F_SETFD, FD_CLOEXEC); |
||||
|
||||
// make sure we don't screw the simulation up by blocking:
|
||||
fcntl(fd_my_end, F_SETFL, fcntl(fd_my_end, F_GETFL, 0) | O_NONBLOCK); |
||||
fcntl(fd_their_end, F_SETFL, fcntl(fd_their_end, F_GETFL, 0) | O_NONBLOCK); |
||||
} |
||||
|
||||
bool SerialDevice::init_sitl_pointer() |
||||
{ |
||||
if (_sitl == nullptr) { |
||||
_sitl = AP::sitl(); |
||||
if (_sitl == nullptr) { |
||||
return false; |
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
This program 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. |
||||
|
||||
This program 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/>.
|
||||
*/ |
||||
/*
|
||||
base class for serially-attached simulated devices |
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <SITL/SITL.h> |
||||
|
||||
#include <AP_HAL/utility/RingBuffer.h> |
||||
|
||||
namespace SITL { |
||||
|
||||
class SerialDevice { |
||||
public: |
||||
|
||||
SerialDevice(); |
||||
|
||||
// return fd on which data from the device can be read, and data
|
||||
// to the device can be written
|
||||
int fd() { return fd_their_end; } |
||||
|
||||
protected: |
||||
|
||||
SITL *_sitl; |
||||
|
||||
int fd_their_end; |
||||
int fd_my_end; |
||||
|
||||
bool init_sitl_pointer(); |
||||
}; |
||||
|
||||
} |
Loading…
Reference in new issue