vrpn  07.33
Virtual Reality Peripheral Network
vrpn_Android.C
Go to the documentation of this file.
1 #include "vrpn_Android.h"
2 #include <sstream>
3 #include <string>
4 #include <bitset>
5 
8 {
9  fprintf(stderr, "Button_Server_Remote: button %i state %i\n", b.button, b.state);
10 }
11 
12 void VRPN_CALLBACK handle_analog (void *userdata, const vrpn_ANALOGCB a)
13 {
14  vrpn_int32 i;
15  const char *name = (const char *)userdata;
16 
17  fprintf(stderr, "Analog:\n %5.2f", a.channel[0]);
18  for (i = 1; i < a.num_channel; i++) {
19  fprintf(stderr, ", %5.2f\n", a.channel[i]);
20  }
21  fprintf(stderr, " (%d chans)\n", a.num_channel);
22 }
24 
25 
26 vrpn_Android_Server::vrpn_Android_Server(vrpn_int32 num_analogs, vrpn_int32 * analog_sizes, vrpn_int32 num_buttons, vrpn_int32 port)
27 {
28  fprintf(stderr, "C++: vrpn_Android_Server instantiated\n");
29  this->port = port;
30  this->initialize(num_analogs, analog_sizes, num_buttons);
31 }
32 
33 void vrpn_Android_Server::initialize(vrpn_int32 num_analogs, vrpn_int32 * analog_sizes, vrpn_int32 num_buttons)
34 {
35  ANALOG_SERVER_NAME = "Analog"; // Numbers added automatically
36  BUTTON_SERVER_NAME = "Button0";
37 
38  this->num_analogs = num_analogs;
39  this->analog_sizes = analog_sizes;
40 
41  fprintf(stderr, "vrpn_Android_Server: using port %i\n", port);
42 
43  fprintf(stderr, "vrpn_Android_Server: getting server connection...\n");
44  connection = vrpn_create_server_connection(port);
45  fprintf(stderr, (connection == 0) ? "vrpn_Android_Server: Failed to get connection\n" : "vrpn_Android_Server: Got connection\n");
46 
47  // Create analog servers
48  analog_server = new vrpn_Analog_Server*[num_analogs];
49 
50  for (int i = 0; i < num_analogs; i++)
51  {
52  std::stringstream name;
53  name << ANALOG_SERVER_NAME << i;
54  analog_server[i] = new vrpn_Analog_Server(name.str().c_str(), connection, analog_sizes[i]);
55  analog_server[i]->setNumChannels(analog_sizes[i]);
56  fprintf(stderr, "vrpn_Android_Server: instantiated analog server %i\n", i);
57  }
58 
59  // Create button server
60  button_server = new vrpn_Button_Server(BUTTON_SERVER_NAME, connection, num_buttons);
61  fprintf(stderr, "vrpn_Android_Server: instantiated button server\n");
62 
63  // Create analog clients
64  analog_client = new vrpn_Analog_Remote*[num_analogs];
65 
66  for (int i = 0; i < num_analogs; i++)
67  {
68  std::stringstream name;
69  name << ANALOG_SERVER_NAME << i;
70  analog_client[i] = new vrpn_Analog_Remote(name.str().c_str(), connection);
71  analog_client[i]->register_change_handler(const_cast <char*> (name.str().c_str()), handle_analog);
72 
73  }
74 
75  // Create button client
76  button_client = new vrpn_Button_Remote(BUTTON_SERVER_NAME, connection);
77  button_client->register_change_handler(const_cast <char*> (BUTTON_SERVER_NAME), button_press);
78 
79  fprintf(stderr, "C++: vrpn_Android_Server initialized\n");
80 }
81 
83 {
84  for (vrpn_int32 i = 0; i < num_analogs; i++)
85  {
86  analog_server[i]->mainloop();
87  analog_client[i]->mainloop();
88  }
89  button_server->mainloop();
90  button_client->mainloop();
91  connection->mainloop();
92 }
93 
94 void vrpn_Android_Server::set_button(vrpn_int32 button_id, vrpn_int32 state)
95 {
96  button_server->set_button(button_id, state);
97 }
98 
99 void vrpn_Android_Server::set_analog(vrpn_int32 analog_id, vrpn_int32 channel, vrpn_float64 val)
100 {
101  vrpn_float64 * channels = analog_server[analog_id]->channels();
102  channels[channel] = val;
103 }
104 
105 void vrpn_Android_Server::report_analog_chg(vrpn_int32 analog_id)
106 {
107  analog_server[analog_id]->report();
108 }
109 
111 {
112  for (vrpn_int32 i = 0; i < num_analogs; i++)
113  {
114  delete analog_server[i];
115  delete analog_client[i];
116  }
117  delete button_server;
118  delete button_client;
119  delete connection;
120  fprintf(stderr, "C++: vrpn_Android_Server destroyed\n");
121 }
vrpn_Analog_Server::setNumChannels
vrpn_int32 setNumChannels(vrpn_int32 sizeRequested)
Sets the size of the array; returns the size actually set. (May be clamped to vrpn_CHANNEL_MAX) This ...
Definition: vrpn_Analog.C:195
handle_analog
void VRPN_CALLBACK handle_analog(void *userdata, const vrpn_ANALOGCB a)
Definition: vrpn_Android.C:12
vrpn_Analog_Server
Definition: vrpn_Analog.h:95
vrpn_Analog_Remote
Definition: vrpn_Analog.h:181
vrpn_Button_Remote
Definition: vrpn_Button.h:250
vrpn_BUTTONCB::state
vrpn_int32 state
Definition: vrpn_Button.h:228
vrpn_Button_Remote::mainloop
virtual void mainloop()
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
Definition: vrpn_Button.C:958
button_press
void VRPN_CALLBACK button_press(void *, const vrpn_BUTTONCB b)
Definition: vrpn_Android.C:7
vrpn_Android.h
vrpn_ANALOGCB
Definition: vrpn_Analog.h:168
vrpn_BUTTONCB::button
vrpn_int32 button
Definition: vrpn_Button.h:227
vrpn_Button_Server::mainloop
virtual void mainloop()
Called once each time through the server program's mainloop to handle various functions (like setting...
Definition: vrpn_Button.C:470
vrpn_Android_Server::report_analog_chg
void report_analog_chg(vrpn_int32 analog_id)
Called when changes are made to any of the analog values.
Definition: vrpn_Android.C:105
vrpn_Android_Server::~vrpn_Android_Server
~vrpn_Android_Server()
Destructor.
Definition: vrpn_Android.C:110
vrpn_ANALOGCB::channel
vrpn_float64 channel[vrpn_CHANNEL_MAX]
Definition: vrpn_Analog.h:171
vrpn_Analog_Server::report
virtual void report(vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW)
Makes public the protected base class function.
Definition: vrpn_Analog.C:189
vrpn_Analog_Remote::mainloop
virtual void mainloop()
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
Definition: vrpn_Analog.C:328
vrpn_ANALOGCB::num_channel
vrpn_int32 num_channel
Definition: vrpn_Analog.h:170
vrpn_Connection::mainloop
virtual int mainloop(const struct timeval *timeout=NULL)=0
Call each time through program main loop to handle receiving any incoming messages and sending any pa...
vrpn_BUTTONCB
Definition: vrpn_Button.h:225
vrpn_Button_Remote::register_change_handler
virtual int register_change_handler(void *userdata, vrpn_BUTTONCHANGEHANDLER handler)
Definition: vrpn_Button.h:262
vrpn_Android_Server::set_analog
void set_analog(vrpn_int32 analog_id, vrpn_int32 channel, vrpn_float64 val)
Set the value for the given channel of the given vrpn_Analog_Server.
Definition: vrpn_Android.C:99
vrpn_Android_Server::vrpn_Android_Server
vrpn_Android_Server(vrpn_int32 num_analogs, vrpn_int32 *analog_sizes, vrpn_int32 num_buttons, vrpn_int32 port)
Constructor. Takes an array of integers representing the number of channels for each analog server,...
Definition: vrpn_Android.C:26
vrpn_Android_Server::set_button
void set_button(vrpn_int32 button_id, vrpn_int32 state)
Set the value for the given button.
Definition: vrpn_Android.C:94
vrpn_Analog_Server::channels
vrpn_float64 * channels(void)
Exposes an array of values for the user to write into.
Definition: vrpn_Analog.h:117
vrpn_Button_Server
class VRPN_API vrpn_Button_Server
Definition: vrpn_Tracker_Fastrak.h:23
VRPN_CALLBACK
#define VRPN_CALLBACK
Definition: vrpn_Configure.h:647
vrpn_Analog_Server::mainloop
virtual void mainloop()
For this server, the user must normally call report() or report_changes() directly....
Definition: vrpn_Analog.h:114
vrpn_Button_Server::set_button
int set_button(int button, int new_value)
Allows the server program to set current button states (to 0 or 1)
Definition: vrpn_Button.C:476
vrpn_Analog_Remote::register_change_handler
virtual int register_change_handler(void *userdata, vrpn_ANALOGCHANGEHANDLER handler)
Definition: vrpn_Analog.h:192
vrpn_Android_Server::mainloop
void mainloop()
Main loop to be called at every time step. Calls the mainloop() functions of the member servers.
Definition: vrpn_Android.C:82
vrpn_create_server_connection
vrpn_Connection * vrpn_create_server_connection(const char *cname, const char *local_in_logfile_name, const char *local_out_logfile_name)
Create a server connection of arbitrary type (VRPN UDP/TCP, TCP, File, Loopback, MPI).
Definition: vrpn_Connection.C:5358