24 #include "acquisition_thread.h"
25 #include "act_thread.h"
26 #include "remote_bb_poster.h"
28 #include <blackboard/interface_listener.h>
29 #include <blackboard/remote.h>
30 #include <core/exceptions/system.h>
31 #include <core/threading/thread.h>
32 #include <core/threading/wait_condition.h>
33 #include <interfaces/JoystickInterface.h>
34 #include <logging/console.h>
35 #include <netcomm/fawkes/client.h>
36 #include <netcomm/fawkes/client_handler.h>
37 #include <netcomm/socket/socket.h>
38 #include <utils/system/argparser.h>
39 #include <utils/system/signal.h>
52 print_usage(
const char *program_name)
54 printf(
"Usage: %s [-h] [-r host[:port]] [-d device] [-l]\n"
55 " -h This help message\n"
56 " -r host[:port] Remote host (and optionally port) to connect to\n"
57 " -d device Joystick device to use\n"
58 " -l Start in logging mode - print data read from bb\n",
98 char * host = (
char *)
"localhost";
99 unsigned short int port = 1910;
107 warning_printed_ =
false;
109 joystick_if_->
read();
110 logger->
log_debug(
"Joystick",
"Number of Axes: %i", joystick_if_->num_axes());
111 logger->
log_debug(
"Joystick",
"Number of Buttons: %i", joystick_if_->num_buttons());
120 bbil_add_data_interface(joystick_if_);
121 bb_->register_listener(
this);
127 bb_->close(joystick_if_);
134 if (!bb_->is_alive()) {
135 if (bb_->try_aliveness_restore()) {
136 logger_->log_info(
"Joystick",
"Connection re-established, writing data");
137 warning_printed_ =
false;
142 joystick_if_->read();
143 float *axis_value = joystick_if_->axis();
144 logger_->log_info(
"Joystick",
145 "Axes: 0: %f 1: %f 2: %f 3: %f 4: %f "
155 char button_string[33];
156 button_string[32] = 0;
157 unsigned int pressed_buttons = joystick_if_->pressed_buttons();
158 for (
unsigned int i = 0; i < 32; ++i) {
159 button_string[i] = (pressed_buttons & (1 << i)) ?
'1' :
'0';
161 logger_->log_info(
"Joystick",
"Buttons: %s", button_string);
163 if (!warning_printed_) {
165 logger_->log_warn(
"Joystick",
166 "Lost connection to BlackBoard, "
167 "will try to re-establish");
168 warning_printed_ =
true;
176 waitcond_.wake_all();
187 bool warning_printed_;
212 joystick_if_(joystick_if)
216 bbil_add_message_interface(joystick_if_);
217 bb_->register_listener(
this);
223 bb_->unregister_listener(
this);
224 bbil_remove_message_interface(joystick_if_);
233 msgproc_->process_message(message);
251 main(
int argc,
char **argv)
256 if (argp.has_arg(
"h")) {
257 print_usage(argv[0]);
261 const char *joystick_device =
"/dev/input/js0";
262 if (argp.has_arg(
"d")) {
263 joystick_device = argp.arg(
"d");
268 if (argp.has_arg(
"l")) {
273 char * host = (
char *)
"localhost";
274 unsigned short int port = 1910;
275 bool free_host = argp.parse_hostport(
"r", &host, &port);
291 printf(
"Error: Unknown Argument\n\n");
292 print_usage(argv[0]);
295 printf(
"\nError: could not connect:\n%s\n", e.
what());
297 printf(
"\nError: could not open joystick device:\n%s\n", e.
what());
Joystick acqusition thread for Linux joystick API.
Process incoming messages.
Wake actuator thread on incomin messages.
JoystickBlackBoardActListener(JoystickAcquisitionThread *aqt, BlackBoard *blackboard, JoystickInterface *joystick_if, Logger *logger)
Constructor.
~JoystickBlackBoardActListener()
Destructor.
virtual bool bb_interface_message_received(Interface *interface, Message *message)
BlackBoard message received notification.
Log joystick data gathered via RemoteBlackBoard to console.
virtual void bb_interface_data_changed(Interface *interface)
BlackBoard data changed notification.
JoystickBlackBoardLogger(ArgumentParser &argp, Logger *logger)
Constructor.
~JoystickBlackBoardLogger()
Destructor.
void run()
Wait for quit signal from signal handler.
void handle_signal(int signum)
Signal hanlding method.
Simple signal handler for ffjoystick.
virtual void handle_signal(int signal)
Signal hanlding method.
JoystickQuitHandler(JoystickAcquisitionThread &aqt)
Constructor.
Glue to post new data to a RemoteBlackBoard.
Parse command line arguments.
bool parse_hostport(const char *argn, char **host, unsigned short int *port)
Parse host:port string.
BlackBoard interface listener.
The BlackBoard abstract class.
Interface for logging to stderr.
File could not be opened.
Base class for exceptions in Fawkes.
void print_trace()
Prints trace to stderr.
virtual const char * what() const
Get primary string.
Base class for all Fawkes BlackBoard interfaces.
void read()
Read from BlackBoard into local copy.
JoystickInterface Fawkes BlackBoard Interface.
Base class for all messages passed through interfaces in Fawkes BlackBoard.
virtual void log_debug(const char *component, const char *format,...)
Log debug message.
Interface for signal handling.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
Thrown if unknown argument was supplied.
Wait until a given condition holds.
Fawkes library namespace.