示例#1
0
string APSRack::get_deviceSerial(const int & deviceID) {

	// get current number of devices
	get_num_devices();

	// Get serials from FTDI layer to check for change in devices
	vector<string> testSerials;
	FTDI::get_device_serials(testSerials);

	// match serials for each device id to make sure mapping of device count to serial
	// number is still correct
	// if serial number is different re-enumerate
	for(unsigned int cnt = 0; cnt < testSerials.size(); cnt++) {
		if (testSerials[cnt].compare(deviceSerials_[cnt]) != 0) {
			FILE_LOG(logDEBUG) << testSerials[cnt] << " does not match " << deviceSerials_[cnt] << " re-enumerating.";
			update_device_enumeration();
			break;
		}
	}

	// test to make sure ID is valid relative to vector size
	if (static_cast<size_t>(deviceID) > deviceSerials_.size()) {
		return "InvalidID";
	}

	return deviceSerials_[deviceID];
}
示例#2
0
void handle_device_name_order()
{
  if (parameter_length < 2)
  {
    send_insufficient_bytes_error_response(2);
    return;
  }

  const uint8_t device_type = parameter_value[0];
  const uint8_t device_number = parameter_value[1];

  uint8_t num_devices = get_num_devices(device_type);
  if (device_number >= num_devices)
  {
    if (num_devices < 0)
      send_app_error_response(PARAM_APP_ERROR_TYPE_INVALID_DEVICE_TYPE,0);
    else
      send_app_error_response(PARAM_APP_ERROR_TYPE_INVALID_DEVICE_NUMBER,0);
    return;
  }

  generate_response_start(RSP_OK);
  char *response_data_buf = (char *)generate_response_data_ptr();
  uint8_t response_data_buf_len = generate_response_data_len();

  int8_t length;
  if ((length = NVConfigStore::GetDeviceName(device_type, device_number, response_data_buf, response_data_buf_len)) > 0)
    generate_response_data_addlen(length);
  generate_response_send();
}
示例#3
0
cl_uint get_total_num_devices() {
    cl_uint count_devices = 0;
    cl_uint num_platforms = get_num_opencl_platforms();

    cl_platform_id *platforms =
        (cl_platform_id *)malloc(sizeof(cl_platform_id) * num_platforms);
    CHECK_ALLOC(platforms);
    CHECK(clGetPlatformIDs(num_platforms, platforms, NULL));

    for (cl_uint platform_index = 0; platform_index < num_platforms;
            platform_index++) {
        count_devices += get_num_devices(platforms[platform_index]);
    }

    free(platforms);

    return count_devices;
}
示例#4
0
int main(int argc, char** argv)
{
	cl_device_id dev;
	int i, j;
	unsigned long res;
	cl_runtime rt = new_cl_runtime(false);

	for(i = 0; i < get_num_platforms(); i++)
	{
		for(j = 0; j < get_num_devices(i); j++)
		{
			dev = get_device(rt, i, j);
			print_device_info(dev, false);
			clGetDeviceInfo(dev, CL_DEVICE_PROFILING_TIMER_RESOLUTION, sizeof(cl_ulong), &res, NULL);
			printf("---\nTimer resolution: %lu\n---\n", res);
		}
	}
	delete_cl_runtime(rt);
	return 0;
}
示例#5
0
void handle_device_count_order()
{
  if (parameter_length < 1)
  {
    send_insufficient_bytes_error_response(1);
    return;
  }

  const uint8_t device_type = parameter_value[0];

  uint8_t num_devices = get_num_devices(device_type);
  if (num_devices < 0)
  {
    send_app_error_response(PARAM_APP_ERROR_TYPE_INVALID_DEVICE_TYPE,0);
    return;
  }

  generate_response_start(RSP_OK,1);
  generate_response_data_addbyte(num_devices);
  generate_response_send();
}
示例#6
0
void test_platforms()
{
	int i, j;
	char desc[256];
	struct cl_exec exec = { 0, 0, 1 };

	//Initialize the runtime
	cl_runtime rt = new_cl_runtime(false);
	printf("Testing %d platforms\n\n", get_num_platforms());
	for(i = 0; i < get_num_platforms(); i++)
	{
		exec.platform = i;
		clGetPlatformInfo(get_platform(rt, i), CL_PLATFORM_NAME, sizeof(desc), desc, NULL);
		printf("Testing devices for %s platform\n", desc);
		for(j = 0; j < get_num_devices(i); j++)
		{
			exec.device = j;
			test_device(rt, exec, get_device(rt, i, j));
		}
		printf("\n");
	}
	delete_cl_runtime(rt);
}
示例#7
0
void list_devices() {
    cl_uint num_platforms = get_num_opencl_platforms();
    cl_platform_id *platforms =
        (cl_platform_id *)malloc(sizeof(cl_platform_id) * num_platforms);
    CHECK(clGetPlatformIDs(num_platforms, platforms, NULL));
    int device_index = 0;

    for (cl_uint platform_index = 0; platform_index < num_platforms;
            platform_index++) {
        cl_uint num_devices = get_num_devices(platforms[platform_index]);

        printf("Platform %d (%d devices)\n", platform_index, num_devices);

        cl_device_id *devices = (cl_device_id *)malloc(sizeof(cl_device_id) *
                num_devices);
        CHECK(clGetDeviceIDs(platforms[platform_index], CL_DEVICE_TYPE_ALL,
                    num_devices, devices, NULL));
        for (unsigned d = 0; d < num_devices; d++) {
            cl_device_id dev = devices[d];
            cl_device_type type;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_TYPE, sizeof(type), &type,
                        NULL));
            printf("  Device %d - ", device_index);

            if (type == CL_DEVICE_TYPE_GPU) {
                printf("GPU");
            } else if (type == CL_DEVICE_TYPE_CPU) {
                printf("CPU");
            } else {
                fprintf(stderr, "Unsupported device type in list_devices\n");
                exit(1);
            }

            printf(" - ");

            size_t name_len;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_NAME, 0, NULL, &name_len));
            char *device_name = (char *)malloc(name_len + 1);
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_NAME, name_len, device_name,
                        NULL));
            device_name[name_len] = '\0';
            printf("%s\n", device_name);

            size_t version_len;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_VERSION, 0, NULL, &version_len));
            char *device_version = (char *)malloc(version_len + 1);
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_VERSION, version_len, device_version, NULL));
            device_version[version_len] = '\0';

            cl_uint compute_units;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(compute_units), &compute_units, NULL));

            size_t ext_len;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_EXTENSIONS, 0, NULL, &ext_len));
            char *device_ext = (char *)malloc(ext_len + 1);
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_EXTENSIONS, ext_len, device_ext, NULL));
            device_ext[ext_len] = '\0';

            cl_ulong global_mem_size;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(global_mem_size), &global_mem_size, NULL));

            cl_ulong max_alloc_size;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(max_alloc_size), &max_alloc_size, NULL));

            cl_ulong max_constant_size;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(max_constant_size), &max_constant_size, NULL));

            cl_ulong local_mem_size;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(local_mem_size), &local_mem_size, NULL));

            cl_device_local_mem_type local_type;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(local_type), &local_type, NULL));

            size_t max_arg_size;
            CHECK(clGetDeviceInfo(dev, CL_DEVICE_MAX_PARAMETER_SIZE, sizeof(max_arg_size), &max_arg_size, NULL));

            printf("    %d compute units\n", compute_units);
            printf("    %lu bytes of global mem\n", global_mem_size);
            printf("    %lu byte max alloc size\n", max_alloc_size);
            printf("    %lu byte max constant size\n", max_constant_size);
            printf("    %lu byte local mem size (really local? %s)\n",
                    local_mem_size, local_type == CL_LOCAL ? "true" : "false");
            printf("    %lu byte max arg size\n", max_arg_size);
            printf("    %s\n", device_version);
            printf("    %s\n", device_ext);

            device_index++;
        }
        free(devices);
    }
    free(platforms);
}
示例#8
0
static ibv_device *get_device(DevicesPtr devices, int i) {
    if(i < 0 || i >= get_num_devices(devices)) {
        throw std::out_of_range("cannot get device");
    }
    return devices.get()[i];
}
示例#9
0
cl_uint get_num_devices(cl_platform_id platform) {
    return get_num_devices(platform, CL_DEVICE_TYPE_ALL);
}
示例#10
0
void handle_device_status_order()
{
  if (parameter_length < 2)
  {
    send_insufficient_bytes_error_response(2);
    return;
  }

  const uint8_t device_type = parameter_value[0];
  const uint8_t device_number = parameter_value[1];

  uint8_t num_devices = get_num_devices(device_type);
  if (device_number >= num_devices)
  {
    if (num_devices < 0)
      send_app_error_response(PARAM_APP_ERROR_TYPE_INVALID_DEVICE_TYPE,0);
    else
      send_app_error_response(PARAM_APP_ERROR_TYPE_INVALID_DEVICE_NUMBER,0);
    return;
  }

  generate_response_start(RSP_OK, 1);

  switch(device_type)
  {
  case PM_DEVICE_TYPE_SWITCH_INPUT:
    if (!Device_InputSwitch::IsInUse(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  case PM_DEVICE_TYPE_SWITCH_OUTPUT:
    if (!Device_OutputSwitch::IsInUse(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else if (!Device_OutputSwitch::GetEnableState(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_DISABLED);
      // TODO handle inactive state
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  case PM_DEVICE_TYPE_PWM_OUTPUT:
    if (!Device_PwmOutput::IsInUse(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else if (!Device_PwmOutput::GetActiveState(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_INACTIVE);
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  case PM_DEVICE_TYPE_STEPPER:
    if (!AxisInfo::IsInUse(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else if (is_stopped)
      generate_response_data_addbyte(DEVICE_STATUS_STOPPED);
    else if (!AxisInfo::GetStepperEnableState(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_INACTIVE);
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  case PM_DEVICE_TYPE_HEATER:
    if (!Device_Heater::ValidateTargetTemperature(device_number, 0))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else if (is_stopped)
      generate_response_data_addbyte(DEVICE_STATUS_STOPPED);
    else if (Device_Heater::GetTargetTemperature(device_number) == 0)
      generate_response_data_addbyte(DEVICE_STATUS_INACTIVE);
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  case PM_DEVICE_TYPE_TEMP_SENSOR:
    if (!Device_TemperatureSensor::IsInUse(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  case PM_DEVICE_TYPE_BUZZER:
    if (!Device_Buzzer::IsInUse(device_number))
      generate_response_data_addbyte(DEVICE_STATUS_CONFIG_ERROR);
    else if (Device_Buzzer::GetActiveState(device_number) == 0)
      generate_response_data_addbyte(DEVICE_STATUS_INACTIVE);
    else
      generate_response_data_addbyte(DEVICE_STATUS_ACTIVE);
    break;
  default:
    send_app_error_response(PARAM_APP_ERROR_TYPE_INVALID_DEVICE_TYPE,0);
    return;
  }
  generate_response_send();
}