VALUE interfacekit_data_rate_set(VALUE self, VALUE index, VALUE rate) {
  PhidgetInfo *info = device_info(self);
  InterfaceKitInfo *ifkit_info = info->type_info;

  // If ratiometric state is not uniform, raise an exception
  if (!interfacekit_ratiometric_state_is_uniform(ifkit_info))
    interfacekit_raise_ratiometric_not_uniform();

  if (TYPE(index) != T_FIXNUM)
    rb_raise(rb_eTypeError, MSG_SENSOR_INDEX_MUST_BE_FIXNUM);

  if (TYPE(rate) != T_FIXNUM)
    rb_raise(rb_eTypeError, MSG_DATA_RATE_VALUE_MUST_BE_FIXNUM);

  int index_int = FIX2INT(index);
  if ((ifkit_info->analog_input_count == 0) || (index_int > (ifkit_info->analog_input_count-1)))
    rb_raise(rb_eTypeError, MSG_SENSOR_INDEX_TOO_HIGH);

  int rate_int = FIX2INT(rate);
  if ((rate_int > ifkit_info->data_rates_min[index_int]) || (rate_int < ifkit_info->data_rates_max[index_int]))
    rb_raise(rb_eTypeError, MSG_DATA_RATE_EXCEEDS_LIMIT);
  
  ensure(CPhidgetInterfaceKit_setDataRate(
    (CPhidgetInterfaceKitHandle)info->handle, index_int, rate_int));

  ifkit_info->data_rates[index_int] = rate_int;
  ifkit_info->sensor_change_triggers[index_int] = 0;

  return rate;
}
CPhidgetInterfaceKitHandle InitializeTempSensors(int n_tempsensors, int* sensor_channels, int rate_tempsensors) {
	int result;
	const char *err;

	/* If ifKit is already defined, return. */
	if (ifKit != NULL) {
		return ifKit;
	}

	/* Create the InterfaceKit object */
	CPhidgetInterfaceKit_create(&ifKit);

	/* Set the handlers to be run when the device is plugged in or opened from software, unplugged or closed from software, or generates an error. */
	CPhidget_set_OnAttach_Handler((CPhidgetHandle)ifKit, AttachHandler, NULL);
	CPhidget_set_OnDetach_Handler((CPhidgetHandle)ifKit, DetachHandler, NULL);
	CPhidget_set_OnError_Handler((CPhidgetHandle)ifKit, ErrorHandler, NULL);

	/* Open the interfacekit for device connections */
	CPhidget_open((CPhidgetHandle)ifKit, -1);

	LOG(logINFO) << "Waiting for interface kit to be attached...";
	if((result = CPhidget_waitForAttachment((CPhidgetHandle)ifKit, 5000))) {
		CPhidget_getErrorDescription(result, &err);
		LOG(logERROR) << "Problem waiting for attachment:" << err;
		return 0;
	}

	/* Set the data input rates of the interface kit potentiometers */
	for (int i = 0; i < n_tempsensors; i++) {
		CPhidgetInterfaceKit_setDataRate(ifKit, sensor_channels[i], rate_tempsensors);
	}

	return ifKit;
}