]> pilppa.org Git - lib1wire.git/blob - src/Factory.cc
Support for seting and changing values from device specific config
[lib1wire.git] / src / Factory.cc
1 /*
2  * Factory.cc
3  *
4  *  Created on: Dec 11, 2010
5  *      Author: lamikr
6  */
7
8 #include <plp/log.h>
9 #include "Factory.hh"
10 #include "W1TemperatureSensor.hh"
11 #include "W1CounterDevice.hh"
12
13 using namespace w1;
14 using namespace std;
15
16 Factory::Factory() {
17         // TODO Auto-generated constructor stub
18 }
19
20 Factory::~Factory() {
21         // TODO Auto-generated destructor stub
22 }
23
24 W1Device *Factory::get_device(int family_code,
25                         string device_id,
26                         dirent *direntry_param) {
27         W1Device        *ret_val;
28         DeviceConfig    *config;
29
30         ret_val = NULL;
31         log_debug("family_code: %d\n", family_code);
32         switch(family_code) {
33                 case    0x10:
34                 case    0x28:
35                         ret_val = new W1TemperatureSensor(family_code, device_id, direntry_param);
36                         log_debug("temperature sensor: %d\n", ret_val->get_family_code());
37                         break;
38                 case    0x1d:
39                         ret_val = new W1CounterDevice(family_code, device_id, direntry_param);
40                         log_debug("counter device: %d\n", family_code);
41                         break;
42                 default:
43                         log_debug("device not created, unsupported device type: %d\n", family_code);
44                         break;
45         }
46         if (ret_val != NULL) {
47                 // check that device config exist
48                 // if not, create default...
49                 config  = get_device_config(device_id);
50                 if (config != NULL) {
51                         string  type;
52                         type    = config->get_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE);
53                         if (type.empty() == true) {
54                                 type    = ret_val->get_device_type();
55                                 config->set_cfg_value(DEVICE_CONFIG_VALUE_KEY__TYPE, type);
56                                 config->set_cfg_value(DEVICE_CONFIG_VALUE_KEY__ID, ret_val->get_id());
57                         }
58                 }
59         }
60         return ret_val;
61 }
62
63 DeviceConfig *Factory::get_device_config(string device_id) {
64         DeviceConfig    *ret_val;
65
66         ret_val = new DeviceConfig(device_id);
67         return ret_val;
68 }