コード例 #1
0
igtl_uint64 igtl_export igtl_ndarray_get_crc(igtl_ndarray_info * info, int type, void* data)
{
  igtl_uint64   crc;
  igtl_uint64   data_size;
  
  data_size = igtl_ndarray_get_size(info, type);

  crc = crc64(0, 0, 0);
  crc = crc64((unsigned char*) data, data_size, crc);

  return crc;
}
コード例 #2
0
int main( int argc, char * argv [] )
{
  /*** Message structures and byte array ***/
  igtl_header header;
  void * body;
  
  igtl_ndarray_info info;
  size_t body_size;
  igtl_uint16 size[3];

  int i, j, k;
  igtl_float64 * array;

  int rh; /* Comparison result for header */
  int rb; /* Comparison result for body */

  int s;

  /*** Generate test data ***/
  igtl_ndarray_init_info(&info);
  info.type = IGTL_NDARRAY_STYPE_TYPE_FLOAT64;
  /* Array size is 5x4x3 */
  info.dim  = 3;
  size[0] = 5;
  size[1] = 4;
  size[2] = 3;

  if (igtl_ndarray_alloc_info(&info, size) == 0)
    {
    return EXIT_FAILURE;
    }

  /* Generate dummy array */
  array = (igtl_float64 *) info.array;
  for (i = 0; i < 5; i ++)
    {
    for (j = 0; j < 4; j ++)
      {
      for (k = 0; k < 3; k ++)
        {
        array[i*(4*3) + j*3 + k] = (igtl_float64) (i*(4*3) + j*3 + k);
        }
      }
    }

  /** Allocate memory for pack **/
  body_size = (size_t)igtl_ndarray_get_size(&info, IGTL_TYPE_PREFIX_NONE);
  body = malloc(body_size);

  if (body == NULL)
    {
    igtl_ndarray_free_info(&info);
    return EXIT_FAILURE;
    }

  igtl_ndarray_pack(&info, body, IGTL_TYPE_PREFIX_NONE);

  /*** Set OpenIGTLink header ***/
  header.version = 1;
  strncpy( (char*)&(header.name), "NDARRAY", 12 );
  strncpy( (char*)&(header.device_name), "DeviceName", 20 );
  header.timestamp = 1234567892;
  header.body_size = body_size;
  header.crc = igtl_ndarray_get_crc(&info, IGTL_TYPE_PREFIX_NONE, body);
  igtl_header_convert_byte_order( &(header) );

  /* Dumping data -- for testing */
  /*
  FILE *fp;
  fp = fopen("ndarray.bin", "w");
  fwrite(&(header), IGTL_HEADER_SIZE, 1, fp);
  fwrite(body, body_size, 1, fp);
  fclose(fp);
  */

  rh = memcmp((const void*)&header, (const void*)test_ndarray_message_header, IGTL_HEADER_SIZE);
  rb = memcmp((const void*)body, (const void*)test_ndarray_message_body, body_size);

  igtl_ndarray_free_info(&info);
  free(body);

  if (rh == 0 && rb == 0)
    {
    return EXIT_SUCCESS;
    }
  else
    {
    /* Print first 256 bytes as HEX values in STDERR for debug */
    s = IGTL_HEADER_SIZE + body_size;
    if (s > 256)
      {
      s = 256;
      }

    fprintf(stdout, "\n===== First %d bytes of the test message =====\n", s);
    igtl_message_dump_hex(stdout, (const void*)&header, s);

    return EXIT_FAILURE;
    }

}