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; }