- if (ret_val != NULL) {
- log_debug("%s: %#x\n", ret_val->get_device_type().c_str(), ret_val->get_w1_family_code());
- // check that device config exist
- config = get_device_config(device_id);
- if (config != NULL) {
- // if not, create default device config
- type = config->get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
- if (type.empty() == true) {
- type = ret_val->get_device_type();
- config->set_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE, type);
- config->set_cfg_value(DEVICE_CONFIG_VALUE_KEY__ID, ret_val->get_id());
+ return ret_val;
+}
+
+Device *Factory::create_device(int family_code_param,
+ string device_id_param,
+ dirent *direntry_param) {
+ Device *ret_val;
+ string type;
+
+ ret_val = NULL;
+ type = get_device_type_by_family_code(family_code_param);
+ if (type.empty() == false) {
+ ret_val = create_device(family_code_param,
+ type,
+ device_id_param,
+ direntry_param);
+ }
+ return ret_val;
+}
+
+Device *Factory::create_device(int device_w1_family_code_param,
+ string device_type_param,
+ string device_id_param,
+ dirent *direntry_param) {
+ Device *ret_val;
+ DeviceConfig *config;
+ bool succ;
+
+ ret_val = NULL;
+ if (device_type_param.empty() == false) {
+ switch(device_w1_family_code_param) {
+ case 0x10:
+ case 0x28:
+ ret_val = new W1TemperatureSensor(device_id_param, device_type_param, direntry_param);
+ break;
+ case 0x1d:
+ ret_val = new W1CounterDevice(device_id_param, device_type_param, direntry_param);
+ break;
+ case 0x81:
+ // 0x81 is the 1-wire USB dongle... No need to create device for it.
+ break;
+ default:
+ log_debug("Unsupported 1-wire-family code: %#x, device not created: %s\n", device_w1_family_code_param, device_id_param.c_str());
+ break;
+ }
+ if (ret_val != NULL) {
+ // check that device config exist
+ config = DeviceConfig::get_device_config(device_id_param);
+ if (config != NULL) {
+ // if not, create default device config
+ succ = config->get_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE, device_type_param);
+ if (succ == false) {
+ device_type_param = ret_val->get_type();
+ config->set_config_value(DEVICE_CONFIG_VALUE_KEY__TYPE, device_type_param, false);
+ config->set_config_value(DEVICE_CONFIG_VALUE_KEY__ID, ret_val->get_id(), true);
+ }
+ delete(config);