Browse Source

SITL: added -C option to desktop mode

this allows running APM to stdout, which is useful for test sketches
mission-4.1.18
Andrew Tridgell 13 years ago
parent
commit
d6bfceef7c
  1. 22
      libraries/Desktop/support/FastSerial.cpp
  2. 1
      libraries/Desktop/support/desktop.h
  3. 6
      libraries/Desktop/support/main.cpp

22
libraries/Desktop/support/FastSerial.cpp

@ -70,6 +70,7 @@ static struct tcp_state {
int listen_fd; // socket we are listening on int listen_fd; // socket we are listening on
int fd; // data socket int fd; // data socket
int serial_port; int serial_port;
bool console;
} tcp_state[FS_MAX_PORTS]; } tcp_state[FS_MAX_PORTS];
@ -85,6 +86,17 @@ static void tcp_start_connection(unsigned int serial_port, bool wait_for_connect
struct sockaddr_in sockaddr; struct sockaddr_in sockaddr;
int ret; int ret;
if (desktop_state.console_mode) {
// hack for console access
s->connected = true;
s->listen_fd = -1;
s->fd = 1;
s->serial_port = serial_port;
s->console = true;
set_nonblocking(0);
return;
}
s->serial_port = serial_port; s->serial_port = serial_port;
memset(&sockaddr,0,sizeof(sockaddr)); memset(&sockaddr,0,sizeof(sockaddr));
@ -291,6 +303,10 @@ int FastSerial::read(void)
return -1; return -1;
} }
if (s->console) {
return ::read(0, &c, 1);
}
int n = recv(s->fd, &c, 1, MSG_DONTWAIT | MSG_NOSIGNAL); int n = recv(s->fd, &c, 1, MSG_DONTWAIT | MSG_NOSIGNAL);
if (n <= 0) { if (n <= 0) {
// the socket has reached EOF // the socket has reached EOF
@ -326,7 +342,11 @@ void FastSerial::write(uint8_t c)
if (!desktop_state.slider) { if (!desktop_state.slider) {
flags |= MSG_DONTWAIT; flags |= MSG_DONTWAIT;
} }
send(s->fd, &c, 1, flags); if (s->console) {
::write(s->fd, &c, 1);
} else {
send(s->fd, &c, 1, flags);
}
} }
// Buffer management /////////////////////////////////////////////////////////// // Buffer management ///////////////////////////////////////////////////////////

1
libraries/Desktop/support/desktop.h

@ -10,6 +10,7 @@ struct desktop_info {
bool quadcopter; // use quadcopter outputs bool quadcopter; // use quadcopter outputs
unsigned framerate; unsigned framerate;
float initial_height; float initial_height;
bool console_mode;
}; };
extern struct desktop_info desktop_state; extern struct desktop_info desktop_state;

6
libraries/Desktop/support/main.cpp

@ -29,6 +29,7 @@ static void usage(void)
printf("\t-w wipe eeprom and dataflash\n"); printf("\t-w wipe eeprom and dataflash\n");
printf("\t-r RATE set SITL framerate\n"); printf("\t-r RATE set SITL framerate\n");
printf("\t-H HEIGHT initial barometric height\n"); printf("\t-H HEIGHT initial barometric height\n");
printf("\t-C use console instead of TCP ports\n");
} }
int main(int argc, char * const argv[]) int main(int argc, char * const argv[])
@ -40,7 +41,7 @@ int main(int argc, char * const argv[])
signal(SIGFPE, sig_fpe); signal(SIGFPE, sig_fpe);
while ((opt = getopt(argc, argv, "swhr:H:")) != -1) { while ((opt = getopt(argc, argv, "swhr:H:C")) != -1) {
switch (opt) { switch (opt) {
case 's': case 's':
desktop_state.slider = true; desktop_state.slider = true;
@ -55,6 +56,9 @@ int main(int argc, char * const argv[])
case 'H': case 'H':
desktop_state.initial_height = atof(optarg); desktop_state.initial_height = atof(optarg);
break; break;
case 'C':
desktop_state.console_mode = true;
break;
default: default:
usage(); usage();
exit(1); exit(1);

Loading…
Cancel
Save