예제 #1
0
static void respond_all_doors_msg(MSG_INSTANCE msgRef) {

  static carmen_dot_all_doors_msg msg;
  static int first = 1;
  IPC_RETURN_TYPE err;
  int i, n;
  
  if (first) {
    first = 0;
    msg.doors = NULL;
    strcpy(msg.host, carmen_get_tenchar_host_name());
  }
  
  for (n = i = 0; i < num_filters; i++)
    if (filters[i].type == CARMEN_DOT_DOOR)
      n++;

  msg.num_doors = n;
  if (n == 0)
    msg.doors = NULL;

  else {
    msg.doors = (carmen_dot_door_p)
      realloc(msg.doors, n*sizeof(carmen_dot_door_t));
    carmen_test_alloc(msg.doors);
    for (n = i = 0; i < num_filters; i++) {
      if (filters[i].type == CARMEN_DOT_DOOR) {
	msg.doors[n].id = filters[i].id;
	msg.doors[n].x = filters[i].door_filter.x;
	msg.doors[n].y = filters[i].door_filter.y;
	msg.doors[n].theta = filters[i].door_filter.t;
	msg.doors[n].vx = filters[i].door_filter.px;
	msg.doors[n].vy = filters[i].door_filter.py;
	msg.doors[n].vxy = filters[i].door_filter.pxy;
	msg.doors[n].vtheta = filters[i].door_filter.pt;
	n++;
      }
    }
  }

  msg.timestamp = carmen_get_time_ms();

  err = IPC_respondData(msgRef, CARMEN_DOT_ALL_DOORS_MSG_NAME, &msg);
  carmen_test_ipc(err, "Could not respond",
		  CARMEN_DOT_ALL_DOORS_MSG_NAME);
}
예제 #2
0
static void respond_all_people_msg(MSG_INSTANCE msgRef) {

  static carmen_dot_all_people_msg msg;
  static int first = 1;
  IPC_RETURN_TYPE err;
  int i, n;

  if (first) {
    first = 0;
    msg.people = NULL;
    strcpy(msg.host, carmen_get_tenchar_host_name());
  }
  
  for (n = i = 0; i < num_filters; i++)
    if (filters[i].type == CARMEN_DOT_PERSON)
      n++;

  msg.num_people = n;
  if (n == 0)
    msg.people = NULL;
  else {
    msg.people = (carmen_dot_person_p)
		  realloc(msg.people, n*sizeof(carmen_dot_person_t));
    carmen_test_alloc(msg.people);
    for (n = i = 0; i < num_filters; i++) {
      if (filters[i].type == CARMEN_DOT_PERSON) {
	msg.people[n].id = filters[i].id;
	msg.people[n].x = filters[i].person_filter.x;
	msg.people[n].y = filters[i].person_filter.y;
	msg.people[n].vx = filters[i].person_filter.px;
	msg.people[n].vy = filters[i].person_filter.py;
	msg.people[n].vxy = filters[i].person_filter.pxy;
	n++;
      }
    }
  }

  msg.timestamp = carmen_get_time_ms();

  err = IPC_respondData(msgRef, CARMEN_DOT_ALL_PEOPLE_MSG_NAME, &msg);
  carmen_test_ipc(err, "Could not respond",
		  CARMEN_DOT_ALL_PEOPLE_MSG_NAME);
}
예제 #3
0
static void query2Handler (MSG_INSTANCE msgRef,
			   void *callData, void *clientData)
{
  MATRIX_LIST_TYPE *matrixList = (MATRIX_LIST_TYPE *)callData;
  FORMATTER_PTR formatter;
  int i, j;

  printf("query2Handler: Receiving message %s [%s]\n", 
	 IPC_msgInstanceName(msgRef),
	 (clientData ? (char *)clientData : "NULL"));

  formatter = IPC_msgInstanceFormatter(msgRef);
  IPC_printData(formatter, stdout, matrixList);

  for (i=0; i<2; i++) for (j=0; j<2; j++) matrixList->matrix[i][j] += 1;

  printf("\n  IPC_respondData(msgRef, %s, matrixList->matrix)\n",
	 RESPONSE2_MSG);
  IPC_respondData(msgRef, RESPONSE2_MSG, &(matrixList->matrix));
  /* Free up malloc'd data */
  IPC_freeData(formatter, matrixList);
}
예제 #4
0
}

static void get_arm_state()
{
  carmen_arm_direct_get_state(arm_state.joint_angles, arm_state.joint_currents, arm_state.joint_angular_vels, NULL);
  arm_state.timestamp = carmen_get_time();
}

static void arm_query_handler(MSG_INSTANCE msgRef, 
			      BYTE_ARRAY callData __attribute__ ((unused)),
			      void *clientData __attribute__ ((unused)))
{
  IPC_RETURN_TYPE err;

  get_arm_state();
  err = IPC_respondData(msgRef, CARMEN_ARM_STATE_NAME, &arm_state);
}

static void arm_command_handler(MSG_INSTANCE msgRef, BYTE_ARRAY callData,
				void *clientData __attribute__ ((unused)))
{
  IPC_RETURN_TYPE err;
  carmen_arm_command_message msg;
  FORMATTER_PTR formatter;

  formatter = IPC_msgInstanceFormatter(msgRef);
  err = IPC_unmarshallData(formatter, callData, &msg,
			   sizeof(carmen_arm_command_message));
  IPC_freeByteArray(callData);
  
  if (msg.num_joints != arm_model.num_joints)