void carmen_graphics_update_ipc_callbacks_qt(QObject* parent, const char* updateIPC)
{
  fd_set *open_fds;
  int max_connection;
  int index;
  int callback_index;
  carmen_graphics_callback_qt *callback;
  carmen_graphics_callback_qt new_callback;
  static carmen_list_t *existing_callbacks = NULL;
  static int num_callbacks = 0;
  QSocketNotifier *qt_socket = NULL;

  if (existing_callbacks == NULL)
    existing_callbacks =
      carmen_list_create(sizeof(carmen_graphics_callback_qt), 10);

  for (index = 0; index < num_callbacks; index++) {
    callback = (carmen_graphics_callback_qt*) carmen_list_get(existing_callbacks, index);
    callback->ok = 0;
  }

  open_fds = x_ipcGetConnections();
  max_connection = x_ipcGetMaxConnection();
  for (index = 0; index <= max_connection; index++) {
    if (FD_ISSET(index, open_fds)) {
      for (callback_index = 0; callback_index < num_callbacks;
	   callback_index++) {
	callback = (carmen_graphics_callback_qt*) carmen_list_get(existing_callbacks, callback_index);
	if (index == callback->fd) {
	  callback->ok = 1;
	  break;
	}
      }
      if (callback_index == existing_callbacks->length) {

	qt_socket = new QSocketNotifier(index, QSocketNotifier::Read);

	QObject::connect(qt_socket, SIGNAL(activated(int)), parent, updateIPC);

	new_callback.fd = index;
	new_callback.ok = 1;
	new_callback.callback_id = qt_socket->socket();
	  //gdk_input_add(index, GDK_INPUT_READ, callback_Func, NULL);
	carmen_list_add(existing_callbacks, &new_callback);
      }
    } /* End of if (FD_ISSET(index, open_fds)) */
  } /* End of for (index = 0; index <= max_connection; index++) */

  /*for (index = 0; index < num_callbacks; index++) {
    callback = carmen_list_get(existing_callbacks, index);
    if (callback->ok == 0) {
      gdk_input_remove(callback->callback_id);
      carmen_list_delete(existing_callbacks, index);
      index--;
    }
  }*/
}
static void add_node(carmen_list_t *node_list, int x, int y)
{
  carmen_roadmap_vertex_t vertex;

  vertex.id = node_list->length;
  vertex.x = x;
  vertex.y = y;
  vertex.label = -1;
  vertex.utility = 0;
  vertex.bad = 0;
  vertex.edges = carmen_list_create(sizeof(carmen_roadmap_edge_t), 10);
  carmen_list_add(node_list, &vertex);
}
Esempio n. 3
0
void carmen_graphics_update_ipc_callbacks(GdkInputFunction callback_Func) 
{
  fd_set *open_fds;
  int max_connection;
  int index;
  int callback_index;
  carmen_graphics_callback *callback;
  carmen_graphics_callback new_callback;
  static carmen_list_t *existing_callbacks = NULL;  
  static int num_callbacks = 0;

  if (existing_callbacks == NULL)
    existing_callbacks = 
      carmen_list_create(sizeof(carmen_graphics_callback), 10);

  for (index = 0; index < num_callbacks; index++) {
    callback = carmen_list_get(existing_callbacks, index);
    callback->ok = 0;
  }

  open_fds = x_ipcGetConnections();
  max_connection = x_ipcGetMaxConnection();
  for (index = 0; index <= max_connection; index++) {
    if (FD_ISSET(index, open_fds)) {
      for (callback_index = 0; callback_index < num_callbacks; 
	   callback_index++) {
	callback = carmen_list_get(existing_callbacks, callback_index);
	if (index == callback->fd) {
	  callback->ok = 1;
	  break;
	}
      } 
      if (callback_index == existing_callbacks->length) {
	new_callback.fd = index;
	new_callback.ok = 1;
	new_callback.callback_id = 
	  gdk_input_add(index, GDK_INPUT_READ, callback_Func, NULL);
	carmen_list_add(existing_callbacks, &new_callback);
      }
    } /* End of if (FD_ISSET(index, open_fds)) */
  } /* End of for (index = 0; index <= max_connection; index++) */

  for (index = 0; index < num_callbacks; index++) {
    callback = carmen_list_get(existing_callbacks, index);
    if (callback->ok == 0) {
      gdk_input_remove(callback->callback_id);
      carmen_list_delete(existing_callbacks, index);
      index--;
    }
  }
}
static void add_edge(carmen_roadmap_vertex_t *node, 
		     carmen_roadmap_vertex_t *parent_node, double cost)
{
  int i, neighbour_id;
  carmen_roadmap_edge_t edge;
  carmen_roadmap_edge_t *edges;

  edges = (carmen_roadmap_edge_t*)(parent_node->edges->list);
  for (i = 0; i < parent_node->edges->length; i++) {
    neighbour_id = edges[i].id;
    if (neighbour_id == node->id) 
      return;
  }

  edge.id = node->id;
  edge.cost = cost;
  edge.blocked = 0;
  assert (edge.cost > 0);
  carmen_list_add(parent_node->edges, &edge);
}
Esempio n. 5
0
static void simulator_objects_handler(carmen_simulator_objects_message 
				      *objects_msg)
{
  carmen_dot_person_t person;
  carmen_dot_trash_t trash;
  carmen_traj_point_t p1;
  carmen_dot_all_people_msg people_msg;
  carmen_dot_all_trash_msg trash_msg;
  int i;
  IPC_RETURN_TYPE err;

  people_msg.timestamp = carmen_get_time_ms();
  strcpy(people_msg.host, carmen_get_tenchar_host_name());

  trash_msg.timestamp = carmen_get_time_ms();
  strcpy(trash_msg.host, carmen_get_tenchar_host_name());

  if (person_list == NULL) 
    person_list = carmen_list_create(sizeof(carmen_dot_person_t), 10);

  if (trash_list == NULL) 
    trash_list = carmen_list_create(sizeof(carmen_dot_trash_t), 10);

  person_list->length = 0;
  trash_list->length = 0;
  p1.x = truepose.truepose.x;
  p1.y = truepose.truepose.y;

  for (i = 0; i < objects_msg->num_objects; i++) {
    if (!points_are_visible(&p1, objects_msg->objects_list+i, map))
      continue;
    if (objects_msg->objects_list[i].t_vel < .2) {
      trash.x = objects_msg->objects_list[i].x;
      trash.y = objects_msg->objects_list[i].y;
      //dbug: need to add convex hull code or won't work!
      trash.vx = 0.375;
      trash.vy = 0.375;
      trash.vxy = 0.125;
      trash.id = i;

      carmen_list_add(trash_list, &trash);

    } else {
      person.x = objects_msg->objects_list[i].x;
      person.y = objects_msg->objects_list[i].y;
      person.vx = 0.375;
      person.vy = 0.375;
      person.vxy = 0.125;
      person.id = i;

      carmen_list_add(person_list, &person);
    }
  }

  if (person_list->length > 0) {
    people_msg.num_people = person_list->length;
    people_msg.people = (carmen_dot_person_t *)person_list->list;
  } else {
    people_msg.num_people = 0;
    people_msg.people = NULL;
  }

  err = IPC_publishData(CARMEN_DOT_ALL_PEOPLE_MSG_NAME, &people_msg);
  carmen_test_ipc_exit(err, "Could not publish", 
		       CARMEN_DOT_ALL_PEOPLE_MSG_NAME);

  if (trash_list->length > 0) {
    trash_msg.num_trash = trash_list->length;
    trash_msg.trash = (carmen_dot_trash_t *)trash_list->list;
  } else {
    trash_msg.num_trash = 0;
    trash_msg.trash = NULL;
  }

  err = IPC_publishData(CARMEN_DOT_ALL_TRASH_MSG_NAME, &trash_msg);
  carmen_test_ipc_exit(err, "Could not publish", 
		       CARMEN_DOT_ALL_TRASH_MSG_NAME);
}